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

下载本文档

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

文档简介

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

2、将DS:0200H单元和 DS:0204H 单元中的数据相加,并将运算结果存放在 DS:0208H 单元中。要求:本次实验的内容均在 DEBUG 下完成,实现数据的装入、修改、显示;汇 编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三 . 实验过程和程序实验内容一:e ds:0200 E7 1A 3F 00e ds:0204 C4 E5 6B 00实验内容二:(1)直接寻址方式MOVAX,0200MOVBX,0202ADDAX,0204ADCBX,0206MOV0208,AXMOV020A,BX(2)寄存器间接寻址方式MOVSI,0200HMOVDI,0204HMOVBX,0208H

3、MOVAX,SIMOVDX,SI+2ADDAX,DIADCDX,DI+2MOV BX,AXMOV BX+2,DX四. 实验结果(包括必要的截图)实验内容一:输入数据:显示数据:实验内容二:(1)直接寻址方式程序段编辑:反汇编:运行:结果在 DS:0208 单元中 为 00AB00ABH2)寄存器间接寻址方式程序段编辑:反汇编:运行:结果高字存放在 dx 中,低字存放在 ax 中(结果为 00AB00ABh )五. 实验体会通过本实验,实践 debug 程序中的命令,并在 debug 下调试运行汇编语言源 程序。在实践过程中,解决如何把数据录入存储单元、 debug 命令如何使用 等问题后,知道

4、存数据例如 1234进存储单元时 要 34 12 存,还有掌握了寄 存器的寻址方式。实验二 汇编语言程序设计 (顺序、循环 ). 实验目的二 . 实验内容1、X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号 数。试编写汇编语言程序完成以下功能:计算表达式值( V( X*Y+Z-720 )/X; 将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元。2、求一个班 50 名学生成绩的平均值(附加题:最大值和最小值 ,并将结果显示 出来)3、从键盘读入一个字符串,以 Enter 结束,字符串不超过 50 个字符,并打印 该字符串 (附加题:查找中间是否

5、有 asm子串。如果有,输出 Yes;否则, 输出 No)。三 . 实验过程和程序(注:附加题没有做)实验内容一:X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号数。 试编写汇编语言程序完成以下功能:计算表达式值( V( X*Y+Z-720 ) /X ;将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元。 Data segmentx dw ?y dw ?z dw ?v dw ?sum1 dw ?sum2 dw ?Data endsCode segmentassume cs:code,ds:datastart:mov ax,data mov ds

6、,ax mov ax,ximul ymov cx,axmov bx,dxmov ax,z cwd add cx,ax adc bx,dx sub cx,720 sbb bx,0 mov ax,v cwd sub ax,cx sbb dx,bx idiv x mov sum1,ax mov sum2,dx mov ah,4chint 21hCode endsend start实验内容二:求一个班 50 名学生成绩的平均值(为了方便,只设置了 5 个 学生数据)data segmentgrade dw 90,80,80,70,60;平均数 76data ends code segmentassum

7、e cs:code,ds:datastart:mov ax,datamov ds,axxor ax,axmov cx,5mov bx,offset grade again: add ax,bxadd bx,2loop againmov cx,5 cwd idiv cx mov ah,4ch int 21hcode endsend start实验内容三: 从键盘读入一个字符串, 以 Enter 结束,字符串不超过 50 个字符, 并打印该字符串data segment buffer db 50 db ? db 50 dup($)cr db 0ah,0dh,$data endscodes segm

8、entassume cs:codes,ds:datastart:mov ax,datamov ds,axinput:mov ah,10lea dx,bufferint 21hlea dx,crmov ah,9int 21houtput:lea dx,buffer+2mov ah,9int 21hmov ah,4chint 21hcodes endsend start四. 实验结果(包括必要的截图)实验内容一:设 x=156, y=10, z=220,v=2000,则 sum1=0006h, sum2=0004h在 ax 中看 sum1 ,在 dx 中看 sum2实验内容二:预先设置的数据求得平

9、均数为 76,在 ax 中查看,即 ax=004Ch实验内容三:五. 实验体会 通过本实验,将课本上学到的算术运算类指 令、变量定义伪指令、存储单元、 DOS 0AH 号功能(字符串输入)和 DOS 09H 功能(字 符串输出)等在实验中实现。在实现过程中, 解决遇到的问题(符号扩展、定义的数组存储 空间地址、字符串如何输入输出等)后,对上 述知识有了更深的了解,并掌握实现它。实验三 汇编语言子程序设计 (分支、子程序 ). 实验内容1、BL 中的只有一位为 1。编写程序测试,并输出提示信息“ The X Bit is 1 要求:地址表和转移表。2. 编写一个子程序计算 z=f(x,y)=x*

10、y+x-y ( x,y,z 有符号数内存数)。要求通过 堆栈 (寄存器、内存 )传送所有参数。3. 实践 C Asm 的转换过程。三 . 实验过程和程序The X Bit实验内容一: BL 中的只有一位为 1。编写程序测试, 并输出提示信息is 1( 1)转移表; 转移表 ,bl 左到右 1-8 位DATAS SEGMENTstr1 db the 1 bit is 1,0dh,0ah,$ str2 db the 2 bit is 1,0dh,0ah,$ str3 db the 3 bit is 1,0dh,0ah,$ str4 db the 4 bit is 1,0dh,0ah,$ str5

11、db the 5 bit is 1,0dh,0ah,$ str6 db the 6 bit is 1,0dh,0ah,$ str7 db the 7 bit is 1,0dh,0ah,$ str8 db the 8 bit is 1,0dh,0ah,$ DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AX mov bl,00010000b mov cx,8mov si,0again:shl bl,1 jc next add si,3 loop againnext:add si,offset jmp

12、table jmp sijmptable:jmp near ptr l1jmp near ptr l2jmp near ptr l3jmp near ptr l4jmp near ptr l5jmp near ptr l6jmp near ptr l7jmp near ptr l8l1:lea dx,str1jmp outputl2:lea dx,str2jmp outputl3:lea dx,str3jmp outputl4:lea dx,str4jmp outputl5:lea dx,str5jmp outputl6:lea dx,str6jmp outputl7:lea dx,str7j

13、mp outputl8:lea dx,str8output:mov ah,9int 21hMOV AH,4CHINT 21HCODES ENDSEND START(2)地址表;地址表, bl 左到右依次是第 1-8 位DATAS SEGMENTstr1 db the 1 bit is 1,0dh,0ah,$str2 db the 2 bit is 1,0dh,0ah,$str3 db the 3 bit is 1,0dh,0ah,$str4 db the 4 bit is 1,0dh,0ah,$str5 db the 5 bit is 1,0dh,0ah,$str6 db the 6 bit

14、is 1,0dh,0ah,$str7 db the 7 bit is 1,0dh,0ah,$str8 db the 8 bit is 1,0dh,0ah,$addrtable dw show1,show2,show3,show4,show5,show6,show7,show8DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmov bl,00001000bmov cx,8mov si,0 again:shl bl,1 jc next add si,2 loop again next:jmp add

15、rtablesishow1:lea dx,str1 jmp output show2:lea dx,str2 jmp output show3:lea dx,str3 jmp output show4:lea dx,str4 jmp output show5:lea dx,str5 jmp output show6:lea dx,str6 jmp output show7:lea dx,str7 jmp output show8:lea dx,str8 jmp outputoutput:mov ah,9int 21hMOV AH,4CHINT 21H CODES ENDSEND START实验

16、内容二:编写一个子程序计算 z=f(x,y)=x*y+x-y (x,y,z 有符号数内存数) (1)堆栈传递参数;z=x*y+x-y,x 、y、z 为有符号数,堆栈传递 DATAS SEGMENTx dw 5y dw 2 z dw ? DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXsub sp,2push ypush xcall calpop zmov bx,zMOV AH,4CHINT 21H cal proc push bp mov bp,sp push ax push bx mov ax

17、,bp+4 mov bx,bp+6 imul bx add ax,bp+4adc dx,0 sub ax,bp+6 sbb dx,0 mov bp+8,ax pop bx pop ax pop bp ret 4cal endp CODES ENDSEND START (2)寄存器传递参数 ;z=x*y+x-y,x 、y、z 为有符号数,寄存器传递 DATAS SEGMENTx dw 5 y dw 2 z dw ?DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATAS MOV DS,AX mov ax,x mov b

18、x,y call cal mov z,axMOV AH,4CH INT 21H cal proc mov cx,ax imul bx add ax,cx adc dx,0 sub ax,bx sbb dx,0ret cal endp CODES ENDSEND START(3)内存传递参数 ;z=x*y+x-y,x 、y、z 为有符号数,内存传递 DATAS SEGMENT x dw 5 y dw 2 z dw ? DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AX call calMOV A

19、H,4CH INT 21H cal proc mov ax,x imul y add ax,x adc dx,0 sub ax,y sbb dx,0 mov z,ax ret cal endp CODES ENDSEND START 实验内容三:实践 CASM 的转换过程 _TEXT SEGMENT _c$ = -32 ; size = 2 _b$ = -20; size = 2_a$ = -8; size = 2main PROC; COMDAT; 4 : void main()push ebpmov ebp, espsub esp, 228; 000000e4Hpush ebxpush e

20、sipush edilea edi, DWORD PTR ebp-228mov ecx, 57mov eax, -858993460; 00000039H; ccccccccHrep stosd; 5 :; 6 : short a,b,c; 7 : a=1;mov eax, 1mov WORD PTR _a$ebp, ax ; 8 : b=a+1;movsx eax, WORD PTR _a$ebpadd eax, 1mov WORD PTR _b$ebp, ax; 9 : c=a+b;movsx eax, WORD PTR _a$ebp movsx ecx, WORD PTR _b$ebp

21、add eax, ecxmov WORD PTR _c$ebp, ax; 10 :; 11 :; 12 : xor eax, eaxpop edipop esipop ebxmov esp, ebppop ebpret 0main ENDPTEXT ENDS四. 实验结果(包括必要的截图) 实验内容一:( 1) 转移表:设 bl=00010000b2)地址表:设 bl=00001000b实验内容二:设 x=5,y=2,则 z=13(000D),结 果在 ax( 1) 堆栈传递参数(结果在 bx 中查看)( 2)寄存器传递参数(结果在 ax 中查看)3)内存传递参数(结果在 ax 中查看)五、实

22、验体会通过本实验, 让我更加深入了解地址表和转移 表、子程序和从 C 输出汇编文件等知识,通过 实现地址表与转移表加深了对汇编寻址方式的 了解;实现子程序,掌握主程序如何调用子程序, 及子程序与主程序之间的参数传递方式;用 VS 实现 C-ASM 后,对 C 或 C+ 有了新的认识。实验四 汇编语言高级编程专题实验目的务 服 断 中计程. 实验内容1、编写一个宏,求三个数的最小数,原型为: MIN3 x,y,z,min2、挂接 1CH 中断,正计时 60秒后退出。要求屏幕显示 0-59 的秒数3、VC+中编写内联汇编,将字节数组的每个元素高低四位互换。char dbyte = 0x34,0x4

23、5,0x56,0x67,0xaf;三 . 实验过程和程序1. 编写一个宏,求三个数的最小数,原型为: MIN3 x,y,z,minmin3 macro x,y,z,min mov ax,x cmp ax,y jbe next mov ax,y cmp ax,z jbe done next: cmp ax,z jbe done done: mov min,ax endmDATAS SEGMENTx dw 2y dw 4z dw 3min dw ?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmi

24、n3 x,y,z,minMOV AH,4CHINT 21HCODES ENDS0-59 的秒数。END START2、挂接 1CH 中断,正计时 60 秒后退出。要求屏幕显示INTNO EQU 1CHDATA SEGMENTOLDISR DW ?,?TIMER DB 100COUNTER DW 0ISDONE DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,0MOV ES,AXxor cx,cx;PROTECTMOV AX, ES:INTNO*4MOV OLDISR0,AXMOV A

25、X,ES:INTNO*4+2MOV OLDISR2, AX;SET NEW ISRMOV WORD PTR ES:INTNO*4, OFFSET ISRMOV WORD PTR ES:INTNO*4+2,SEG ISR ;WAIT HEREWAITHERE:CMP ISDONE,1JNZ WAITHEREEXIT:;RESTOREMOV AX,OLDISR0MOV ES:INTNO*4,AXMOV AX,OLDISR2MOV ES:INTNO*4+2,AXMOV AX,4C00HINT 21HISR PROC FARPUSH DXPUSH AXMOV AX,DATAMOV DS,AXSTI; 便于中断嵌套INC TIMER; 判断是否输入 amov ah,0bhint 21hor al,al jz nextMOV AH,8; 不显示输入的字符INT 21HCMP AL,aJNE nextMOV AH,2; 换行MOV DL,10 INT 21H;MOV COUNTER,

温馨提示

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

评论

0/150

提交评论