实验一调试程序――DEBUG_第1页
实验一调试程序――DEBUG_第2页
实验一调试程序――DEBUG_第3页
实验一调试程序――DEBUG_第4页
实验一调试程序――DEBUG_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自己收集整理的 错误在所难免 仅供参考交流 如有错误 请指正!谢谢 微机原理及应用实验指导书 辽东学院信息技术学院 主编:蔡杰 前 言 本实验指导书是配合微型计算机原理与接口技术清华大学出版社冯博琴主编、微型计算机原理与系统谢维达主编、微型计算机原理及接口技术裘雪红主编而编写的旨在理论联系实际 培养学生解决问题达到学以致用 为今后计算机专业的学习打下基础 在编写中难免有不当之处 恳请各位学者赐教 也希望各位同仁提出宝贵的意见 谢谢 辽东学院计算机应用系 蔡 杰 20042 实验一 调试程序- 实验目的 初步掌握汇编语言 可以调试简单的程序 实验内容 用汇编语言编写一个简单的加法运算程序 编程提

2、要 1.进入DEBUG状态 开机进入DOS状态 C>DEBUG 屏幕显示: - "-"为已进入DEBUG状态 在该提示符下可键入DEBUG命令 下划线部分为用户键入的字符或命令 2键入程序并汇编 用DEBUG的A命令送入程序: -A 100 MOV AL,33 MOV DL,35 ADD DL,AL SUB DL,30 MOV AH,2 INT 21 3 执行程序 -G 4反汇编 可以用反汇编U命令将键入的程序调出 并且可以得到每条汇编指令的机器码 -u起始地址 终止地址 5退出DEBUG返回DOS状态 -Q 6显示内存命令D -D 0100 -D 起始地址 终止地址

3、 7修改存储单元命令E -E 地址 8检查和修改寄存器内容命令R 格式:a. R c. R寄存器名 功能:a.显示CPU内部所有寄存器的内容和全部标志位的状态 b.显示和修改一个指定寄存器的内容和标志位的状态 9追踪与显示命令T 格式:a. T=地址或 T地址 b. T=地址条数 10命名命令N 格式:N文件名 11读盘命令L 12.写盘命令W 实验报告(写出上机结果及现象) 实验二 汇编与宏汇编程序 实验目的 通过实验了解汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序 汇编程序可以使用小汇编程序(ASM)也可以用宏汇编程序(MASM) 由于宏汇编程序不但可以代替ASM 而且

4、可以汇编具有宏定义的汇编程序 因此我们在汇编程序时使用宏汇编程序(MASM 实验内容 执行宏汇编程序 编程提要 1.汇编过程 在DOS状态下 键入MASM则调入宏汇编程序 屏幕显示与操作如下: masm Microsoft (R Macro AssembLe Version 5.00 Copyright (C Microsoft Corp 19 81-1985,1987.All rights reserved. Source filename .ASM: ex2 Object filename ex2.OBJ: ex2 Source listing NUL.LST: ex2 Cross- re

5、ference NUL.CRF: ex2 50678+410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors 2.在DOS状态下 键入LINK(或LINK EX2则系统调入LINK程序 屏幕显示操作如下: C>LINK IBM Personal Computer Linker Version 2.00(C Copyright IBM Corp 1981,1982,1983 Object Modules .OBJ: EX2 Run File EX2.EXE:EX2 List FileNUL.MAP:EX2 Librar

6、ies.LIB: 3.执行程序 当用连接程序LINK将目标程序(.OBJ连接定位后 可产生可执行文件(.EXE 可以在DOS状态下执行该程序 C>EX2 How are you ! 也可以键入EX2.EXE C>EX2.EXE How are you ! 实验报告(写出上机结果及现象) 实验三 初级程序的编写与调试实验 实验目的 1熟练掌握DEBUG的常用命令 学会用DEBUG调试程序 2深入了解数据在存储器中的存储方法 及堆栈中数据的压入与弹出 3掌握各种寻址方法及简单指令的执行过程 实验内容 1.设堆栈指针Sp2000H Ax=3000H,Bx=5000H请编一程序将Ax的内容

7、和Bx的内容进行交换 请用堆栈作为两寄存器交换内容的中间存储单元 用Debug调试程序进行汇编与调试 2.设DS当前段指地址 BS=0300H SI=0002H 请用DEBUG的命令将存储器依稀偏移地址300H304H连续单元顺序装入OAH、OBH、OCH、OEH 在DEBUG状态下送入下面程序 并用单元步执行的方法 分析每条指令源地址的形成过程?当数据传送完毕时 Ax中的内容是什么? 程序清单如下: MOV Ax.Bx MOV Ax,0304H MOV Ax,0304H MOV Ax,Bx MOV Ax,0001Bx MOV Ax,BxSi MOV Ax,0001BxSi HLT 3.设Ax

8、=0002H 编一个程序段将Ax的内容乘10 要求用移位的方法完成 编程提要 实验内容1 将两个寄存器的内容进行交换时 必顺有一个中间寄存器才能进行内容的交换 如果用堆栈做为中间存储单元 必顺遵循先进后出的原则 实验内容2 1 其中数据寄存器中的段地址为进入Debug状态后系统自动分配的段地址 2 Si和Bx的初值 可在Debug状态下 用R命令装入 也可以在程序中用指令来完成 3 用T命令程序执行执行 可进行单步跟踪执行 每执行一条指令就可以看到各寄存器的状态 也可用R命令直接调出寄存器 来栓验各寄存器内容是否确 4 在执行程序前 可用E命令将偏移地址300H304H送入OAH,OBH,OC

9、H ODH 实验内容3 用移位的方法完成某些乘法运算 是较为常见的方法 操作数左作一位为操作数乘2运算 实验报告(写出上机结果及现象) 实验四 计算学生平均成绩的实验 实验目的 熟悉汇编语言程序的使用 掌握十 进制数的运算和设计显示程序运行结果的格式 实验内容 编写程序 计算20个分数的平均值 并以十进制表示将结果显示在屏幕上 显示格式的要求如下: 第一行显20个分数; 第二行显示AVERAGE SCORE=平均分数 编程提要 (1)自己编写算法 将求得的平均分数的十进制值 转换成十进制表示 其算法是平均分数二进制的低4位>9则加6 对于高4位 将其值乘以16再与4位十进制调整的结果相加

10、 即得到最终结果 乘法可以用多次加法实现 (2) 显示字符串信息用DOS功能调用INT21H 功能号为09H (3) 显示平均数结果时 用DOS功能调用INT21H 功能号为02H 每位数必顺将其转换成相应的ASC码 参考程序流程框图 Y 附:参考程序 ;*AVGSCORE.ASM* DATA SEGMENT MES1 DB 92,85,74,81,70,68,65,78,54,43 DB 94,100,83,88,79,83,79,69,62,60 MES2 DW 92,85,74,81,70,68,65,78,54,43 DW 94,100,83,88,79,83,79,69,62,60

11、;- MES3 DB 'AVERAGE SCORE=','$' DATA ENDS ; - CODE SEGMENT ASSUME CS:CODE,DS:DATA ;- START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES1 MOV AH,09H INT 21H ;显示提示信息 ;- MOV BX,OFFSET MES2 MOV CL,20 MOV AX,0000 NEXT: ADD AX,WORD PTRBX;将各分数累加求和 ADD BX,02 LOOP NEXT MOV CL,20 DIV CL;求得平均分数和二进制

12、值 MOV DL,AL ;- AND AL,0F0H;平均分数的十进制调整 MOV CL,04 ROR AL,CL MOV CL,AL;平均分数高四位进进制值送入CL MOV AL,DL AND AL.0FH CMP AL,09 JBE HAD ADD AL,06 ; 平均分数的低4位十进调整 HAD: MOV BL,16H ; 平均分数高位十进制调整 NT: ADD AL,BL DAA MOV BH,AL;平均分数十进制值送入BH LOOP NT ;- - MOV DX,OFFSET MES3 MOV AH,09H INT 21H ; 屏幕显示平均分数提示符 MOV AL,BH AND AL

13、,0F0H COM CH,04 ROR AL,CH ADD AL,30H MOV DL,AL MOV AH,02 INT 21H ; 显示平均分数高位 ;- MOV AL,BH AND AL,OFH ADD AL,30H MOV DL,AL MOV AH,02 INT 21H ; 显示平均分数的低4位 ;- MOV AX.4C00H INT 21H ; 返回DOS CODE ENDS END START 实验报告(写出上机结果及现象) 实验五 分类统计学生成绩实验 实验目的 熟悉数据分类的一种方法 并掌握屏幕上显示数据格式的方法 实验内容 编写程序 将20个百分制的分数按<60 6069

14、,7079,8089,9099和100共六档进行分类 统计出每档的个数及总数 编程提要(1)分类后的结果需要转换成ASC码并在屏幕上显示 可以将ASC码的转换程序写成子程序 供调用 (2)显示字符串和程序可以采用DOS功能调用INT21H 功能号为09H 参考程序流程框图 FIVE SIX FEVEN Y FIVE FIVE EIGHT N Y SIX NINE N TEN Y FEVEN N Y EIGHT EIGHT N Y NINE NINE N Y TEN N N Y 附:参考程序 ;*SORT.ASM* DATA SEGMENT MES0 DB '92,85,74,81,70

15、,68,65,78,54,43',0AH,0DH DB '94,100,83,88,79,83,79,69,62,60',0AH,0DH,'$' MES1 DB 'SCORE<60 :','$' MES2 DB 'SCORE<60-69 :','$' MES3 DB 'SCORE<70-79 :','$' MES4 DB 'SCORE<80-89 :','$' MES5 DB 'SCORE<

16、90-99 :','$' MES6 DB 'SCORE=100 :','$' MES7 DB 'TOTAL NUMBER :','$' RESULT DB 92,85,74,81,70,68,65,78,54,43 DB 94,100,83,88,79,83,79,69,62,60 ;- TOTAL DB 00 S5 DB 00 S6 DB 00 S7 DB 00 S8 DB 00 S9 DB 00 S10 DB 00 DATA ENDS ;- CODE SEGMENT ASSUME CS:CODE,DS:

17、DATA ;- START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET RESULT ;送分类数据的指针 MOV AX,0020 COMP: MOV AL,SI;取数据 CMP AL,60 JL FIVE;<60转FIVE入口处理 CMP AL,70 JL SIX;<70转SIX入口处理 CMP AL,80 JL ESVEN;<80转ESVEN入口处理 CMP AL,90 JL EIGHT;<90转EIGHT入口处理 CMP AL,100 JL NINE;<100转NINE入口处理 CMP AL,100 JE TEN;100转TEN入

18、口处理 JMP NEXT FIVE: MOV AL,S5 ADD AL,01;5存入<60的个数 DAA MOV S5,AL JMP NEXT SIX: MOV AL,S6 ADD AL,01;6存入60-69的个数 DAA MOV S6,AL JMP NEXT SEVEN: MOV AL,S7 ADD AL,01;7存入70-79的个数 DAA MOV S7,AL JMP NEXT EIGHT: MOV AL,S8 ADD AL,01;8存入80-89的个数 DAA MOV S8,AL JMP NEXT NINE: MOV AL,S9 ADD AL,01;9存入90-99的个数 DAA

19、 MOV S9,AL JMP NEXT TEN: MOV AL,S10 ADD AL,01;10存入=100的个数 DAA MOV S10,AL NEXT: MOV AL,T0TAL ADD AL,01 DAA MOV TOTAL,AL;TOTAL保存分类数据的个数 INC SI LOOP COMP ;- MOV DX,OFFSET MES0;显示分类的结 果 MOV AH,09H INT 21 MOV DX,OFFSET MES1 MOV AH,O9H INT 21H MOV AL,S5 CALL DISP MOV DX,OFFSET MES2 MOV AH,O9H INT 21H MOV

20、AL,S6 CALL DISP MOV DX,OFFSET MES3 MOV AH,O9H INT 21H MOV AL,S7 CALL DISP MOV DX,OFFSET MES4 MOV AH,O9H INT 21H MOV AL,S8 CALL DISP MOV DX,OFFSET MES5 MOV AH,O9H INT 21H MOV AL,S9 CALL DISP MOV DX,OFFSET MES6 MOV AH,O9H INT 21H MOV AL,S10 CALL DISP MOV DX,OFFSET MES7 MOV AH,O9H INT 21H MOV AL,TOTAL

21、CALL DISP MOV AX,4C00H INT 21H ;- DISP PROC NEAR;显示分类的结果子程序 PUSH CX ; 用于将数据转换成ASCII码 MOV BL,AL ; 并在屏幕上显示 AND AL,0F0H MOV CL,04 ROR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,BL AND AL,OFH ADD AL,30H AMV DL,AL MOV AH,02H INT 21H MOV DL,0DH MOV AH,O2 INT 21H MOV DL,0AH MOV AH,02 INT 21H POP

22、CX RET DISP ENDP CODE ENDS END START 实验报告(写出上机结果及现象) 实验六 求从TABLE开始的20个无符号字节的和 结果放到SUM字单元之中 实验目的 熟练使用汇编语言 实验内容 从TABLE开始的10个无符号字节的和 结果放到SUM字单元之中 编程提要 源程序学生自己编写 参考程序: DATA SEGMENT TABLE DB 12H 23H 34H 45H 56H DB 67H 78H 89H 9AH 0FDH SUM DW? DATA ENDS ; STACK SEGMENT DB 50 DUP(? STACK ENDS ; CODE SEGMEN

23、T ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SI,TABLE MOV CX,10 XOR AX,AX NEXT: ADD AL,SI ADC AH,0 INC SI LOOP NEXT MOV SUM,AX HLT CODE ENDS END START 实验报告(写出上机结果及现象) 实验七 对于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序 实验目的 用汇编语言编写简单的程序 实验内容 对

24、于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序 编程提要 源程序学生自己编写 参考程序: DATA SEGMENT NUM DB 80H,39H,28H RESULT DW? DATA ENDS CODE SEGMENT ASSUME CS:C ODE,DS:DATA START: MOV AX DATA MOV DS AX LEA SI NUM LEA DI RESULT MOV AL,SI MOV BL,SI+1 MUL BL MOV BH,SI+2 MOV BH,0 SUB AX,BX MOV DI,AX MOV AH,4CH INT 21H CODE

25、ENDS END START 实验报告(写出上机结果及现象) 实验八 内存自TABLE开始的连续10个单元中有放在0-9的平方值 查表求DATA中任意数X(0<=X<=9的平方值 并将结果放到RESULT中 实验目的 能够熟练使用汇编语言 对内存数据求值 实验内容 内存自TABLE开始的连续10个单元中有放在0-9的平方值 查表求DATA中任意数X(0<=X<=9的平方值 并将结果放到RESULT中 编程提要 源程序学生自己编写 参考程序: DSEG SEGMENT TABLE DB 0,1,4,9,16,25,36,49,64,81 DATA DB ? RESULT

26、DB? DSEG ENDS SSEG SEGMENT STACK 'STACK' DB 100 DUP (? SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG BEGIN: MOV AX DSEG MOV DS AX MOV AX SSEG MOV SS AX LEA BX TABLE MOV AH 0 MOV AL DATA ADD BX AX MOV AL BX MOV RESULT AL MOV AH 4CH INT 21H CSEG ENDS END BEGIN 实验报告(写出上机结果及现象) 实验九 编写程序

27、数据以字节变量BUFFER为首地址的50个单元清零 实验目的 能够熟练使用汇编语言进行编程 实验内容 编写程序 数据以字节变量BUFFER为首地址的50个单元清零 编程提要 源程序学生自己编写 参考程序: DATA SEGMENT BUFFER DB 50 DUP(?) COUNT DB 50 DATA ENDS STACK SEGMENT DW 32 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE DS:DATA SS:STACK START: MOV AX DATA MOV DS AX MOV AX STACK MOV SS AX MOV CL

28、COUNT LEA BX BUFFER AGAIN: MOV BX 0 INC BX CMP BX COUNT JB AGAIN MOV AH 4CH INT 21H CODE ENDS END START0 实验报告(写出上机结果及现象) 实验十 编程:把用ASCII码形式表示的数转换为二进制码 ASCII码存放在以TABLE为首的地址的内存单元中转换结果放在SUM单元中 实验目的 使用汇编编程进行内码转换 实验内容 把用ASCII码存放在以TABLE为首的地址的内有单元中转换结果放在SUM 编程提要 源程序学生自己编写 参考程序: DATA SEGMENT TABLE DB '2&

29、#39;,'6','A','1' SUM DB 2 DUP(? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX DATA MOV DS AX MOV CL 4 MOV CH CL LEA SI TABLE CLD XOR AX AX XOR DX DX NEXT1: LODS TABLE AND AL 7FH CMP AL '0' JL ERROR CMP AL '9' JG NEXT2 SUB AL 30H JMP SHORT NEXT3 N

30、EXT2: CMP AL 'A' JL ERROR CMP AL 'F' JG ERROR SUB AL 37H NEXT3: OR DL AL ROR DX CL DEC CH JNZ NEXT1 MOV WORD PTR SUM DX MOV AH 4CH INT 21H CODE ENDS END BEGIN 实验报告(写出上机结果及现象) 实验十一 编程:把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字字符串 (自设一个16位数) 实验目的 使用汇编编程进行内码转换 实验内容 把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字字符串(自设一个16位数) 编程提要 源程序学生自己编写 参考程序: DATA SEGMENT BUFF DW 4FB6H ASCC DB 5 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE DS:DATA START:MOV AX DATA MOV DS AX MOV CX 5 LEA DI ASCC XOR DX DX MOV AX BUFF MOV BX 0AH AGAIN:DIV BX ADD DL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论