汇编语言实验报告.docx
- 文档编号:5158258
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:29
- 大小:295.73KB
汇编语言实验报告.docx
《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
汇编语言实验报告
汇编语言实验报告-
————————————————————————————————作者:
———————————————————————————————— 日期:
合肥工业大学
计算机与信息学院
实验报告
课 程:
汇编语言程序设计
专业班级:
信息安全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:
0100 MOV AX,[0200]↙
186E:
0103 MOVBX,[0202]↙
186E:
0107 ADDAX,[0204]↙
186E:
010B ADC BX,[0206]↙
186E:
010FMOV[0208],AX↙
186E:
0112MOV[020A],BX↙
186E:
0116 ↙
4、用“U”命令反汇编验证源程序
–UCS:
0100↙
186E:
0100 A10002 MOV AX,[0200]
186E:
01038B1E0202 MOV BX,[0202]
186E:
0107 03060402 ADDAX,[0204]
186E:
010B131E0602 ADCBX,[0206]
186E:
010F A30802 MOV [0208],AX
186E:
0112891E0A02 MOV[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、计算表达式并存入内存
Stack segment
dw512dup(?
)
Stack ends
Data segment
ﻩxdw100
ydw100
zdw 100
vdw100
sum1dw?
sum2 dw?
ﻩ
Data ends
Code segment
assume cs:
code, ds:
data, ss:
stack
start:
movax,data
mov ds,ax
ﻩmovax,x;在代码段填入指令序列
ﻩmov bx,y
ﻩimul bx
ﻩaddax,zﻩ
adcdx,0
sub ax,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、求出平均值、最大值、最小值
Stack segment
ﻩdw512dup(?
)
Stack ends
Data segment
studb25dup(35,37)
s1db'themax is:
$'
s2db'theminis:
$'
s3db'theavgis:
$'
displaydb5dup('$')
ﻩ
Data ends
Code segment
assume cs:
code, ds:
data,ss:
stack
start:
movax,data
movds,ax
ﻩﻩ;在代码段填入指令序列
ﻩ
ﻩmoval,0
movsi,0
movcl,50
movbh,0; max
ﻩmovbl,100; min
again:
add al,stu[si]
adcah,0
cmpbh,stu[si]
ﻩjaL1
ﻩmovbh,stu[si]
L1:
cmpbl,stu[si]
jbL2
mov bl,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
int 21h
movah,0dh
ﻩint 21h
ﻩleadx,s1; 最大值输出
ﻩmov ah,09h
int21h
moval,bh
callDISP
movah,4ch
ﻩint21h
DISP proc
ﻩpush bx
cmp al,100
jzmf
ﻩcmpal,10
ﻩjbgw
ﻩmovah,0
movbl,10
divbl
ﻩaddal,30h
movdisplay[0],al
addah,30h
ﻩmovdisplay[1],ah
done:
ﻩleadx,display
mov ah,09h
int21h
mov ah,02h;输出回车换行
ﻩmovdl,0ah
int21h
movah,0dh
int 21h
ﻩpop bx
ret
mf:
movdisplay[0],31h
ﻩmovdisplay[1],30h
mov display[2],30h
ﻩjmp done
gw:
addah,30h
movdisplay[0],ah
ﻩjmpdone
DISP ENDP
Codeends
ﻩendstart
3、读入字符串
Code segment
ﻩassume cs:
code,ds:
data
start:
movax,data
ﻩmovds,ax
ﻩ
movah,0ah
ﻩleadx,x+2
ﻩint 21h
movah,02h;输出回车换行
ﻩmovdl,0ah
int21h
mov ah,0dh
ﻩint 21h
ﻩmovdx,offsetx+2
ﻩmov ah,09h
int21h
ﻩleasi,x
leadi,y
movbx,di
movah,48
again:
ﻩmovcx,3
repzcmpsb
jzfound
ﻩincsi
ﻩmovdi,bx
ﻩdecah
jnzagain
movah,02h;输出回车换行
ﻩmov dl,0ah
int21h
movah,0dh
ﻩint21h
leadx,s2
jmpdone
found:
leadx,s1ﻩ
done:
movah,09h
int21h
ﻩmovah,4ch
ﻩint 21hﻩ
Codeends
ﻩendstart
四.实验结果(包括必要的截图)
2.1
2.2
2.3
五.实验体会
通过此次试验,我掌握顺序和循环程序结构和设计方法,能在PC上对循环结构和顺序结构进行编程。
熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
ﻬ实验三 汇编语言子程序设计(分支、子程序)
一.实验目的
1、掌握分支和子程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二.实验内容
1、1.BL中的只有一位为1。
编写程序测试,并输出提示信息“TheX Bit is1”,要求:
地址表和转移表。
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
三.实验过程和程序
1、1. BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
;地址表法
Data segment
S1DB'The1Bit is1$'
S2DB 'The2Bit is 1$'
S3DB'The 3Bit is1$'
S4DB 'The 4Bitis1$'
S5DB 'The 5 Bit is 1$'
S6DB'The6Bit is1$'
S7DB'The7 Bitis1$'
S8DB'The8 Bitis1$'ﻩ
ﻩ
addrtbdwL0,L1,L2,L3,L4,L5,L6,L7
ﻩ
Data ends
Code segment
ﻩassumecs:
code,ds:
data
start:
movax,data
ﻩmov ds,ax
ﻩ
movbl,02h
ﻩmoval,0ffh
again:
incal
ﻩshrbl,1
jnc again
shlal,1;al乘以2
mov bl,al
movbh,0
ﻩjmpaddrtb[bx]
ﻩmov ah,4ch
int21h
L0:
leadx,S1
ﻩjmpoutput
L1:
leadx,S2
ﻩjmp output
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
int 21h
movah,4ch
ﻩint21h
ﻩ
Codeends
end start
;转移表法
Data segment
S1DB'The 1Bitis1$'
S2DB 'The2Bitis1$'
S3 DB'The3Bit is1$'
S4DB'The 4 Bitis 1$'
S5DB'The 5 Bit is1$'
S6DB 'The6Bitis1$'
S7DB'The7 Bit is 1$'
S8DB'The8 Bitis1$'
ﻩ
Data ends
Code segment
assumecs:
code,ds:
data
start:
movax,data
ﻩmovds,ax
movbl,02h
ﻩmoval,-1
again:
ﻩincal
ﻩshrbl,1
ﻩjncagain
mov ah,0
movcx,ax
shlax,1
addax,cx; al乘以3
leasi,jmptb
addsi,ax
jmpsi
ﻩ
jmptb:
ﻩjmpL0
ﻩjmpL1
ﻩjmpL2
ﻩjmpL3
jmpL4
ﻩjmpL5
ﻩjmp L6
jmpL7
org$+80hﻩ
ﻩ
L0:
leadx,S1
jmpoutput
L1:
leadx,S2
ﻩjmpoutput
L2:
leadx,S3
jmpoutput
L3:
lea dx,S4
ﻩjmpoutput
L4:
lea dx,S5
jmpoutput
L5:
leadx,S6
jmpoutput
L6:
lea dx,S7
jmp output
L7:
leadx,S8
ﻩjmpoutput
output:
movah,09h
int21h
movah,4ch
ﻩint21h
Code ends
endstart
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
;堆栈传递
Stack segment
dw512dup(?
)
Stack ends
Data segment
x dw100
ydw100
ﻩzdw100
Data ends
Code segment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
ﻩmov ds,ax
subsp,2
movax,x
push ax
ﻩmovax,y
ﻩpushax
callP1
pop z
movax,z
movah,4ch
ﻩint 21h
P1 procnear
ﻩpushbp
movbp,sp
ﻩpushax
ﻩpushbx
pushcx
ﻩpushdx
movax,6[bp];x的值
movbx,4[bp];y的值
imul bx
ﻩmovcx,dx
movbx,ax
ﻩmovax,6[bp]
cwd
addbx,ax
adc cx,dx
movax,4[bp]
cwd
subbx,ax
sbb cx,dx
ﻩmov 8[bp],bx
popdx
ﻩpopcx
ﻩpopbx
popax
popbp
ret4
P1endp
ﻩ
Codeends
ﻩendstart
;寄存器传递
Stack segment
ﻩdw 512dup(?
)
Stack ends
Data segment
xdw100
ydw 100
ﻩzdw?
Dataends
Code segment
ﻩassumecs:
code,ds:
data,ss:
stack
start:
ﻩ
mov ax,data
ﻩmov ds,ax
ﻩmov ax,x
movbx,yﻩ
ﻩcallP1
ﻩmovz,bx;bx做出口参数
mov ax,z;方便查看输出是否正确
ﻩmovah,4ch
int21h
P1 procnear
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、编写一个宏,求三个数的最小数,原型为:
MIN3 x,y,z,min
2、挂接1CH中断,正计时60秒后退出。
要求屏幕显示0-59的秒数。
三.实验过程和程序
1、编写一个宏,求三个数的最小数,原型为:
MIN3x,y,z,min
Stack segment
ﻩdw512dup(?
)
Stack ends
Data segment
ﻩx db21
ﻩy db 33
ﻩzdb9
mindb?
Data ends
Code segment
assumecs:
code,ds:
data, ss:
stack
ﻩMIN3macro x,y,z,min;宏的定义
ﻩmoval,x
ﻩcmp al,y
ﻩjb huan
ﻩmov al,y
huan:
ﻩcmpal,z
ﻩjbdone
ﻩmoval,z
done:
movmin,al
ﻩaddal,30h
mov dl,al
movah,2;定义输出,方便观察结果
int21h
endm
start:
movax,data
ﻩmovds,ax
ﻩMIN3 x,y,z,min
mov ah,4ch
ﻩint21h
Code ends
endstart
四.实验结果(包括必要的截图)
宏定义
计数器
五.实验体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 报告