汇编语言实验报告5574277.docx
《汇编语言实验报告5574277.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告5574277.docx(20页珍藏版)》请在冰豆网上搜索。
汇编语言实验报告5574277
(此文档为word格式,下载后您可任意编辑修改!
)
合肥工业大学
计算机与信息学院
实验报告
课程:
汇编语言程序设计
专业班级:
学号:
姓名:
实验一Debug程序的使用
一.实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握80868088的寻址方式及多字节数据的处理方法。
二.实验内容
1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序
1.
eds:
020078563412
eds:
020498BADCFE
2.
直接寻址:
movax,[0200]
movbx,[0202]
addax,[0204]
adcbx,[0206]
mov[0208],ax
mov[020a],bx
间接寻址:
movsi,[0200]
movdi,[0204]
movbx,[0208]
movax,[si]
movdx,[si+2]
addax,[di]
adcdx,[di+2]
mov[bx],ax
mov[bx+2],dx
附加题1
eds:
00001c02
eds:
00020100
eds:
0004FFFF
eds:
00063804
eds:
00080000
MicrosoftWindows[?
?
?
?
6.1.7600]
?
?
?
?
?
?
?
?
(c)2009MicrosoftCorporation?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C:
\Users\Administrator>debug
-eds:
00001c02
-eds:
00020100
-eds:
0004FFFF
-eds:
00063804
-eds:
00080000
-a
13B3:
0100movax,[0000]
13B3:
0103movbx,[0002]
13B3:
0107imulbx
13B3:
0109movcx,ax
13B3:
010Bmovbx,dx
13B3:
010Dmovax,[0004]
13B3:
0110cwd
13B3:
0111addcx,ax
13B3:
0113adcbx,dx
13B3:
0115subcx,21c
13B3:
0119sbbbx,0
13B3:
011Cmovax,[0006]
13B3:
011Fcwd
13B3:
0120subax,cx
13B3:
0122sbbdx,bx
13B3:
0124movbx,[0000]
13B3:
0128idivbx
13B3:
012Amov[0008],ax
13B3:
012D
-g=0100012d
AX=0002BX=021CCX=FFFFDX=0001SP=FFEEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13B3CS=13B3IP=012DNVUPEIPLZRACPECY
13B3:
012D0000
ADD[BX+SI],ALDS:
021C=00
-
四.实验结果
1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2.分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
附加题1
五.实验体会
通过本次试验熟悉了DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
以及DEBUG下的八个基本的指令,如a,g,t,u等等。
初步掌握了80868088的寻址方式及多字节数据的处理方法。
实验二汇编语言程序设计(顺序、循环)
一.实验目的
1、掌握顺序和循环程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行80868088汇编语言程序的过程。
二.实验内容
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.
Datasegment
sum1dw0
sum2dw0
xdw21CH
ydw1H
zdw0FFFFH
vdw438H
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,x
movbx,y
imulbx
movcx,ax
movbx,dx
movax,z
cwd
addcx,ax
adcbx,dx
subcx,0D0H
sbbbx,0
movax,v
cwd
subax,cx
sbbdx,bx
movbx,x
idivbx
movsum1,ax
movsum2,dx
movah,4ch
int21h
Codeends
endstart
2.
Datasegment
gradedw10dup(90)
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,50
movbx,0
movax,0
again:
addax,grade[bx]
incbx
incbx
loopagain
movbx,50
divbx
movah,4ch
int21h
Codeends
endstart
3.
lenequ51
Datasegment
stringdblen,?
lendup(?
)
lfdb0ah
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadx,string
movah,0ah
int21h
movdl,lf
movah,2
int21h
movcl,string[1]
movch,0
leabx,string[2]
addbx,cx
movbyteptr[bx],'$'
leadx,string[2]
movah,09h
int21h
movah,4ch
int21h
Codeends
endstart
四.实验结果
1.
xdw21CH
ydw1H
zdw0FFFFH
vdw438H结果为sum1=0001sum2=00d1
2.
输入10组数据,分别为90
输出为46h
3.
输入:
string
输出:
string
五.实验体会
掌握了顺序和循环程序结构和设计方法,以及字符、字符串的输入和显示,熟悉了在PC机上建立、汇编、连接、调试和运行80868088汇编语言程序的过程。
实验三汇编语言子程序设计(分支、子程序)
一.实验目的
1、掌握分支和子程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行80868088汇编语言程序的过程。
3、通过汇编语言了解高级语言的参数传递等知识。
二.实验内容
1、1.BL中的只有一位为1。
编写程序测试,并输出提示信息“TheXBitis1”,要求:
地址表和转移表。
2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
三.实验过程和程序
1.
地址表方法:
Datasegment
xdb10h
addrtbldwl0,l1,l2,l3,l4,l5,l6,l7
s0db'The0Bitis1.$'
s1db'The1Bitis1.$'
s2db'The2Bitis1.$'
s3db'The3Bitis1.$'
s4db'The4Bitis1.$'
s5db'The5Bitis1.$'
s6db'The6Bitis1.$'
s7db'The7Bitis1.$'
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,8
movbl,x
again:
shrbl,1
jncl
movsi,8
subsi,cx
shlsi,1
jmpaddrtbl[si]
l0:
leadx,s0
jmpoutput
l1:
leadx,s1
jmpoutput
l2:
leadx,s2
jmpoutput
l3:
leadx,s3
jmpoutput
l4:
leadx,s4
jmpoutput
l5:
leadx,s5
jmpoutput
l6:
leadx,s6
jmpoutput
l7:
leadx,s7
jmpoutput
l:
loopagain
output:
movah,9h
int21h
movah,4ch
int21h
Codeends
endstart
转移表方法:
Datasegment
xdb80h
addrtbldwl0,l1,l2,l3,l4,l5,l6,l7
s0db'The0Bitis1.$'
s1db'The1Bitis1.$'
s2db'The2Bitis1.$'
s3db'The3Bitis1.$'
s4db'The4Bitis1.$'
s5db'The5Bitis1.$'
s6db'The6Bitis1.$'
s7db'The7Bitis1.$'
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,8
movbl,x
again:
shrbl,1
jncl
movsi,8
subsi,cx
l:
loopagain
leaax,jmptbl
movcx,si
shlsi,1
addsi,cx
addax,si
jmpax
jmptbl:
jmpnearptrl0
jmpnearptrl1
jmpnearptrl2
jmpnearptrl3
jmpnearptrl4
jmpnearptrl5
jmpnearptrl6
jmpnearptrl7
l0:
leadx,s0
jmpoutput
l1:
leadx,s1
jmpoutput
l2:
leadx,s2
jmpoutput
l3:
leadx,s3
jmpoutput
l4:
leadx,s4
jmpoutput
l5:
leadx,s5
jmpoutput
l6:
leadx,s6
jmpoutput
l7:
leadx,s7
jmpoutput
output:
movah,9h
int21h
movah,4ch
int21h
Codeends
endstart
2.
Datasegment
xdw1
ydw2
zdw0
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
subsp,4
pushy
pushx
callf
popz
movah,4ch
int21h
fprocnear
pushbp
movbp,sp
pushsi
pushdx
pushcx
pushbx
pushax
movax,[bp+4]
movcx,ax
movbx,[bp+6]
imulbx
movsi,0
addax,cx
adcdx,si
movsi,0
subax,bx
sbbdx,si
mov[bp+8],ax
mov[bp+10],dx
ret4
fendp
Codeends
endstart
四.实验结果
1.
地址表方法:
BL中存储的数为:
10h
输出结果为:
The4bitis1.
转移表方法:
BL中存储的数为:
80h
输出结果为:
The7bitis1.
2.
五.实验体会
通过本次试验,掌握了分支和子程序结构和设计方法;实现了转移表以及地址表的创建及调用,以及几种参数传递的方式,进一步熟悉了在PC机上建立、汇编、连接、调试和运行80868088汇编语言程序的过程。
实验四汇编语言高级编程专题
一.实验目的
1、汇编语言宏程序设计;
2、掌握中断服务子程序的编写。
3、汇编语言与高级语言的混编。
二.实验内容
1、编写一个宏,求三个数的最小数,原型为:
MIN3x,y,z,min
2、挂接1CH中断,正计时60秒后退出。
要求屏幕显示0-59的秒数。
三.实验过程和程序
1.
MIN3macrox,y,z,min
moval,x
movbl,y
movcl,z
cmpal,bl
jcl1
cmpbl,cl
jcl2
movmin,cl
jmpexit
l1:
cmpal,cl
jcl3
movmin,cl
jmpexit
l2:
movmin,bl
jmpexit
l3:
movmin,al
exit:
endm
Datasegment
xdb03h
ydb02h
zdb01h
mindb?
Dataends
Codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
MIN3x,y,z,min
addmin,30h
movdl,min
movah,02h
int21h
movah,4ch
int21h
Codeends
endstart
2.
INTNOEQU1CH
USEINT=59
DATASEGMENT
OLDISRDW?
?
TIMERDB100
COUNTERDW60
ISDONEDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVES,AX
;PROTECT
IFUSEINT
MOVAL,INTNO
MOVAH,35H
INT21H
;ES:
BX
MOVOLDISR[0],BX
MOVAX,ES
MOVOLDISR[2],AX
ELSE
CLI
MOVAX,ES:
[INTNO*4]
MOVOLDISR[0],AX
MOVAX,ES:
[INTNO*4+2]
MOVOLDISR[2],AX
STI
ENDIF
;SETNEWISR
IFUSEINT
PUSHDS
MOVAX,SEGISR
MOVDS,AX
MOVDX,OFFSETISR
MOVAL,INTNO
MOVAH,25H
INT21H
POPDS
ELSE
CLI
MOVWORDPTRES:
[INTNO*4],OFFSETISR
MOVWORDPTRES:
[INTNO*4+2],SEGISR
STI
ENDIF
;WAITHERE
WAITHERE:
CMPISDONE,1
JNZWAITHERE
EXIT:
;RESTORE
IFUSEINT
PUSHDS
MOVDX,OLDISR[0]
MOVAX,OLDISR[2]
MOVDS,AX
MOVAL,INTNO
MOVAH,25H
INT21H
POPDS
ELSE
CLI
MOVAX,OLDISR[0]
MOVES:
[INTNO*4],AX
MOVAX,OLDISR[2]
MOVES:
[INTNO*4+2],AX
STI
ENDIF
MOVAX,4C00H
INT21H
ISRPROCFAR
PUSHDX
PUSHAX
MOVAX,DATA
MOVDS,AX
STI;便于中断嵌套
;COUNTHERE
INCTIMER
AGAIN:
CMPTIMER,100055;18
JBDONE
MOVTIMER,0
;carriage
MOVAH,2
MOVDL,13
INT21H
;printtime
MOVAX,COUNTER
MOVDL,10
DIVDL
MOVDH,AH
MOVDL,AL
MOVAH,2
ADDDL,30H
INT21H
MOVDL,DH
ADDDL,30H
INT21H
DECCOUNTER
JGEDONE
MOVISDONE,1
DONE:
PUSHF
CALLDWORDPTROLDISR
CLI
POPAX
POPDX
IRET;中断返回
ISRENDP
CODEENDS
ENDSTART
四.实验结果
1.
输入:
x,y,z分别是03h02h01h
输出:
1
2.
五.实验体会
通过本次试验熟悉了汇编语言宏程序设计;掌握中断服务子程序的编写,其中应注意恢复原中断指令,将ds重新指向数据段。