合肥工业大学汇编程序设计实验报告完整代码.docx
- 文档编号:17389854
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:36
- 大小:875.19KB
合肥工业大学汇编程序设计实验报告完整代码.docx
《合肥工业大学汇编程序设计实验报告完整代码.docx》由会员分享,可在线阅读,更多相关《合肥工业大学汇编程序设计实验报告完整代码.docx(36页珍藏版)》请在冰豆网上搜索。
合肥工业大学汇编程序设计实验报告完整代码
合肥工业大学
计算机与信息学院
实验报告
课程:
汇编语言程序设计
专业班级:
信息安全13-1
学号:
**********
*****
实验一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位带符号数。
试编写汇编语言程序完成以下功能:
①计算表达式值(V–(X*Y+Z-720))/X;
②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
2、求一个班50名学生成绩的平均值(附加题:
最大值和最小值,并将结果显示出来)
3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:
查找中间是否有‘asm’子串。
如果有,输出‘Yes’;否则,输出‘No’)。
三.实验过程和程序
1、计算表达式值(V–(X*Y+Z-720))/X;
datasegment
xdw021ch
ydw0001h
zdw0ffffh
vdw0438h
wdw0000h
sum1dw?
sum2dw?
dataends
assumecs:
code,ds:
data
codesegment
start:
movax,data
movds,ax
MOVAX,x
IMULY;x*y
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDCX,AX
ADCBX,DX;x*y+z
SUBCX,540;?
SBBBX,0;x*y+z-540
MOVAX,V
CWD
SUBAX,CX
SBBDX,BX;v-(x*y+z-540)
IDIVX;(v-(x*y+z-540))/x
movsum1,ax
movsum2,dx
movax,4c00h
int21h
codeends
endstart
2、求一个班50名学生成绩的平均值(附加题:
最大值和最小值,并将结果显示出来)
datasegment
db7,49dup(6)
maxdb?
mindb?
resultdb0
dataends
assumecs:
code,ds:
data
codesegment
start:
movax,data
movds,ax
movax,0
movcx,50
movdi,0
again:
movbx,0
movbl,[di]
adddi,1
addax,bx
loopagain
movbl,50
divbl
movresult,al
movdi,50
max2:
subdi,1
movcx,50
movsi,0
moval,[di]
max1:
cmpal,[si]
jbmax2
addsi,1
loopmax1
movmax,al
movdi,50
min2:
subdi,1
movcx,50
movsi,0
moval,[di]
min1:
cmpal,[si]
jnbmin2
addsi,1
loopmin1
movmin,al
movax,4c00h
int21h
codeends
endstart
3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:
查找中间是否有‘asm’子串。
如果有,输出‘Yes’;否则,输出‘No’)。
datasegment
data2db50,?
50dup('$')
stringdb'yes$'
string1db'no$'
dataends
assumecs:
code,ds:
data
codesegment
start:
movax,data
movds,ax
movah,0ah
movdx,offsetdata2
int21h
movah,2h
movdl,0ah
int21h
movah,2h
movdl,0dh
int21h
movdx,offsetdata2+2
movah,09h
int21h
movah,2h
movdl,0ah
int21h
movah,2h
movdl,0dh
int21h
moval,0h
movcx,47
movdi,0
again:
moval,[di+2]
cmpal,61h
jnznext
moval,[di+3]
cmpal,73h
jnznext
moval,[di+4]
cmpal,6dh
jnznext
jmpyes
next:
adddi,1
loopagain
movdx,offsetstring1
movah,09h
int21h
jmpendcode
yes:
movdx,offsetstring
movah,09h
int21h
endcode:
movax,4c00h
int21h
codeends
endstart
四.实验结果(包括必要的截图)
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。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
3.实践C→Asm的转换过程。
三.实验过程和程序
1、BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
;blhaveone1cout< datasegment addresdwfun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1 string8db'The8Bitis1$' string7db'The7Bitis1$' string6db'The6Bitis1$' string5db'The5Bitis1$' string4db'The4Bitis1$' string3db'The3Bitis1$' string2db'The2Bitis1$' string1db'The1Bitis1$' dataends assumeds: data,cs: code codesegment start: movax,data movds,ax movbl,10h movax,0000h movcx,8 math: shlbl,1 jcright jmpnext right: movdl,02h muldl movbp,ax jmpaddres[bp] next: incax loopmath fun8: movdx,offsetstring8 jmpcout fun7: movdx,offsetstring7 jmpcout fun6: movdx,offsetstring6 jmpcout fun5: movdx,offsetstring5 jmpcout fun4: movdx,offsetstring4 jmpcout fun3: movdx,offsetstring3 jmpcout fun2: movdx,offsetstring2 jmpcout fun1: movdx,offsetstring1 jmpcout cout: movah,09h int21h movah,4ch int21h codeends endstart 2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。 要求通过堆栈(寄存器、内存)传送所有参数。 使用堆栈: datasegment xdb03h ydb0ffh zdw0000h dataends stacksegment dw100dup(? ) stackends assumeds: data,cs: code,ss: stack codesegment start: movax,data movds,ax movax,stack movss,ax moval,x pushax moval,y pushax callprogram movz,dx addsp,2 jmpquit program: pushbp movbp,sp movax,[bp+6] movdx,[bp+4] imuldl movdx,ax movax,[bp+6] cbw adddx,ax movax,[bp+4] cbw subdx,ax popbp ret quit: movah,4ch int21h codeends endstart 二、使用寄存器传值 datasegment xdb03h ydb0ffh zdw0000h dataends stacksegment dw100dup(? ) stackends assumeds: data,cs: code,ss: stack codesegment start: movax,data movds,ax movax,stack movss,ax moval,x movbl,y callprogram movz,dx jmpquit program: movcl,al imulbl movdx,ax moval,cl cbw adddx,ax moval,bl cbw subdx,ax ret quit: movah,4ch int21h codeends endstart 3.实践C→Asm的转换过程。 #include intmain() { _asmmovax,0088h; _asm { } return0; } 四.实验结果(包括必要的截图) 1、BL中的只有一位为1。 编写程序测试,并输出提示信息“TheXBitis1”,要求: 地址表和转移表。 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的转换过程。 TITLED: \c++documents\huibian.cpp .386P includelisting.inc if@Versiongt510 .modelFLAT else _TEXTSEGMENTPARAUSE32PUBLIC'CODE' _TEXTENDS _DATASEGMENTDWORDUSE32PUBLIC'DATA' _DATAENDS CONSTSEGMENTDWORDUSE32PUBLIC'CONST' CONSTENDS _BSSSEGMENTDWORDUSE32PUBLIC'BSS' _BSSENDS $$SYMBOLSSEGMENTBYTEUSE32'DEBSYM' $$SYMBOLSENDS $$TYPESSEGMENTBYTEUSE32'DEBTYP' $$TYPESENDS _TLSSEGMENTDWORDUSE32PUBLIC'TLS' _TLSENDS ;COMDAT_main _TEXTSEGMENTPARAUSE32PUBLIC'CODE' _TEXTENDS FLATGROUP_DATA,CONST,_BSS ASSUMECS: FLAT,DS: FLAT,SS: FLAT endif PUBLIC_main EXTRN__chkesp: NEAR ;COMDAT_main _TEXTSEGMENT _mainPROCNEAR;COMDAT ;3: { pushebp movebp,esp subesp,64;00000040H pushebx pushesi pushedi leaedi,DWORDPTR[ebp-64] movecx,16;00000010H moveax,-858993460;ccccccccH repstosd ;4: ;5: _asmmovax,0088h; movax,136;00000088H ;6: _asm ;7: { ;8: ;9: ;10: ;11: } ;12: ;13: return0; xoreax,eax ;14: } popedi popesi popebx addesp,64;00000040H cmpebp,esp call__chkesp movesp,ebp popebp ret0 _mainENDP _TEXTENDS END 五.实验体会 通过本次试验使我了解了如何使用地址表和转移表,以及怎样通过堆栈(寄存器、内存)传送所有参数调用子程序。 最后实践了C→Asm的转换过程,使我对C和汇编有了更多的认识。 实验四汇编语言高级编程专题 一.实验目的 1、汇编语言宏程序设计; 2、掌握中断服务子程序的编写。 3、汇编语言与高级语言的混编。 二.实验内容 1、编写一个宏,求三个数的最小数,原型为: MIN3x,y,z,min 2、挂接1CH中断,正计时60秒后退出。 要求屏幕显示0-59的秒数。 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 chardbyte[]={0x34,0x45,0x56,0x67,0xaf}; 三.实验过程和程序 1、编写一个宏,求三个数的最小数,原型为: MIN3x,y,z,min minmacrox,y,z movax,x cmpax,y jlnext;jc看的是cf是当成无符号数比较的? movax,y next: cmpax,z jlfinal movax,z final: nop endm codesegment assumecs: code start: min4-63 movax,4c00h int21h codeends endstart 2、挂接1CH中断,正计时60秒后退出。 要求屏幕显示0-59的秒数。 ;addresequ1ch datasegment piandw? duandw? stringdb48 dataends codesegment assumecs: code,ds: data start: movax,data movds,ax begin: movax,351ch int21h movpian,bx movduan,es pushds movdx,offsetmyproc movax,segmyproc movds,ax movax,251ch int21h popds movcx,0 movbx,0 next: cmpcx,1080;60*18 jnznext movdx,pian movax,duan movds,ax movax,251ch int21h movax,4c00h int21h myprocproc sti inccx incbx cmpbx,18 jzprint jmpover print: movbl,string cmpbl,58 jcp0 moval,bl subal,48 movah,00h movdl,10 divdl movbl,ah movdl,al adddl,48 movah,02h int21h movdl,bl adddl,48 movah,02h int21h jmpp1 p0: movdl,string movah,02h int21h p1: incstring movah,02h movdl,0dh int21h movbx,0 ;movdl,0dh ;int21h over: iret ;msg: ;stringdb'onesecond$' myprocendp codeends endstart --按a键后,保留旧时间,重新另起一行开始计时 ;----使用21H的0BH功能检查按键是否按下 datasegment piandw? duandw? stringdb48 dataends codesegment assumecs: code,ds: data start: movax,data movds,ax movax,351ch int21h movpian,bx movduan,es pushds movdx,offsetmyproc movax,segmyproc movds,ax movax,251ch int21h popds begin: movcx,0 movbx,0 next: cmpcx,1080;60*18 jnznext movdx,pian movax,duan movds,ax movax,251ch int21h movax,4c00h int21h myprocproc sti pushax pushbx pushcx pushsi movah,0bh int21h subal,00h jzok movah,07h int21h cmpal,61h jzcrazy jmpok crazy: pop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 合肥 工业大学 汇编程序 设计 实验 报告 完整 代码