合工大汇编语言实验报告_第1页
合工大汇编语言实验报告_第2页
合工大汇编语言实验报告_第3页
合工大汇编语言实验报告_第4页
合工大汇编语言实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、合肥工业大学计算机与信息学院实验报告课 程:汇编语言程序设计专业班级: 学 号: 姓 名: 实验一 Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为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 MOV 0

3、20A,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 注意:l 检查源程序是否有错误,若有则返回到第3步用“A 地址”命令进行修改,直到程序无错误。l DEBUG约定在其命令或源程序

4、中所涉及到的数据均被看作十六进制数,其后不用“H”说明。l 在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。l 在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:020BH字节单元中

5、的内容 D 200 20B9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。注意:l D命令显示内存数据,注意观察多字节数据在内存中的存放方式。l 指令执行的时候,IP寄存器随着变化,注意观察。(六)实验结果分析1、程序运行结果:(AX)= 1110H ,(BX)= 1111H DS:0208H四字节单元的内容: 11111110H SI200HDI204HBX208HAX SIDXSI+2AXAX+DIDXDX+DI+2 BX(AX)BX+2(DX)开始结束2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。(参考下列程序流程

6、图)四. 实验结果(包括必要的截图)五. 实验体会通过这次实验的联系,我熟悉了一些DEBUG程序中的命令,并且学会在DEBUG下调试运行汇编语言源程序掌握8086/8088的寻址方式及多字节数据的处理方法,我自己动手实现了简单的计算,中间出现了很多错误,但在查阅书本以及在老师的帮助下完成了实验任务。实验二 汇编语言程序设计(顺序、循环)一. 实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。二. 实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:计算

7、表达式值(V(X*Y+Z-720)/X;将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有asm子串。如果有,输出Yes;否则,输出No)。三. 实验过程和程序(1)code segment assume cs:code,ds:code x dw 02d0h y dw 1h z dw 0ffffh v dw 02d0h SUM1 dw ? SUM2 dw ? sum dw ?start:mov ax

8、,code 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,2d0h sbb bx,0 mov ax,v cwd sub ax,cx sbb dx,bx idiv x mov SUM1,ax mov SUM2,dx mov ah,4ch int 21hcode ends end start(2)code segment assume cs:code,ds:code str db 10 dup (3ah,2dh,60h,5ah,4ch) start:mov ax,code

9、mov ds,ax mov bx,0h mov si,bx mov cx,32h mov ax,0hnext: add al,strsi adc ah,0h inc si loop next mov bl,32h idiv bl mov dl,al mov dh,ah mov ah,4ch int 21hcode ends end start(3)code segment assume cs:code,ds:code str db 50,?,50 dup (?); cr db 0dhstart:mov ax,code mov ds,ax mov cx,32h mov dl,0 mov si,2

10、next: mov ah,1 int 21h cmp al,cr ; jz et mov strsi,al inc si inc dl loop next; et: mov str+1,dl mov strsi+1,'$' mov ax,seg str+2 mov ds,ax mov dx,offset str+2 mov ah,9 int 21 mov ah,4ch int 21hcode ends end start四. 实验结果(包括必要的截图)1.2.3.五. 实验体会通过这次实验的训练,我基本掌握了顺序和循环程序结构和设计方法,并且可以自己动手在debug下运用顺序和

11、循环的程序结构自己设计汇编的代码,另外这节课我还学会了在在屏幕上输入和输出字符串,非常的有趣,顺便我又熟悉了一遍在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

12、,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。三. 实验过程和程序实验一地址表: jmp outputfunc6:lea dx,msg6 jmp outputfunc7:lea dx,msg7 jmp outputfunc8:lea dx,msg8 jmp outputoutput: mov ah,9 int 21hmov ah,4chint 21hcseg endsend startjc jumpmov bx,0again:shr num,1jmp nextjump:jmp addrtblbxnext:add bx,2jmp againfunc1:lea dx,msg1

13、 jmp outputfunc2:lea dx,msg2 jmp outputfunc3:lea dx,msg3 jmp outputfunc4:lea dx,msg4 jmp outputfunc5:lea dx,msg5 dseg segmentmsg1 db 'The one Bit is 1','$'msg2 db 'The two Bit is 1','$'msg3 db 'The three Bit is 1','$'msg4 db 'The four Bit is 1'

14、,'$'msg5 db 'The five Bit is 1','$'msg6 db 'The six Bit is 1','$'msg7 db 'The seven Bit is 1','$'msg8 db 'The eight Bit is 1','$'num db 1addrtbl dw func1,func2,func3,func4,func5,func6,func7,func8dseg endscseg segmentassume ds:ds

15、eg,cs:csegstart:mov ax,dsegmov ds,ax 转移表:data segment s1 db 'The one Bit is 1','$' s2 db 'The two Bit is 1','$' s3 db 'The three Bit is 1','$' s4 db 'The four Bit is 1','$' s5 db 'The five Bit is 1','$' s6 db 'The si

16、x Bit is 1','$' s7 db 'The seven Bit is 1','$' s8 db 'The eight Bit is 1','$'data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov bl,80h mov cx,8 mov si,0next: ror bl,1 ;循环右移 jc skit ;若该位为1,则转移 jmp skit1skit: mov dx,si ;si*3 shl dx,

17、1 add dx,si add dx,offset jmptable jmp dxskit1: inc si loop nextjmptable: ;转移 jmp l1 jmp l2 jmp l3 jmp l4 jmp l5 jmp l6 jmp l7 jmp l8 ;org $+80hl1: lea dx,s1 jmp etl2: lea dx,s2 jmp etl3: lea dx,s3 jmp etl4: lea dx,s4 jmp etl5: lea dx,s5 jmp etl6: lea dx,s6 jmp etl7: lea dx,s7 jmp etl8: lea dx,s8 et

18、: mov ah,9 int 21h mov ah,4ch int 21hcode ends end start实验2 dseg segmentx dw 2y dw 3w label wordz dd ?dseg endssseg segment stack dw 512 dup (?)sseg endscseg segmentassume ds:dseg,cs:cseg,ss:ssegstart:mov ax,dsegmov ds,axsub sp,4push xpush ycall proc1pop wpop w+2mov ah,4hint 21hproc1 procpush bpmov

19、bp,sppush axpush bxpush cxpush dxmov ax,word ptrbp+6imul word ptrbp+4mov bx,axmov cx,dxmov ax,word ptrbp+6cwdadd bx,axadc cx,dxmov ax,word ptrbp+4cwdsub bx,axsbb cx,dxmov bp+10,cxmov bp+8,bxpop dxpop cxpop bxpop axpop bpret 4proc1 endpcseg ends end start四. 实验结果(包括必要的截图)地址表:转移表实验2 五. 实验体会通过这次实验的练习,我掌

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

21、验过程和程序实验1min3 macro x,y,z,min local skip,done mov ax,x cmp ax,y jle skip1 mov ax,yskip1: cmp ax,z jle done mov ax,zdone: mov min,ax endmdseg segmentmin dw "?"dseg ends cseg segmentassume ds:dseg,cs:csegstart: mov ax,dseg mov ds,ax min3 2,3,4,min mov ah,4ch int 21hcseg ends end start实验2INTN

22、O EQU 1CH USEINT = 1 DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 59 COUNT DW 0 ISDONE DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,0 MOV ES,AX ;PROTECT IF USEINT MOV AL, INTNO MOV AH,35H INT 21H ;ES:BX MOV OLDISR0, BX MOV AX,ES MOV OLDISR2, AX ELSE CLI

23、 MOV AX, ES:INTNO*4 MOV OLDISR0,AX MOV AX,ES:INTNO*4+2 MOV OLDISR2, AX STI ENDIF ;SET NEW ISR IF USEINT PUSH DS MOV AX, SEG ISR MOV DS,AX MOV DX, OFFSET ISR MOV AL, INTNO MOV AH, 25H INT 21H POP DS ELSE CLI MOV WORD PTR ES:INTNO*4, OFFSET ISR MOV WORD PTR ES:INTNO*4+2,SEG ISR STI ENDIF ;WAIT HEREWAITHERE: CMP ISDONE,1 JNZ WAITHERE EXIT: ;RESTORE IF USEINT PU

温馨提示

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

最新文档

评论

0/150

提交评论