文档库

最新最全的文档下载
当前位置:文档库 > 微机实验:汇编语言程序的调试与运行步骤

微机实验:汇编语言程序的调试与运行步骤

软件实验一汇编语言程序的调试与运行

一.实验目的

1.学习数据传送和算术运算指令的用法

2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

二.实验内容

将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。

三.程序框图

微机实验:汇编语言程序的调试与运行步骤

图1.1 两个多位十进制相加程序流程图

四.程序清单

DISP MACRO X

MOV DL,X ;要显示的字符送DL寄存器

MOV AH,02H ;DOS功能调用号是02H

INT 21H ;21H中断程序是DOS功能调用

ENDM

DATA SEGMENT

DATA1 DB '12732'

DATA2 DB '06815'

N EQU $-DA TA2

DATA ENDS

STACK SEGMENT STACK

STA DB 20 DUP (?)

TOP EQU $-STA

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA START:MOV AX,DA TA

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 ;显示加数

DISP '='

LEA DI,DA TA1

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 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.编辑源程序,建立一个以后缀为.ASM的文件.

2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。

3.连接目标程序,产生可执行程序。

4.TDEBUG调试可执行程序,记录数据段DS:0~DS:10的内容。

微机实验:汇编语言程序的调试与运行步骤

微机实验:汇编语言程序的调试与运行步骤

5.在操作系统状态下,运行程序,并记录屏幕显示内容。

微机实验:汇编语言程序的调试与运行步骤

六.思考题

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 $-DA TA2

DATA ENDS

STACK SEGMENT STACK

STA DB 20 DUP (?)

TOP EQU $-STA

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA

START:MOV AX,DA TA

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 ;显示加数

DISP '='

LEA DI,DA TA1

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 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

2.简单叙述上机步骤,调试方法。

上机步骤及调试

①编写代码完成功能要求,文件格式为.asm 文件(如文件名为a.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM.EXE)和链接工具(LINK.EXE)的文件夹。

②打开运行窗口,输入“cmd”然后确定。启动命令行,进入上述文件夹

输入:tasm a.asm

回车后编译产生a.obj文件

再输入:link a.obj

回车后链接产生a.exe文件

最后输入:a.exe

回车后运行结果如图1

微机实验:汇编语言程序的调试与运行步骤

图1.运行结果

如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型及错误码,改正错误后再重新编译链接,直到没有错误和编译链接成功。

③启动TD并载入add.exe ,在代码段可以看到程序指令,部分符号已被实际地址或数值替换表示。

④查看数据区的数值:

右击选择数据区的菜单中的Goto,在其输入框内输入要查看的数据区地址,如cs:000FH,如图2和图3;

回车确认后即可查看数据区从段地址为CS、偏移地址为000FH开始的存储情况

微机实验:汇编语言程序的调试与运行步骤

图2.goto

微机实验:汇编语言程序的调试与运行步骤

图3.找到CS字段

○5设置断点

选中“cs:000FH”段,然后运行菜单栏“Breakpoints”,在该处设置断点!断点设置完成后再运行程序.

○6查看DS

同样用Goto找到想要查看的DS,

微机实验:汇编语言程序的调试与运行步骤

图4.找到对应的DS

○7记录DS

微机实验:汇编语言程序的调试与运行步骤

微机实验:汇编语言程序的调试与运行步骤

微机实验:汇编语言程序的调试与运行步骤

微机实验:汇编语言程序的调试与运行步骤

[注意]

1、将源代码部分直接拷贝到文本文件中,再将其扩展名改为.asm。

2、使用个人主页中的汇编语言编译器(TASM.EXE或MASM.EXE之一均可),将1中的

源文件编译成扩展名为.obj的目标文件;再将其链接成为可执行文件(使用TLINK.EXE文件或LINK.EXE文件之一均可);

例如:假设源文件名为temp.asm。

汇编过程如下:masm temp.asm

link temp.obj

执行temp.exe文件即可

3、TDEBUG 程序可在个人主页中下载;直接双击运行;

4、程序清单的开始定义了一段宏,作用是显示X字符;宏的作用相当于一个函数,可以

在后续的程序中直接调用

5、DISP 0DH 和DISP 0AH是显示换行回车符