合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:信息安全11-1学号:20112914姓名:王佳淼实验一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”命令编辑和汇编源程序–A ↙186E:0100 MOV AX,[0200]↙186E:0103 MOV BX,[0202]↙186E:0107 ADD AX,[0204]↙186E:010B ADC BX,[0206]↙186E:010F MOV [0208],AX↙186E:0112 MOV [020A],BX↙186E:0116 ↙4、用“U”命令反汇编验证源程序–U CS:0100↙186E:0100 A10002 MOV AX,[0200]186E:0103 8B1E0202 MOV BX,[0202]186E:0107 03060402 ADD AX,[0204]186E:010B 131E0602 ADC BX,[0206]186E:010F A30802 MOV [0208],AX186E:0112 891E0A02 MOV [020A],BX186E:0116–注意:●检查源程序是否有错误,若有则返回到第3步用“A 地址”命令进行修改,直到程序无错误。
●DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。
●在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。
●在DEBUG下,大小写不敏感。
5、程序未执行前,用“R”命令观察,相关寄存器的内容。
–R↙如:(AX)= 0000 ,(BX)= 0000 ,(SI)= 0000 ,(DI)= 0000 ,(CS)= 1376 ,(IP)= 0100 。
6、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容–D 200 20B ↙7、用“G”命令运行源程序–G =100 0116 ↙8、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容–D 200 20B↙9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。
注意:●D命令显示内存数据,注意观察多字节数据在内存中的存放方式。
●指令执行的时候,IP寄存器随着变化,注意观察。
四.实验结果(包括必要的截图)利用寄存器的方法:五.实验体会能使用debug在dos界面下编译代码。
能熟练使用各种debug命令,例如-u、-g、-d、-r等命令。
熟练掌握8086/8088的寻址方式及多字节数据的处理方法实验二汇编语言程序设计(顺序、循环)一.实验目的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、计算表达式并存入内存Stack segmentdw 512 dup(?)Stack endsData segmentx dw 100y dw 100z dw 100v dw 100sum1 dw ?sum2 dw ?Data endsCode segmentassume cs:code, ds:data, ss:stackstart:mov ax,datamov ds,axmov ax,x;在代码段填入指令序列mov bx,yimul bxadd ax,zadc dx,0sub ax,720sbb dx,0mov cx,dxmov bx,axmov ax,vcwdsub ax,bxsbb dx,cxmov bx,xidiv bxmov sum1,axmov sum2,dxmov ah,4chint 21hCode endsend start2、求出平均值、最大值、最小值Stack segmentdw 512 dup(?)Stack endsData segmentstu db 25 dup(35,37)s1 db 'the max is:$'s2 db 'the min is:$'s3 db 'the avg is:$'display db 5 dup('$')Data endsCode segmentassume cs:code, ds:data, ss:stack start:mov ax,datamov ds,ax; 在代码段填入指令序列mov al,0mov si,0mov cl,50mov bh,0; maxmov bl,100; minagain: add al,stu[si]adc ah,0cmp bh,stu[si]ja L1mov bh,stu[si]L1: cmp bl,stu[si]jb L2mov bl,stu[si]L2: inc siloop againmov cl,50div cl; avg在al中mov cl,ah; 保存ahlea dx,s3mov ah,09hint 21hmov ah,clcall DISPlea dx,s2; 最小值输出mov ah,09hint 21hmov al,blcall DISPmov ah,02h; 输出回车换行mov dl,0ahint 21hmov ah,0dhint 21hlea dx,s1; 最大值输出mov ah,09hint 21hmov al,bhcall DISPmov ah,4chint 21hDISP procpush bxcmp al,100jz mfcmp al,10jb gwmov ah,0mov bl,10div bladd al,30hmov display[0],aladd ah,30hmov display[1],ahdone: lea dx,displaymov ah,09hint 21hmov ah,02h; 输出回车换行mov dl,0ahint 21hmov ah,0dhint 21hpop bxretmf: mov display[0],31hmov display[1],30hmov display[2],30hjmp donegw: add ah,30hmov display[0],ahjmp doneDISP ENDPCode endsend start3、读入字符串Code segmentassume cs:code, ds:data start:mov ax,datamov ds,axmov ah,0ahlea dx,x+2int 21hmov ah,02h; 输出回车换行mov dl,0ahint 21hmov ah,0dhint 21hmov dx,offset x+2mov ah,09hint 21hlea si,xlea di,ymov bx,dimov ah,48again: mov cx,3repz cmpsbjz foundinc simov di,bxdec ahjnz againmov ah,02h; 输出回车换行mov dl,0ahint 21hmov ah,0dhint 21hlea dx,s2jmp donefound: lea dx,s1done: mov ah,09hint 21hmov ah,4chint 21hCode endsend start四.实验结果(包括必要的截图)2.12.22.3五.实验体会通过此次试验,我掌握顺序和循环程序结构和设计方法,能在PC上对循环结构和顺序结构进行编程。
熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二.实验内容1、1. BL中的只有一位为1。
编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。
2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
三.实验过程和程序1、1. BL中的只有一位为1。
编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。
;地址表法Data segmentS1 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$'S8 DB 'The 8 Bit is 1$'addrtb dw L0,L1,L2,L3,L4,L5,L6,L7Data endsCode segmentassume cs:code, ds:data start:mov ax,datamov ds,axmov bl,02hmov al,0ffhagain: inc alshr bl,1jnc againshl al,1; al乘以2mov bl,almov bh,0 jmp addrtb[bx]mov ah,4chint 21hL0: lea dx,S1jmp outputL1: lea dx,S2jmp outputL2: lea dx,S3jmp outputL3: lea dx,S4jmp outputL4: lea dx,S5jmp outputL5: lea dx,S6jmp outputL6: lea dx,S7jmp outputL7: lea dx,S8jmp outputoutput: mov ah,09hint 21hmov ah,4chint 21hCode endsend start;转移表法Data segmentS1 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$'S8 DB 'The 8 Bit is 1$'Data endsCode segmentassume cs:code, ds:data start:mov ax,datamov ds,axmov bl,02hmov al,-1again: inc alshr bl,1jnc againmov ah,0mov cx,axshl ax,1add ax,cx; al乘以3lea si,jmptbadd si,axjmp sijmptb:jmp L0jmp L1jmp L2jmp L3jmp L4jmp L5jmp L6jmp L7org $+80hL0: lea dx,S1jmp outputL1: lea dx,S2jmp outputL2: lea dx,S3jmp outputL3: lea dx,S4jmp outputL4: lea dx,S5jmp outputL5: lea dx,S6jmp outputL6: lea dx,S7jmp outputL7: lea dx,S8jmp outputoutput: mov ah,09hint 21hmov ah,4chint 21hCode endsend start2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。