合肥工业大学汇编语言程序设计实验报告_第1页
合肥工业大学汇编语言程序设计实验报告_第2页
合肥工业大学汇编语言程序设计实验报告_第3页
合肥工业大学汇编语言程序设计实验报告_第4页
合肥工业大学汇编语言程序设计实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、合肥工业大学计算机与信息学院实验报告课 程:汇编语言程序设计专业班级:学 号:姓 名: 实验一 Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二. 实验内容实验内容:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H

2、单元中。实验要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三. 实验过程和程序1、启动DOS操作系统2、运行DEBUG.COM程序(若当前盘为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

3、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,AX 186E:0112 891E0A02 MOV 020A,BX 186E:0116 注意: 1)检查源程序是否有错误,若有则返回到第3步用“A 地址”命令进行修改,直到程序无错误。 2)DEBUG约定在

4、其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。 3)在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。 4)在DEBUG下,大小写不敏感。5、程序未执行前,用“R”命令观察,相关寄存器的内容。R如:(AX)= 0000H,(BX)= 0000H,(SI)= 0000H, (DI)= 0000H,(CS)= 13F5H,(IP)= 0100H。6、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容 D 200 20B 7、用“G”命令运行源程序 G =100 0116 8、再用“D”命令观察DS:0200HDS:0

5、20BH字节单元中的内容 D 200 20B 9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄器内容的变化,并与预计的结果相比较。 注意:D命令显示内存数据,注意观察多字节数据在内存中的存放方式。指令执行的时。程序运行结果:(AX)= 1110H ,(BX)= 1111H DS:0208H四字节单元的内容: 11111110H 四. 实验结果(包括必要的截图)五. 实验体会 通过这次实验的练习,我熟悉了在DEBUG的环境下,汇编程序中的命令,并且学会调试运行汇编语言源程序,掌握8086/8088的寻址方式及多字节数据的处理方法。虽然自己动手实现了简单的计算的中间出现了很多

6、错误,但是在查阅书本以及在老师和同学的帮助下完成了实验任务。实验二 汇编语言程序设计(顺序、循环)一. 实验目的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结束,字符串不超过5

7、0个字符,并打印该字符串(附加题:查找中间是否有asm子串。如果有,输出Yes;否则,输出No)。三. 实验过程和程序1)data segment x dw 1 y dw 0 z dw 0 v dw 0 sum1 dw ? sum2 dw ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax,x imul y mov cx,ax mov bx,dx mov ax,z cwd add cx,ax adc bx,dx sub cx,720 sbb bx,0 mov ax,v cwd sub

8、ax,cx sbb dx,bx idiv x mov sum1,ax mov sum2,dx mov ax,4c00hint 21hcode ends end start2data segment grade dw 98,98,96,95,94,93,87,86,85,97,86 data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax xor ax,ax mov cx,11 mov bx,offset grade loop1: add ax,bx inc bx inc bx loop loop1 mov

9、cx,11 idiv cx mov bx,ax mov ax,4c00h int 21h Code ends end start3)DATA SEGMENTBUF DB 50, ?, 50 DUP(24H)CHAR  DB 0AH,0DH,"$"DATA ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATASTART:    MOV 

10、;AX,DATA    MOV DS,AX       MOV AH,10    LEA DX,BUF    INT 21H    LEA DX,CHAR    MOV AH,9    INT 21H 

11、0;     LEA DX,BUF+2    MOV AH,9    INT 21H       MOV AH,4CH    INT 21H4. 实验结果(包括必要的截图)5. 实验体会 通过这次实验的练习,我掌握了顺序和循环程序结构和设计方法,并且可以自己动手在debug下运用顺序和循环的程序结构自己设计汇

12、编的代码,另外这节课我还学会了在在屏幕上输入和输出字符串,非常的有趣,顺便我又熟悉了一遍在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程,感觉收获颇丰。挺高了自己对于学习汇编的兴趣。实验三 汇编语言子程序设计(分支、子程序)一. 实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。3、通过汇编语言了解高级语言的参数传递等知识。二. 实验内容1、1. BL中的只有一位为1。编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。2. 编写一个子程序计算z=f(x,y)

13、=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。3. 实践CàAsm的转换过程。三. 实验过程和程序1.;实验三 第一题DATA SEGMENT;定义提示信息msg,msgi分别代表第i字节出为1msg1 db'the 1 bit is 1',0dh,0ah,'$'msg2 db'the 2 bit is 1',0dh,0ah,'$'msg3 db'the 3 bit is 1',0dh,0ah,'$'msg4 db'the 4 bit is

14、 1',0dh,0ah,'$'msg5 db'the 5 bit is 1',0dh,0ah,'$'msg6 db'the 6 bit is 1',0dh,0ah,'$'msg7 db'the 7 bit is 1',0dh,0ah,'$'msg8 db'the 8 bit is 1',0dh,0ah,'$'DATA ENDSSTACKS SEGMENT ;未定义栈内容STACKSENDSCODES SEGMENT ASSUME CS:CODE

15、S,DS:DATA,SS:STACKSSTART: MOV AX,DATA MOV DS,AX ;程序代码部分 xor bx,bx;用异或将bx,dx部分清零 xor dx,dx mov bl,08h;将00001000b赋值给bl mov cx,8;利用loop进行8次循环Lp1: shr bl,1;将bl进行逻辑右移一次 jc next;判断CF中数据是否为1,若是跳转到next处 add dx,3;dx加3 loop Lp1next: mov ah,09h lea si,table;将转移表的地址传入到si中 add si,dx;得到转移表的CF为1的地方jmp sitable:;同一个

16、代码段内使用near跳转 jmp near ptr l1 jmp near ptr l2 jmp near ptr l3 jmp near ptr l4 jmp near ptr l5 jmp near ptr l6 jmp near ptr l7 jmp near ptr l8 ;Li: 将msgi的地址传入到dx中,并跳转到done处l1:lea dx,msg1 jmp done l2:lea dx,msg2 jmp donel3:lea dx,msg3 jmp donel4:lea dx,msg4 jmp donel5:lea dx,msg5 jmp donel6:lea dx,msg6

17、 jmp donel7:lea dx,msg7 jmp donel8:lea dx,msg8 jmp done ;返回汇编窗口done: int 21h MOV AH,4CHINT 21H;代码部分结束CODESENDS END START2.DATASSEGMENTx dw 6y dw 8 DATAS ENDSSTACKS SEGMENT ;未定义栈部分STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;主程序部分 mov ax,x;分别将x,y压栈 push ax

18、 mov ax,y push ax call f;调用子程序f(x,y) add sp,4 pop ax pop ax;子程序调用结束,弹栈 MOV AH,4CH INT 21H ;子程序部分fproc push bp mov bp,sp push ax push dx push bx mov bx,bp+4;bx=y mov ax,bp+6;ax=x imul bx;x*y add ax,bp+6;x*y+x adc dx,0 sub ax,bp+4;x*y+x-y sbb dx,0 pop bx pop dx pop ax retf endp CODESENDS END START四. 实

19、验结果(包括必要的截图)五. 实验体会 通过这次实验的练习,我掌握分支和子程序结构和设计方法,特别是地址表和转移表的运用,已经可以熟练的运用转移表和地址表进行分支结构的设计,实验二又让我对子程序参数的调用有了深刻的体会,知道了在运用堆栈进行参数传递时需要注意的要点,另外这次实验又让我再一次熟悉一遍在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。实验四 汇编语言高级编程专题一. 实验目的1、汇编语言宏程序设计;2、 掌握中断服务子程序的编写。3、 汇编语言与高级语言的混编。二. 实验内容1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min2、挂接1C

20、H中断,正计时60秒后退出。要求屏幕显示0-59的秒数。3、VC+中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte = 0x34,0x45,0x56,0x67,0xaf;三. 实验过程和程序1;宏 min3min3macro x,y,zmov al,xmov bl,ymov cl,zcmp al,bl;比较al,bljae j1 ;bl<aljmp j2;否则al<blj1:cmp bl,cl;比较bl,cljae j3;cl<bljmpj5;否则bl<clj2:cmp al,cl;比较al,cljae j3;cl<aljmp j4;否则a

21、l<clj3:mov ah,02h;min clmov dl,clor dl,30hint 21hjmp done j4:mov ah,02h;min almov dl,alor dl,30hint 21hjmp donej5:mov ah,02h;min blmov dl,blor dl,30hint 21hjmp donedone:mov ah,4chint 21hendmDATAS SEGMENT ;未定义数据段数据DATAS ENDSSTACKS SEGMENT ;未定义栈段数据STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,S

22、S:STACKSSTART: MOV AX,DATAS MOV DS,AX min3 2,1,6;找出2 1 6三数中最小数 MOV AH,4CH INT 21HCODES ENDSEND START2.DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 0 ISDONE DB 0 DATA ENDSSTACKS SEGMENT ;未定义STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATA,SS:STACKSSTART: MOV AX,DATA MOV DS,AX xor ax,ax MOV ES,A

23、X xor cx,cx MOV AX, ES:1ch*4 MOV OLDISR0,AX MOV AX,ES:1ch*4+2 MOV OLDISR2, AX MOV WORD PTR ES:1ch*4, OFFSET ISR MOV WORD PTR ES:1ch*4+2,SEG ISRWAITHERE: CMP ISDONE,1 JNZ WAITHERE EXIT: MOV AX,OLDISR0 MOV ES:1ch*4,AX MOV AX,OLDISR2 MOV ES:1ch*4+2,AX MOV AX,4C00H INT 21H ISR PROC FAR PUSH DX PUSH AX MOV AX,DATA MOV DS,AX STI INC TIMERAGAIN:mov

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论