当前位置:文档之家› 汇编语言实验报告

汇编语言实验报告

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序1、启动DOS操作系统2、运行程序(若当前盘为C)C:>DEBUG↙– ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)3、用“A”命令编辑和汇编源程序-A136C:0100 MOV AX,[0200]136C:0103 MOV BX,[0202]136C:0107 ADD AX,[0204]136C:010B ADC BX,[0206]136C:010F MOV [0208],AX136C:0112 MOV [020A],BX136C:01164、用“U”命令反汇编验证源程序-U CS:0100136C:0100 A10002 MOV AX,[0200]136C:0103 8B1E0202 MOV BX,[0202]136C:0107 03060402 ADD AX,[0204]136C:010B 131E0602 ADC BX,[0206]136C:010F A30802 MOV [0208],AX136C:0112 891E0A02 MOV [020A],BX136C:0116 0000 ADD [BX+SI],AL136C:0118 0000 ADD [BX+SI],AL136C:011A 0000 ADD [BX+SI],AL136C:011C 3400 XOR AL,00136C:011E 5B POP BX136C:011F 1300 ADC AX,[BX+SI]-5、程序未执行前,用“R”命令观察,相关寄存器的内容。

–R↙如:(AX)=0000,(BX)=0000,(SI)=0000,(DI)=0000,(CS)=136C,(IP)=0100。

6、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容–D 200 20B ↙7、用“G”命令运行源程序–G =0100 0116 ↙8、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容–D 200 20B↙9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。

四.实验结果(包括必要的截图)1-4截图5-9截图实验结果分析1、程序运行结果:(AX)=00AB,(BX)=00ABDS:0208H四字节单元的内容:2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。

(参考下列程序流程图)附加题1.从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x-E 0000 1C 02 01 00 FF 00 38 04-D 00001361:0000 1C 02 01 00 FF 00 38 04-1D F0 4F 03 C5 0D 8A 031361:0010 C5 0D 17 03 C5 0D 11 04-01 01 01 00 02 FF FF FF1361:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 7C 0D 4E 011361:0030 85 12 14 00 18 00 61 13-FF FF FF FF 00 00 00 001361:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 001361:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 201361:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 201361:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00-A1361:0100 MOV AX,[0000]1361:0103 MOV BX,[0002]1361:0107 IMUL BX1361:0109 ADD AX,[0004]1361:010D ADC DX,00001361:0110 SUB AX,21C1361:0113 SBB DX,00001361:0116 MOV CX,AX1361:0118 MOV BX,DX1361:011A MOV AX,[0006]1361:011D MOV DX,00001361:0120 SUB AX,CX1361:0122 SBB DX,BX1361:0124 MOV BX,[0000]1361:0128 IDIV BX1361:012A-G =0100 012AAX=0001 BX=021C CX=00FF DX=011D SP=FFEE BP=0000 SI=0000 DI=0000DS=1361 ES=1361 SS=1361 CS=1361 IP=012A NV UP EI PL ZR NA PE NC1361:012A 0000 ADD [BX+SI],AL DS:021C=00-五、实验体会1.DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。

2.在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。

3.在DEBUG下,大小写不敏感。

4.使用DEBUG进行实验,非常麻烦。

实验二汇编语言程序设计(顺序、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

三.实验过程和程序1.DATA SEGMENTX DW 45Y DW 67Z DW 89V DW 12SUM1 DW ?SUM2 DW ?DATA EDNSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,XMOV BX,YIMUL BXMOV BX,ZADD AX,BXADC DX,0MOV BX,720SUB AX,BXSBB DX,0MOV BX,AXMOV CX,DXMOV AX,VCWDSUB AX,BXSBB DX,CXMOV BX,XIDIV BXMOV SUM1,AXMOV SUM2,DXMOV AH,4CHINT 21HCODE ENDSEND START2.DATA SEGMENTGRADE DW 10 DUP(55,65,75,85,95) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,50MOV BX,0MOV AX,0AGAIN:ADD AX,GRADE[BX]INC BXINC BXLOOP AGAINMOV BX,50DIV BXMOV AH,4CHINT 21HCODE ENDSEND START3.LEN EQU 51DATA SEGMENTSTRING DB LEN,?,LEN DUP(?) LF DB 0AHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXLEA DX,STRINGMOV AH,0AHINT 21HMOV DL,LFMOV AH,2INT 21HMOV CL,STRING[1]MOV CH,0LEA BX,STRING[2]ADD BX,CXMOV BYTE PTR [BX],'$'LEA DX,STRING[2]MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四、实验结果(包括必要的截图)1.2.3.四.实验体会1.通过实验,掌握了masm下的汇编格式,运行和调试的主要过程:masm1.txt→link 1.obj→debug 1.exe;2.在第一个实验中,需要注意,如果数的类型不同,需要进行扩展,而且在masm 中,数默认为十进制,而在debug环境下,数默认为是十六进制的;3.在第二个实验中,需要掌握循环程序设计的方法;4.在第三个实验中,需要注意串的操作指令,注意当题目给定字符串不超过50时,应当LEN EQU 51,这样程序才能正确运行。

实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容1. BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

三.实验过程和程序1.地址表Data segment;AddT dw L0,L1,L2,L3,L4,L5,L6,L7S0 db 'The 0 Bit is 1$'S1 db 'The 1 Bit is 1$'S2 db 'The 2 Bit is 1$'S3 db 'The 3 Bit is 1$'S4 db 'The 4 Bit is 1$'S5 db 'The 5 Bit is 1$'S6 db 'The 6 Bit is 1$'S7 db 'The 7 Bit is 1$'Serror db 'NO BIT is 1 $'Data endsCode segmentassume cs:code, ds:datastart:mov ax,datamov ds,axmov bl,01000000Bcmp bl,0jnz nextjmp errornext: mov si,0mov cx,8Again:shr bl,1Jc Switchinc siloop AgainSwitch:mov Bx,sishl si,1add si,Bxadd si, offset JMPTablejmp siJMPTable:JMP L0JMP L1JMP L2JMP L3JMP L4JMP L5JMP L6JMP L7org $+80HL0: mov dx,offset S0mov ah,9int 21hjmp exitL1: mov dx,offset S1mov ah,9int 21hjmp exitL2: mov dx,offset S2mov ah,9int 21hjmp exitL3: mov dx,offset S3mov ah,9int 21hjmp exitL4: mov dx,offset S4mov ah,9int 21hjmp exitL5: mov dx,offset S5mov ah,9int 21hjmp exitL6: mov dx,offset S6mov ah,9int 21hjmp exitL7: mov dx,offset S7mov ah,9int 21hjmp exiterror: mov dx,offset Serrormov ah,9int 21hexit:mov ah,4chint 21hCode endsend start转移表:DATA SEGMENTS0 DB 'The 0 bit is 1', 0AH, 0DH, '$' S1 DB 'The 1 bit is 1', 0AH, 0DH, '$' S2 DB 'The 2 bit is 1', 0AH, 0DH, '$'S3 DB 'The 3 bit is 1', 0AH, 0DH, '$'S4 DB 'The 4 bit is 1', 0AH, 0DH, '$'S5 DB 'The 5 bit is 1', 0AH, 0DH, '$'S6 DB 'The 6 bit is 1', 0AH, 0DH, '$'S7 DB 'The 7 bit is 1', 0AH, 0DH, '$' NONE DB 'Every bit is 0', 0AH, 0DH, '$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AXMOV CH, 8MOV AX, -3MOV BL, 4AGAIN:DEC CH ;CMP CH, -1 ;JZ NONE1 ;ADD AX, 3 ;SHR BL, 1JNC AGAINLEA SI, JMPTBADD SI, AXJMP SIJMPTB:JMP NEAR PTR L0JMP NEAR PTR L1JMP NEAR PTR L2JMP NEAR PTR L3JMP NEAR PTR L4JMP NEAR PTR L5JMP NEAR PTR L6JMP NEAR PTR L7L0:LEA DX, S0JMP DONEL1:LEA DX, S1JMP DONEL2:LEA DX, S2JMP DONEL3:LEA DX, S3JMP DONEL4:LEA DX, S4JMP DONEL5:LEA DX, S5JMP DONEL6:LEA DX, S6JMP DONEL7:LEA DX, S7JMP DONENONE1:LEA DX, NONE DONE:MOV AH, 9H ;INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START2.DATA SEGMENT ORG 0X DW 1234HY DW 5678HZ DD 0CODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AXSUB SP, 4 ;PUSH X ;PUSH Y ;CALL FXYZLEA BX, ZPOP WORD PTR[BX]POP WORD PTR[BX+2]MOV AH, 4CHINT 21HFXYZ PROC NEAR ;PUSH BPMOV BP, SP ;PUSH AX ;PUSH BXPUSH DXMOV AX, 6[BP]MOV BX, 4[BP]IMUL BXADD AX, 6[BP]ADC DX, 0SUB AX, 4[BP]SBB DX, 0MOV 8[BP], AXMOV 10[BP], DXPOP DXPOP BXPOP AXPOP BPRET 4FXYZ ENDPEND START四.实验结果(包括必要的截图)1.地址表转移表2.五.实验体会1.掌握了分支和子程序结构的设计方法,还掌握了地址表和转移表的设计思路;2.着重阅读书122-124,有关地址表和转移表的设计的地方;3.需要注意在计算地址表时候,乘以2,而在计算转移表的时候乘以3,注意两者区别。

相关主题