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

下载本文档

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

文档简介

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

2、运算结果存放在DS:0208H单元中。要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三. 实验过程和程序实验将”12345678H”和”FEDCBA98H”分别送入起始地址为DS:200H和DS:204H的两个单元中。还包含两个附加题,一是从 DS:0000H 开始的 5个 16 位带符号数分别记为x,y,z,v,w,E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540)/x,二是统计bx中1的个数四. 实验结果(包括必要的截图)将两个多字节数“003F1AE7H”和“006BE5

3、C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。直接寻址方式实现数据相加寄存器间接寻址实现数据相加附加题一:从 DS:0000H开始的 5 个16 位带符号数分别记为 x,y,z,v,w,用 E命令初始化为:540,1,-1,1080,0, 试求 w=(v-(x*y+z-540)/x 附加题二:完成 BX中1 的个数的统计。 五. 实验体会 通过本次实验,了解了使用debug的各种指令。同时在debug下进行编程,比较麻烦。由于是第一次编写汇编程序,还是需要多练习。实验二 汇编语言程序设计(顺序、循环)一. 实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机

4、上建立、汇编、连接、调试和运行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、计算表达式值(V(X*Y+Z-720)/X;

5、data segmentx dw 021chy dw 0001hz dw 0ffffhv dw 0438hw dw 0000hsum1 dw ?sum2 dw ?data endsassume cs:code,ds:data code segment start: mov ax,data mov ds,ax MOV AX,x IMUL Y ; x*y MOV CX, AX MOV BX, DX MOV AX, Z CWD ADD CX, AX ADC BX, DX ; x*y+z SUB CX, 540 ;? SBB BX, 0 ; x*y+z-540 MOV AX, V CWD SUB AX

6、, CX SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540)/x mov sum1,ax mov sum2,dx mov ax,4c00h int 21hcode ends end start2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)data segmentdb 7,49 dup(6)max db ?min db ? result db 0data endsassume cs:code,ds:datacode segment start: mov ax,data mov ds,axmov ax,0mov cx

7、,50mov di,0again: mov bx,0 mov bl,di add di,1 add ax,bx loop again mov bl,50 div bl mov result,al mov di,50 max2:sub di,1 mov cx,50 mov si,0 mov al,di max1: cmp al,si jb max2 add si,1 loop max1 mov max,al mov di,50 min2:sub di,1 mov cx,50 mov si,0 mov al,di min1: cmp al,si jnb min2 add si,1 loop min

8、1 mov min,al mov ax,4c00h int 21h code ends end start3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有asm子串。如果有,输出Yes;否则,输出No)。data segmentdata2 db 50,?,50 dup('$')string db 'yes$'string1 db 'no$'data endsassume cs:code,ds:datacode segment start: mov ax,data mov ds,axmov

9、ah,0ahmov dx,offset data2int 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov dx,offset data2+2mov ah,09hint 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov al,0hmov cx,47mov di,0again: mov al,di+2 cmp al,61h jnz next mov al,di+3 cmp al,73h jnz next mov al,di+4 cmp al,6dh jnz ne

10、xt jmp yesnext: add di,1 loop againmov dx,offset string1 mov ah,09h int 21hjmp endcodeyes:mov dx,offset string mov ah,09h int 21hendcode: mov ax,4c00h int 21h code ends end start四. 实验结果(包括必要的截图) 1、计算表达式值(V(X*Y+Z-720)/X;2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)0030地址为平均值的商 0032地址为最大值 0034地址为最小值3、从键盘读入一

11、个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有asm子串。如果有,输出Yes;否则,输出No)。五. 实验体会 通过此次试验,了解了符号扩展指令的使用。第二程序中,以及在输出时,输入的字符串末尾要注意加结束标志$,还有在输出字符串前要先输出个回车换行,否则回车后看不到输出结果。实验三 汇编语言子程序设计(分支、子程序)一. 实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。3、通过汇编语言了解高级语言的参数传递等知识。二. 实验内容1、BL中的只有一位为1。编写程序测试,并

12、输出提示信息“The X Bit is 1”,要求:地址表和转移表。2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。3. 实践CàAsm的转换过程。三. 实验过程和程序1、BL中的只有一位为1。编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。;bl have one 1 cout<<The X Bit is 1data segmentaddres dw fun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1string8 db 

13、9;The 8 Bit is 1$'string7 db 'The 7 Bit is 1$'string6 db 'The 6 Bit is 1$'string5 db 'The 5 Bit is 1$'string4 db 'The 4 Bit is 1$'string3 db 'The 3 Bit is 1$'string2 db 'The 2 Bit is 1$'string1 db 'The 1 Bit is 1$'data endsassume ds:data,cs

14、:codecode segmentstart: mov ax,data mov ds,ax mov bl,10h mov ax,0000h mov cx,8math: shl bl,1 jc right jmp nextright:mov dl,02h mul dl mov bp,ax jmp addresbpnext: inc ax loop math fun8:mov dx,offset string8 jmp cout fun7:mov dx,offset string7 jmp coutfun6:mov dx,offset string6 jmp coutfun5:mov dx,off

15、set string5 jmp coutfun4:mov dx,offset string4 jmp coutfun3:mov dx,offset string3 jmp coutfun2:mov dx,offset string2 jmp coutfun1:mov dx,offset string1 jmp cout cout:mov ah,09h int 21h mov ah,4ch int 21h code ends end start2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。 使用堆栈:data se

16、gmentx db 03hy db 0ffhz dw 0000hdata endsstack segmentdw 100 dup(?)stack endsassume ds:data,cs:code,ss:stack code segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov al,x push ax mov al,y push ax call program mov z,dx add sp,2 jmp quitprogram: push bp mov bp,spmov ax,bp+6mov dx,bp+4imul d

17、lmov dx,axmov ax,bp+6cbwadd dx,axmov ax,bp+4cbwsub dx,axpop bpretquit: mov ah,4ch int 21hcode endsend start二、使用寄存器传值data segmentx db 03hy db 0ffhz dw 0000hdata endsstack segmentdw 100 dup(?)stack endsassume ds:data,cs:code,ss:stack code segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov

18、al,x mov bl,y call program mov z,dx jmp quitprogram: mov cl,alimul blmov dx,axmov al,clcbw add dx,axmov al,blcbwsub dx,axretquit: mov ah,4ch int 21hcode endsend start3. 实践CàAsm的转换过程。#include<stdio.h>int main()_asm mov ax,0088h;_asm return 0;四. 实验结果(包括必要的截图)1、BL中的只有一位为1。编写程序测试,并输出提示信息“The

19、X Bit is 1”,要求:地址表和转移表。2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。 使用堆栈: dx及0002中为f(3,-1)=1二、使用寄存器传值 dx及0002中为f(3,-1)=13. 实践CàAsm的转换过程。TITLED:c+ documentshuibian.cpp.386Pinclude listing.incif Version gt 510.model FLATelse_TEXTSEGMENT PARA USE32 PUBLIC 'CODE'_TEXTEND

20、S_DATASEGMENT DWORD USE32 PUBLIC 'DATA'_DATAENDSCONSTSEGMENT DWORD USE32 PUBLIC 'CONST'CONSTENDS_BSSSEGMENT DWORD USE32 PUBLIC 'BSS'_BSSENDS$SYMBOLSSEGMENT BYTE USE32 'DEBSYM'$SYMBOLSENDS$TYPESSEGMENT BYTE USE32 'DEBTYP'$TYPESENDS_TLSSEGMENT DWORD USE32 PUBLIC

21、 'TLS'_TLSENDS;COMDAT _main_TEXTSEGMENT PARA USE32 PUBLIC 'CODE'_TEXTENDSFLATGROUP _DATA, CONST, _BSSASSUMECS: FLAT, DS: FLAT, SS: FLATendifPUBLIC_mainEXTRN_chkesp:NEAR;COMDAT _main_TEXTSEGMENT_mainPROC NEAR; COMDAT; 3 : pushebpmovebp, espsubesp, 64; 00000040Hpushebxpushesipushedilea

22、edi, DWORD PTR ebp-64movecx, 16; 00000010Hmoveax, -858993460; ccccccccHrep stosd; 4 : ; 5 : _asm mov ax,0088h;movax, 136; 00000088H; 6 : _asm ; 7 : ; 8 : ; 9 : ; 10 : ; 11 : ; 12 : ; 13 : return 0;xoreax, eax; 14 : popedipopesipopebxaddesp, 64; 00000040Hcmpebp, espcall_chkespmovesp, ebppopebpret0_ma

23、inENDP_TEXTENDSEND五. 实验体会通过本次试验使我了解了如何使用地址表和转移表,以及怎样通过堆栈(寄存器、内存)传送所有参数调用子程序。最后实践了CàAsm的转换过程,使我对C和汇编有了更多的认识。实验四 汇编语言高级编程专题一. 实验目的1、汇编语言宏程序设计;2、 掌握中断服务子程序的编写。3、 汇编语言与高级语言的混编。二. 实验内容1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。3、VC+中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte = 0x3

24、4,0x45,0x56,0x67,0xaf;三. 实验过程和程序1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,minmin macro x,y,z mov ax,x cmp ax,y jl next ; jc 看的是cf 是当成无符号数比较的? mov ax,y next: cmp ax,z jl final mov ax,z final: nop endm code segment assume cs:code start: min 4 -6 3 mov ax,4c00h int 21h code ends end start2、挂接1CH中断,正计时60秒后退出。要求屏幕

25、显示0-59的秒数。;addres equ 1chdata segmentpian dw ?duan dw ?string db 48data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axbegin: mov ax,351ch int 21h mov pian,bx mov duan,es push ds mov dx,offset myproc mov ax,seg myproc mov ds,ax mov ax,251ch int 21h pop ds mov cx,0 mov bx,0next: cmp

26、 cx,1080; 60*18 jnz next mov dx,pian mov ax,duan mov ds,ax mov ax,251ch int 21hmov ax,4c00hint 21hmyproc proc stiinc cxinc bxcmp bx,18jz print jmp overprint: mov bl,string cmp bl,58jc p0mov al,blsub al,48mov ah,00hmov dl,10div dlmov bl,ahmov dl,al add dl,48mov ah,02hint 21hmov dl,bladd dl,48mov ah,0

27、2hint 21hjmp p1p0: mov dl,string mov ah,02h int 21h p1:inc stringmov ah,02h mov dl,0dh int 21hmov bx,0 ; mov dl,0dh;int 21h over:iret;msg: ;string db 'one second $' myproc endp code endsend start-按a键后,保留旧时间,重新另起一行开始计时;-使用21H 的0BH功能检查按键是否按下data segmentpian dw ?duan dw ?string db 48data endsco

28、de segmentassume cs:code,ds:datastart: mov ax,datamov ds,ax mov ax,351ch int 21h mov pian,bx mov duan,es push ds mov dx,offset myproc mov ax,seg myproc mov ds,ax mov ax,251ch int 21h pop dsbegin: mov cx,0 mov bx,0next: cmp cx,1080; 60*18 jnz next mov dx,pian mov ax,duan mov ds,ax mov ax,251ch int 21

29、hmov ax,4c00hint 21hmyproc proc sti push ax push bx push cx push si mov ah,0bh int 21h sub al,00h jz ok mov ah,07h int 21h cmp al,61h jz crazy jmp okcrazy: pop si pop cx pop bx pop ax mov ah,0ch;清空输入缓存区 int 21h mov ah,02h mov dl,0ah int 21h mov dl,0dh int 21h; jmp beginmov cx,0mov bx,0mov string,48;string 清零重新计数jmp over ok: pop si pop cx pop bx pop ax inc cxinc bxcmp bx,18jz print jmp overprint: mov bl,string cmp bl,58jc p0mov al,blsub al,48mov ah,00hmov dl,10div dlmov bl,ahmov dl,al add

温馨提示

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

评论

0/150

提交评论