1、微机实验汇编语言程序的调试与运行步骤doc软件实验一 汇编语言程序的调试与运行一实验目的1学习数据传送和算术运算指令的用法2熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。二实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DATA2为首的5个内存单元中,结果送回DATA1处。三程序框图图1.1 两个多位十进制相加程序流程图四程序清单 DISP MACRO X MOV DL,X ;要显示的字符送DL寄存器 MOV AH,02H ;DOS功能调用号是02H INT 21H ;21H中断程序是DOS功能调用 ENDM DATA SEGMEN
2、T DATA1 DB 12732 DATA2 DB 06815 N EQU $-DATA2 DATA ENDS STACK SEGMENT STACK STA DB 20 DUP (?) TOP EQU $-STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX LEA SI,DATA1 ; MOV BX,0 MOV CX,N CALL DISPL ;显示被加数 DISP
3、+ LEA SI,DATA2 MOV BX,0 MOV CX,N CALL DISPL ;显示加数 DISP = LEA DI,DATA1 MOV CX,N CALL ADDA ;调用加法子程序 LEA SI,DATA1 MOV BX,0 MOV CX,N CALL DISPL ;显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H DISPL PROC ;显示子程序 DS1: MOV AH,02H MOV DL,SI+BX INT 21H INC BX LOOP DS1 RET DISPL ENDP ADDA PROC ;加法子程序 PUSH CX MO
4、V BX,0 AD1: SUB BYTE PTR SI+BX,30H SUB BYTE PTR DI+BX,30H INC BX LOOP AD1 POP CX PUSH CX MOV BX,N-1 ; CLC AD2: MOV AL,SI+BX ADC AL,DI+BX AAA MOV DI+BX,AL DEC BX LOOP AD2 POP CX PUSH CX MOV BX,0 ; AD3: ADD BYTE PTR DI+BX,30H INC BX LOOP AD3 POP CX RET ; ADDA ENDP CODE ENDS END START五调试步骤1编辑源程序,建立一个以后
5、缀为 ASM的文件.2汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。3 连接目标程序,产生可执行程序。4 TDEBUG调试可执行程序,记录数据段DS:0DS:10的内容。 进入TDEBUG程序后。执行程序至星号处DS:0HDS:0AH 的内容 (CS:000FH)31 32 37 33 32 30 36 38 31 35 (CS:0076H)01 02 07 03 02 00 06 08 01 05 (CS:0086H)01 09 05 04 07 00 06 08 01 05 (CS:0090H)31 39 35 34 37 00 06 08 01 0
6、55 在操作系统状态下,运行程序,并记录屏幕显示内容。被 加 数加 数屏 幕 显 示 内 容127320681519547107324369154423650871763182718六思考题1.将上述程序改为5位数相加,结果为6位数的加法程序。(需考虑进位)新的程序清单: DISP MACRO X MOV DL,X ;要显示的字符送DL寄存器 MOV AH,02H ;DOS功能调用号是02H INT 21H ;21H中断程序是DOS功能调用 ENDM DATA SEGMENT DATA1 DB 82732 ;修改后的5位数,相加为6位数! DATA2 DB 36815 N EQU $-DATA
7、2 DATA ENDS STACK SEGMENT STACK STA DB 20 DUP (?) TOP EQU $-STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX LEA SI,DATA1 ; MOV BX,0 MOV CX,N CALL DISPL ;显示被加数 DISP + LEA SI,DATA2 MOV BX,0 MOV CX,N CALL DISPL
8、;显示加数 DISP = LEA DI,DATA1 MOV CX,N CALL ADDA ;调用加法子程序 LEA SI,DATA1 MOV BX,0 MOV CX,N CALL DISPL ;显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H DISPL PROC ;显示子程序 DS1: MOV AH,02H MOV DL,SI+BX INT 21H INC BX LOOP DS1 RET DISPL ENDP ADDA PROC ;加法子程序 PUSH CX MOV BX,0 AD1: SUB BYTE PTR SI+BX,30H SUB BYTE
9、PTR DI+BX,30H INC BX LOOP AD1 POP CX PUSH CX MOV BX,N-1 ; CLC AD2: MOV AL,SI+BX ADC AL,DI+BX AAA MOV DI+BX,AL DEC BX LOOP AD2 POP CX PUSH CX MOV BX,0 ; AD3: ADD BYTE PTR DI+BX,30H INC BX LOOP AD3 POP CX RET ; ADDA ENDP CODE ENDS END START2.简单叙述上机步骤,调试方法。上机步骤及调试 编写代码完成功能要求,文件格式为.asm 文件(如文件名为a.asm),将文
10、件放入带汇编工具的文件夹中,即含有汇编工具(MASM.EXE)和链接工具(LINK.EXE)的文件夹。 打开运行窗口,输入“cmd”然后确定。启动命令行,进入上述文件夹输入:tasm a.asm 回车后编译产生a.obj文件再输入:link a.obj 回车后链接产生a.exe文件最后输入: a.exe 回车后运行结果如图1图1.运行结果如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型及错误码,改正错误后再重新编译链接,直到没有错误和编译链接成功。 启动TD并载入add.exe ,在代码段可以看到程序指令,部分符号已被实际地址或数值替换表示。 查看数据区的数值:右击选择数据区的菜
11、单中的Goto,在其输入框内输入要查看的数据区地址,如cs:000FH,如图2和图3;回车确认后即可查看数据区从段地址为CS、偏移地址为000FH开始的存储情况图2.goto图3.找到CS字段设置断点选中“cs:000FH”段,然后运行菜单栏“Breakpoints”,在该处设置断点!断点设置完成后再运行程序.查看DS同样用Goto找到想要查看的DS,图4.找到对应的DS记录DS 注意1、 将源代码部分直接拷贝到文本文件中,再将其扩展名改为asm。2、 使用个人主页中的汇编语言编译器(TASM.EXE或MASM.EXE之一均可),将1中的源文件编译成扩展名为.obj的目标文件;再将其链接成为可执行文件(使用TLINKEXE文件或LINKEXE文件之一均可);例如:假设源文件名为temp.asm。 汇编过程如下:masm temp.asm link temp.obj 执行temp.exe文件即可3、 TDEBUG 程序可在个人主页中下载;直接双击运行;4、 程序清单的开始定义了一段宏,作用是显示X字符;宏的作用相当于一个函数,可以在后续的程序中直接调用 5、 DISP 0DH 和DISP 0AH是显示换行回车符