首页 合肥工业大学汇编程序设计实验报告完整代码

合肥工业大学汇编程序设计实验报告完整代码

举报
开通vip

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

合肥工业大学汇编程序设计实验报告完整代码
合肥工业大学汇编程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 完整代码 课 程:汇编语言程序设计 专业班级:信息安全13-1 学 号:2013211869 姓 名:马骏 实验一 Debug程序的使用 一. 实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二. 实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在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”和“006BE5C4H”分别送入起始地址为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机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。 二. 实验内容 1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能: ?计算 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式值(V–(X*Y+Z-720))/X; ?将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。 2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来) 3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。 三. 实验过程和程序 1、计算表达式值(V–(X*Y+Z-720))/X; data segment x dw 021ch y dw 0001h z dw 0ffffh v dw 0438h w dw 0000h sum1 dw ? sum2 dw ? data ends assume 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, 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 21h code ends end start 2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示 出来) data segment db 7,49 dup(6) max db ? min db ? result db 0 data ends assume cs:code,ds:data code segment start: mov ax,data mov ds,ax mov ax,0 mov cx,50 mov di,0 again: 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 min1 mov min,al mov ax,4c00h int 21h code ends end start 3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印 该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则, 输出‘No’)。 data segment data2 db 50,?,50 dup('$') string db 'yes$' string1 db 'no$' data ends assume cs:code,ds:data code segment start: mov ax,data mov ds,ax mov ah,0ah mov dx,offset data2 int 21h mov ah,2h mov dl,0ah int 21h mov ah,2h mov dl,0dh int 21h mov dx,offset data2+2 mov ah,09h int 21h mov ah,2h mov dl,0ah int 21h mov ah,2h mov dl,0dh int 21h mov al,0h mov cx,47 mov di,0 again: 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 next jmp yes next: add di,1 loop again mov dx,offset string1 mov ah,09h int 21h jmp endcode yes: mov dx,offset string mov ah,09h int 21h endcode: mov ax,4c00h int 21h code ends end start 四. 实验结果(包括必要的截图) 1、计算表达式值(V–(X*Y+Z-720))/X; 2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来) 0030地址为平均值的商 0032地址为最大值 0034地址为最小值 3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。 五. 实验体会 通过此次试验,了解了符号扩展指令的使用。第二程序中,以及在输出 时,输入的字符串末尾要注意加结束标志’$’,还有在输出字符串前要先输出个 回车换行,否则回车后看不到输出结果。 实验三 汇编语言子程序设计(分支、子程序) 一. 实验目的 1、掌握分支和子程序结构和设计方法; 2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。 3、通过汇编语言了解高级语言的参数传递等知识。 二. 实验内容 1、BL中的只有一位为1。编写程序测试,并输出提示信息“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< int main() { _asm mov ax,0088h; _asm { } return 0; } 四. 实验结果(包括必要的截图) 1、BL中的只有一位为1。编写程序测试,并输出提示信息“The 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)=1 3. 实践C,Asm的转换过程。 TITLE D:\c++ documents\huibian.cpp .386P include listing.inc if @Version gt 510 .model FLAT else _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT DWORD USE32 PUBLIC 'DATA' _DATA ENDS CONST SEGMENT DWORD USE32 PUBLIC 'CONST' CONST ENDS _BSS SEGMENT DWORD USE32 PUBLIC 'BSS' _BSS ENDS $$SYMBOLS SEGMENT BYTE USE32 'DEBSYM' $$SYMBOLS ENDS $$TYPES SEGMENT BYTE USE32 'DEBTYP' $$TYPES ENDS _TLS SEGMENT DWORD USE32 PUBLIC 'TLS' _TLS ENDS ; COMDAT _main _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS FLAT GROUP _DATA, CONST, _BSS ASSUME CS: FLAT, DS: FLAT, SS: FLAT endif PUBLIC _main EXTRN __chkesp:NEAR ; COMDAT _main _TEXT SEGMENT _main PROC NEAR ; COMDAT ; 3 : { push ebp mov ebp, esp sub esp, 64 ; 00000040H push ebx push esi push edi lea edi, DWORD PTR [ebp-64] mov ecx, 16 ; 00000010H mov eax, -858993460 ; ccccccccH rep stosd ; 4 : ; 5 : _asm mov ax,0088h; mov ax, 136 ; 00000088H ; 6 : _asm ; 7 : { ; 8 : ; 9 : ; 10 : ; 11 : } ; 12 : ; 13 : return 0; xor eax, eax ; 14 : } pop edi pop esi pop ebx add esp, 64 ; 00000040H cmpebp, esp call __chkesp mov esp, ebp pop ebp ret 0 _main ENDP _TEXT ENDS END 五. 实验体会 通过本次试验使我了解了如何使用地址表和转移表,以及怎样通过堆栈(寄存器、内存)传送所有参数调用子程序。最后实践了C,Asm的转换过程,使我对C和汇编有了更多的认识。 实验四 汇编语言高级编程专题 一. 实验目的 1、汇编语言宏程序设计; 2、 掌握中断服务子程序的编写。 3、 汇编语言与高级语言的混编。 二. 实验内容 1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte[] = {0x34,0x45,0x56,0x67,0xaf}; 三. 实验过程和程序 1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min min 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 start 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 ;addres equ 1ch data segment pian dw ? duan dw ? string db 48 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax begin: 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,0 next: cmp cx,1080; 60*18 jnz next mov dx,pian mov ax,duan mov ds,ax mov ax,251ch int 21h mov ax,4c00h int 21h myproc proc sti inc cx inc bx cmp bx,18 jz print jmp over print: mov bl,string cmp bl,58 jc p0 mov al,bl sub al,48 mov ah,00h mov dl,10 div dl mov bl,ah mov dl,al add dl,48 mov ah,02h int 21h mov dl,bl add dl,48 mov ah,02h int 21h jmp p1 p0: mov dl,string mov ah,02h int 21h p1: inc string mov ah,02h mov dl,0dh int 21h mov bx,0 ; mov dl,0dh ;int 21h over: iret ;msg: ;string db 'one second $' myproc endp code ends end start --按a键后,保留旧时间,重新另起一行开始计时 ;----使用21H 的0BH功能检查按键是否按下 data segment pian dw ? duan dw ? string db 48 data ends code segment assume cs:code,ds:data start: mov ax,data mov 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 ds begin: mov cx,0 mov bx,0 next: cmp cx,1080; 60*18 jnz next mov dx,pian mov ax,duan mov ds,ax mov ax,251ch int 21h mov ax,4c00h int 21h myproc 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 ok crazy: 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 begin mov cx,0 mov bx,0 mov string,48;string 清零重新计数 jmp over ok: pop si pop cx pop bx pop ax inc cx inc bx cmp bx,18 jz print jmp over print: mov bl,string cmp bl,58 jc p0 mov al,bl sub al,48 mov ah,00h mov dl,10 div dl mov bl,ah mov dl,al add dl,48 mov ah,02h int 21h mov dl,bl add dl,48 mov ah,02h int 21h jmp p1 p0: mov dl,string mov ah,02h int 21h p1: inc string mov ah,02h mov dl,0dh int 21h mov bx,0 ; mov dl,0dh ;int 21h over: iret ;msg: ;string db 'one second $' myproc endp code ends end start 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte[] = {0x34,0x45,0x56,0x67,0xaf}; #include using namespace std; char shu[]={0x34, 0x45, 0x56, 0x67, 0xaf }; int main(){ for (int i = 0; i < 5; i++) cout<<(int)shu[i]<<" "; cout << endl; _asm{mov esi,0 mov ecx,5 again: mov dl, shu[esi] mov eax,0 next1: ror dl,1 inc eax cmp eax,4 jne next1 mov shu[esi],dl add esi,1 loop again } for ( i = 0; i < 5; i++)cout << (int)shu[i] << " "; cout << endl; return 0; } 四. 实验结果(包括必要的截图) 1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min -59的秒数。 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0 --按a键后,保留旧时间,重新另起一行开始计时 ;----使用21H 的0BH功能检查按键是否按下 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte[] = {0x34,0x45,0x56,0x67,0xaf}; 五. 实验体会 在时间计数试验中,按a键如果使用1号功能则会输出一个a。但使用7号功能 则是无回显过滤的字符输入,就不会再有a输出啦
本文档为【合肥工业大学汇编程序设计实验报告完整代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:367KB
软件:Word
页数:34
分类:
上传时间:2018-05-18
浏览量:119