《汇编语言实验.doc》由会员分享,可在线阅读,更多相关《汇编语言实验.doc(37页珍藏版)》请在金锄头文库上搜索。
1、实验一 DEBUG命令实验一实验目的: 掌握DEBUG 的基本命令及其功能二实验内容:DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、DEBUG的主要命令(1) 汇编命令A,格式为:-A地址;该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。例如:-a136B:0100 mov ax,100136B:0103 mov bx,200136B:0106 mov cx,300136B:0109 mov dx,400136B:010C-(2) 反汇编命令U,有两种格式:1)-U地址该命令从
2、指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。例如:-u2)-U范围该命令对指定范围的内存单元进行反汇编,例如:(3) 运行命令G,格式为:-G =地址1地址2地址3。其中地址1规定了运行起始地址,后面的若干地址均为断点地址。例如:(4) 追踪命令T,有两种格式:1)逐条指令追踪:-T=地址;该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。2)多条指令追踪:-T=地址值,该命令从指定地址起执行n条命令后停下来,n由值确定。 (5) 显示内存单元内容的命令D,格式为:-D地址或-D范围(6) 修改内存单元内容的命令E,它
3、有两种格式:1)用给定的内容代替指定范围的单元内容:-E地址 内容表 例如:-E 2000:0100 F3 “XYZ” 8D其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元049e:0005到0008的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。2)逐个单元相继地修改:-E地址例如:此命令是将原5号单元的内容f3改为8989是程序员键入的。(7) 检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-RR命令显示中标志位状态的含义如下表所示:标 志 名置 位复 位溢出Overflow(是/否)OVNV方向Di
4、rection(减量/增量)DNUP中断Interrupt(允许/屏蔽)EIDI符号Sign(负/正)NGPL零Zero(是/否)ZRNZ辅助进位Auxiliary Carry(是/否)ACNA奇偶Parity(偶/奇)PEPO进位Carry(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如打入:-R AX表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-R BXBX 0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为:-RF系统将给出响应,如OV DN EI NG ZR AC PE C
5、Y-这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如OV DN EI NG ZR AC PE CY-PONZDINV三 、实验任务1 参照附录1,掌握DEBUG程序的各种命令,重点是命令R,D ,A,U,T,P,G命令的使用。2 用命令A汇编下列指令,判断指令正误并说明原因。(1) ROR AX,8(2) LEA DI,AX(3) MOV DS,2010(4) PUSH AL(5) OUT 900,AL(6) MOV BX,03 用命令查看8086/8088 CPU在开机后执行的第一条指令。4 用命令D查看DS:20022F和F000:20022F两内存块内容,用
6、命令F将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。5 用A命令汇编一条INT 1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断向量和中断子程,掌握中断指令的执行过程。6 利用T,P,G命令,执行下列指令段,注意它们的不同之处。(1) MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3(2) MOV AH,2MOV DL,41INT 21INT 3(3) 先在CS:200处汇编一条RET指令,再在CS:100处汇编。MOV BX,20
7、0CALL BXINT 3 然后从MOV BX,200处开始执行。实验三 分支程序实验一、实验目的 1)掌握分支程序的设计方法。 2)掌握利用DEBUG修改参数、检查结果的方法。 3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。 二、实验内容 1)编写一个程序,显示AL寄存器中的两位十六进制数 2)编写一个程序,判别键盘上输入的字符;若是0-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。 1)显示AL中两位十六进制数程序: ;DISPHEX.ASM CODE SEGMENT ASSUM
8、E CS:CODE START: MOV AL,3EH 0011 1110MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL 逻辑右移4位,dl= 0000 0011CMP DL,9 比较JBE NEXT1 小于等于ADD DL,7 NEXT1: ADD DL,30H 0000 0011+0011 0000 dl=33hMOV AH,2 ah=0000 0010INT 21H ;显示高位ASCII码 MOV DL,BL AND DL,0FH 0ehCMP DL,9 JBE NEXT2 ADD DL,7 NEXT2: ADD DL,30H MOV AH,2 INT 21
9、H ;显示低位ASCII码 MOV AH,4CH INT 21H CODE ENDS ;返回DOS END START 2)显示键入字符程序 ;DISPKEY.ASM CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 ;1号功能调用INT 21H ;等待键入字符,送AL CMP AL,0DH ;是否是回车符? JZ DONE ;是则转DONE退出程序 CMP AL,0 JA NEXT CMP AL,9 JB CHARUP MOV DL,AL MOV AH,2 INT 21H ;显示09JMP START CHARUP: CMP AL,41H JA NEXT
10、 CMP AL,5AH JB CHRDN DISPC: MOV DL,C MOV AH,2 INT 21H NEXT: JMP START CHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE: MOV AH,4CH INT 21H ;返回DOSCODE: ENDS END START 首先运行程序:对程序进行但不执行,了解程序的运行过程:程序流图:实验四 循环程序实验一、实验目的: 1)掌握循环程序的设计方法 2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 3)学会针对不同的问题,选用不同的组织循环
11、的方法。 二、实验内容 1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。 2)存储单元DAT1及DAT2中各有10字节的二进制数,高位字节放在高位地址中。试编写一程序将这两个数据相加,结果存放在从DAT3开始的单元中。 1)偶校验程序清单: ;EX56.ASM DESG SEGMENT STRN DB ASCDEfghijkLMNOPQuvw,$ N DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV
12、 DS, AX LEA SI, STRN MOV DL, 0 AGAIN: MOV AL, SI CMP AL, $ JE DONE TEST AL, 0FFH JPE NEXT OR AL, 80H MOV SI, AL INC DL NEXT: INC SI JMP AGAIN DONE: MOV N, DL MOV AH, 4CH INT 21H CSEG ENDS END START ;以上是条件控制的循环。因为事先不知道字符串STRN共有多少字符,故采用条件控制的循环程序实现。 可以看出,有十个字符进行了偶校验2)加法程序清单: ;ADDHEX.ASM CODE SEGMENT AS
13、SUME CS: CSEG, DS: DSEG START: MOV AX, CS MOV DS, AX LEA SI, DAT1 LEA DI, DAT2 LEA BX, DAT3 MOV CX, 10 XOR AL, AL ;0CF AGAIN: MOV AL, SI ADC AL, DI MOV BX, AL INC SI INC DI INC BX LOOP AGAIN MOV AH, 4CH INT 21H DAT1 DB 70H, 80H, 90H, A0H, A1H, A2H, A3H DB 74H, 65H, 56H DAT2 DB 45H, 67H, 89H, 1AH, 2B
14、H, 3CH DB 4DH, 5EH, 6FH, 04H DAT3 DB 10 DUP(?) CODE ENDS END START ;本程序中,DS及CS同处一个逻辑段CODE中,所以,应将CS值送至DS中。 相当于计算实验五 子程序实验(1)一、实验目的 1)掌握主程序与子程序之间的调用关系及调用方法。 2)掌握子程序调用过程中近程调用与远程调用的区别。 3)掌握通过堆栈转送参数的方法。 二、实验内容 1)将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。在转换过程中,通过