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