1、 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 +
2、 LEA SI,DATA2显示加数= LEA DI,DATA1 CALL ADDA ;调用加法子程序 LEA SI,DATA1显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H DISPL PROC ;显示子程序 DS1: MOV AH,02H MOV DL,SI+BX INC BX LOOP DS1 RET DISPL ENDP ADDA PROC ;加法子程序 PUSH CX AD1: SUB BYTE PTR SI+BX,30H SUB BYTE PTR DI+BX,30H LOOP AD1 POP CX MOV BX,N-1 ; CLC AD2:
3、 MOV AL,SI+BX ADC AL,DI+BX AAA MOV DI+BX,AL DEC BX LOOP AD2 MOV BX,0 ; AD3: ADD BYTE PTR DI+BX,30H LOOP AD3 RET ; ADDA ENDP CODE ENDS END START五调试步骤1编辑源程序,建立一个以后缀为 ASM的文件.2汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。3 连接目标程序,产生可执行程序。4 TDEBUG调试可执行程序,记录数据段DS:0DS:10的内容。 进入TDEBUG程序后。执行程序至星号处DS:0HDS:0AH 的
4、内容 (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 055 在操作系统状态下,运行程序,并记录屏幕显示内容。被 加 数加 数屏 幕 显 示 内 容127320681519547107324369154423650871763182718六思考题1.将上述程序改为5位数相加,结果为6位数的加法程序。(需考虑进位)新的程序清单: DI
5、SP MACRO X82732 ;修改后的5位数,相加为6位数!368152.简单叙述上机步骤,调试方法。上机步骤及调试 编写代码完成功能要求,文件格式为.asm 文件(如文件名为a.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM.EXE)和链接工具(LINK.EXE)的文件夹。 打开运行窗口,输入“cmd”然后确定。启动命令行,进入上述文件夹输入:tasm a.asm 回车后编译产生a.obj文件再输入:link a.obj 回车后链接产生a.exe文件最后输入: a.exe 回车后运行结果如图1图1.运行结果如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型
6、及错误码,改正错误后再重新编译链接,直到没有错误和编译链接成功。 启动TD并载入add.exe ,在代码段可以看到程序指令,部分符号已被实际地址或数值替换表示。 查看数据区的数值:右击选择数据区的菜单中的Goto,在其输入框内输入要查看的数据区地址,如cs:000FH,如图2和图3;回车确认后即可查看数据区从段地址为CS、偏移地址为000FH开始的存储情况图2.goto图3.找到CS字段设置断点选中“cs:000FH”段,然后运行菜单栏“Breakpoints”,在该处设置断点!断点设置完成后再运行程序.查看DS同样用Goto找到想要查看的DS,图4.找到对应的DS记录DS注意1、 将源代码部
7、分直接拷贝到文本文件中,再将其扩展名改为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是显示换行回车符