汇编语言实验报告 2914讲解.docx
- 文档编号:11397559
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:31
- 大小:289.12KB
汇编语言实验报告 2914讲解.docx
《汇编语言实验报告 2914讲解.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告 2914讲解.docx(31页珍藏版)》请在冰点文库上搜索。
汇编语言实验报告2914讲解
合肥工业大学
计算机与信息学院
实验报告
课程:
汇编语言程序设计
专业班级:
信息安全11-1
学号:
20112914
姓名:
王佳淼
实验一Debug程序的使用
一.实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容
1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序
1、启动DOS操作系统
2、运行DEBUG.COM程序(若当前盘为C)
C:
>DEBUG↙
–;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)
3、用“A”命令编辑和汇编源程序
–A↙
186E:
0100MOVAX,[0200]↙
186E:
0103MOVBX,[0202]↙
186E:
0107ADDAX,[0204]↙
186E:
010BADCBX,[0206]↙
186E:
010FMOV[0208],AX↙
186E:
0112MOV[020A],BX↙
186E:
0116↙
4、用“U”命令反汇编验证源程序
–UCS:
0100↙
186E:
0100A10002MOVAX,[0200]
186E:
01038B1E0202MOVBX,[0202]
186E:
010703060402ADDAX,[0204]
186E:
010B131E0602ADCBX,[0206]
186E:
010FA30802MOV[0208],AX
186E:
0112891E0A02MOV[020A],BX
186E:
0116
–
注意:
●检查源程序是否有错误,若有则返回到第3步用“A地址”命令进行修改,直到程序无错误。
●DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。
●在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。
●在DEBUG下,大小写不敏感。
5、程序未执行前,用“R”命令观察,相关寄存器的内容。
–R↙
如:
(AX)=0000,(BX)=0000,(SI)=0000,
(DI)=0000,(CS)=1376,(IP)=0100。
6、在程序未执行前,用“D”命令观察DS:
0200H,DS:
0204H、DS:
0208H单元的内容
–D20020B↙
7、用“G”命令运行源程序
–G=1000116↙
8、再用“D”命令观察DS:
0200H~DS:
020BH字节单元中的内容
–D20020B↙
9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。
注意:
●D命令显示内存数据,注意观察多字节数据在内存中的存放方式。
●指令执行的时候,IP寄存器随着变化,注意观察。
四.实验结果(包括必要的截图)
利用寄存器的方法:
五.实验体会
能使用debug在dos界面下编译代码。
能熟练使用各种debug命令,例如-u、-g、-d、-r等命令。
熟练掌握8086/8088的寻址方式及多字节数据的处理方法
实验二汇编语言程序设计(顺序、循环)
一.实验目的
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、计算表达式并存入内存
Stacksegment
dw512dup(?
)
Stackends
Datasegment
xdw100
ydw100
zdw100
vdw100
sum1dw?
sum2dw?
Dataends
Codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movax,x;在代码段填入指令序列
movbx,y
imulbx
addax,z
adcdx,0
subax,720
sbbdx,0
movcx,dx
movbx,ax
movax,v
cwd
subax,bx
sbbdx,cx
movbx,x
idivbx
movsum1,ax
movsum2,dx
movah,4ch
int21h
Codeends
endstart
2、求出平均值、最大值、最小值
Stacksegment
dw512dup(?
)
Stackends
Datasegment
studb25dup(35,37)
s1db'themaxis:
$'
s2db'theminis:
$'
s3db'theavgis:
$'
displaydb5dup('$')
Dataends
Codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
;在代码段填入指令序列
moval,0
movsi,0
movcl,50
movbh,0;max
movbl,100;min
again:
addal,stu[si]
adcah,0
cmpbh,stu[si]
jaL1
movbh,stu[si]
L1:
cmpbl,stu[si]
jbL2
movbl,stu[si]
L2:
incsi
loopagain
movcl,50
divcl;avg在al中
movcl,ah;保存ah
leadx,s3
movah,09h
int21h
movah,cl
callDISP
leadx,s2;最小值输出
movah,09h
int21h
moval,bl
callDISP
movah,02h;输出回车换行
movdl,0ah
int21h
movah,0dh
int21h
leadx,s1;最大值输出
movah,09h
int21h
moval,bh
callDISP
movah,4ch
int21h
DISPproc
pushbx
cmpal,100
jzmf
cmpal,10
jbgw
movah,0
movbl,10
divbl
addal,30h
movdisplay[0],al
addah,30h
movdisplay[1],ah
done:
leadx,display
movah,09h
int21h
movah,02h;输出回车换行
movdl,0ah
int21h
movah,0dh
int21h
popbx
ret
mf:
movdisplay[0],31h
movdisplay[1],30h
movdisplay[2],30h
jmpdone
gw:
addah,30h
movdisplay[0],ah
jmpdone
DISPENDP
Codeends
endstart
3、读入字符串
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movah,0ah
leadx,x+2
int21h
movah,02h;输出回车换行
movdl,0ah
int21h
movah,0dh
int21h
movdx,offsetx+2
movah,09h
int21h
leasi,x
leadi,y
movbx,di
movah,48
again:
movcx,3
repzcmpsb
jzfound
incsi
movdi,bx
decah
jnzagain
movah,02h;输出回车换行
movdl,0ah
int21h
movah,0dh
int21h
leadx,s2
jmpdone
found:
leadx,s1
done:
movah,09h
int21h
movah,4ch
int21h
Codeends
endstart
四.实验结果(包括必要的截图)
2.1
2.2
2.3
五.实验体会
通过此次试验,我掌握顺序和循环程序结构和设计方法,能在PC上对循环结构和顺序结构进行编程。
熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
实验三汇编语言子程序设计(分支、子程序)
一.实验目的
1、掌握分支和子程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二.实验内容
1、1.BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
三.实验过程和程序
1、1.BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
;地址表法
Datasegment
S1DB'The1Bitis1$'
S2DB'The2Bitis1$'
S3DB'The3Bitis1$'
S4DB'The4Bitis1$'
S5DB'The5Bitis1$'
S6DB'The6Bitis1$'
S7DB'The7Bitis1$'
S8DB'The8Bitis1$'
addrtbdwL0,L1,L2,L3,L4,L5,L6,L7
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbl,02h
moval,0ffh
again:
incal
shrbl,1
jncagain
shlal,1;al乘以2
movbl,al
movbh,0
jmpaddrtb[bx]
movah,4ch
int21h
L0:
leadx,S1
jmpoutput
L1:
leadx,S2
jmpoutput
L2:
leadx,S3
jmpoutput
L3:
leadx,S4
jmpoutput
L4:
leadx,S5
jmpoutput
L5:
leadx,S6
jmpoutput
L6:
leadx,S7
jmpoutput
L7:
leadx,S8
jmpoutput
output:
movah,09h
int21h
movah,4ch
int21h
Codeends
endstart
;转移表法
Datasegment
S1DB'The1Bitis1$'
S2DB'The2Bitis1$'
S3DB'The3Bitis1$'
S4DB'The4Bitis1$'
S5DB'The5Bitis1$'
S6DB'The6Bitis1$'
S7DB'The7Bitis1$'
S8DB'The8Bitis1$'
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbl,02h
moval,-1
again:
incal
shrbl,1
jncagain
movah,0
movcx,ax
shlax,1
addax,cx;al乘以3
leasi,jmptb
addsi,ax
jmpsi
jmptb:
jmpL0
jmpL1
jmpL2
jmpL3
jmpL4
jmpL5
jmpL6
jmpL7
org$+80h
L0:
leadx,S1
jmpoutput
L1:
leadx,S2
jmpoutput
L2:
leadx,S3
jmpoutput
L3:
leadx,S4
jmpoutput
L4:
leadx,S5
jmpoutput
L5:
leadx,S6
jmpoutput
L6:
leadx,S7
jmpoutput
L7:
leadx,S8
jmpoutput
output:
movah,09h
int21h
movah,4ch
int21h
Codeends
endstart
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
;堆栈传递
Stacksegment
dw512dup(?
)
Stackends
Datasegment
xdw100
ydw100
zdw100
Dataends
Codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
subsp,2
movax,x
pushax
movax,y
pushax
callP1
popz
movax,z
movah,4ch
int21h
P1procnear
pushbp
movbp,sp
pushax
pushbx
pushcx
pushdx
movax,6[bp];x的值
movbx,4[bp];y的值
imulbx
movcx,dx
movbx,ax
movax,6[bp]
cwd
addbx,ax
adccx,dx
movax,4[bp]
cwd
subbx,ax
sbbcx,dx
mov8[bp],bx
popdx
popcx
popbx
popax
popbp
ret4
P1endp
Codeends
endstart
;寄存器传递
Stacksegment
dw512dup(?
)
Stackends
Datasegment
xdw100
ydw100
zdw?
Dataends
Codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movax,x
movbx,y
callP1
movz,bx;bx做出口参数
movax,z;方便查看输出是否正确
movah,4ch
int21h
P1procnear
pushax
pushcx
imulbx
movcx,dx
movbx,ax
movax,x
cwd
addbx,ax
adccx,dx
movax,y
cwd
subbx,ax
sbbcx,dx
popcx
popax
ret
P1endp
Codeends
endstart
四.实验结果(包括必要的截图)
寄存器方式
堆栈方式
五.实验体会
实验四汇编语言高级编程专题
一.实验目的
1、汇编语言宏程序设计;
2、掌握中断服务子程序的编写。
3、汇编语言与高级语言的混编。
二.实验内容
1、编写一个宏,求三个数的最小数,原型为:
MIN3x,y,z,min
2、挂接1CH中断,正计时60秒后退出。
要求屏幕显示0-59的秒数。
三.实验过程和程序
1、编写一个宏,求三个数的最小数,原型为:
MIN3x,y,z,min
Stacksegment
dw512dup(?
)
Stackends
Datasegment
xdb21
ydb33
zdb9
mindb?
Dataends
Codesegment
assumecs:
code,ds:
data,ss:
stack
MIN3macrox,y,z,min;宏的定义
moval,x
cmpal,y
jbhuan
moval,y
huan:
cmpal,z
jbdone
moval,z
done:
movmin,al
addal,30h
movdl,al
movah,2;定义输出,方便观察结果
int21h
endm
start:
movax,data
movds,ax
MIN3x,y,z,min
movah,4ch
int21h
Codeends
endstart
四.实验结果(包括必要的截图)
宏定义
计数器
五.实验体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言实验报告 2914讲解 汇编语言 实验 报告 2914 讲解