汇编语言实验报告.docx
- 文档编号:6863296
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:33
- 大小:191.05KB
汇编语言实验报告.docx
《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
汇编语言实验报告
合肥工业大学
实验报告
课程:
汇编语言程序设计
专业班级:
学号:
姓名:
实验一Debug程序的使用
一.实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容
1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序
基础题:
1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
附加题:
1.从DS:
0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:
540,1,-1,1080,0,试求w=(v-(x*y+z-540))/x
2.完成BX中1的个数的统计。
3.用串操作指令将DS:
0000开始20个字节初始化为:
0CCH。
并将这20个字节的内容复制到其后的20个字节里。
四.实验结果(包括必要的截图)
基础题1:
基础题2:
附加题1:
附加题2:
附加题3:
五.实验体会
1.在汇编语言中,变量的其实都是地址。
2.在Debug中,数值都是16进制的。
3.在读写内存中的数据时,必须指出数据类型是byte还是word。
实验二汇编语言程序设计(顺序、多分支、循环)
一.实验目的
1、掌握顺序和循环程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
二.实验内容
1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
试编写汇编语言程序完成以下功能:
①计算表达式值(V–(X*Y+Z-720))/X;
②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
2、使用地址表实现如下功能:
根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。
3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。
三.实验过程和程序
第一题:
stacksegmentstack
dw512dup(?
)
stackends
datasegment
Xdw021CH
Ydw0001H
Zdw0FFFFH
Vdw0438H
SUM1dw0H
SUM2dw0H
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movax,X
imulwordptrY
movcx,dx
movbx,ax
movax,Z
cwd
addbx,ax
adccx,dx
movax,21CH
cwd
subbx,ax
sbbcx,dx
movax,V
cwd
subax,bx
sbbdx,cx
idivwordptrX
movwordptrSUM1,ax
movwordptrSUM2,dx
movah,4ch
int21h
codeends
endstart
第二题:
stacksegmentstack
dw512dup(?
)
stackends
datasegment
tipdb'Inputnumber(1~7,0forquit):
','$'
msg1db'Monday',0DH,0AH,'$'
msg2db'Tuesday',0DH,0AH,'$'
msg3db'Wednesday',0DH,0AH,'$'
msg4db'Thursday',0DH,0AH,'$'
msg5db'Friday',0DH,0AH,'$'
msg6db'Saturday',0DH,0AH,'$'
msg7db'Sunday',0DH,0AH,'$'
tabledwshow1,show2,show3,show4,show5,show6,show7
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
getnum:
;打印提示信息
movdx,offsettip
movah,09H
int21H
;用户输入数字
movah,01H
int21H
movbl,al
;换行保持美观
movah,02H
movdl,0DH
int21H
movah,02h
movdl,0AH
int21H
;非法数值重新输入
cmpbl,'0'
jbgetnum
cmpbl,'7'
jagetnum
;输入'0'直接退出
cmpbl,'0'
jequit
andbx,000FH
decbx
shlbx,01H
jmptable[bx]
;输出对应单词
print:
movah,09H
int21H
jmpgetnum
quit:
movah,4ch
int21h
show1:
movdx,offsetmsg1
jmpprint
show2:
movdx,offsetmsg2
jmpprint
show3:
movdx,offsetmsg3
jmpprint
show4:
movdx,offsetmsg4
jmpprint
show5:
movdx,offsetmsg5
jmpprint
show6:
movdx,offsetmsg6
jmpprint
show7:
movdx,offsetmsg7
jmpprint
codeends
endstart
第三题:
stacksegmentstack
dw512dup(?
)
stackends
datasegment
studentdb50dup
(2)
tabledw10000,1000,100,10,1
NewLinedb0DH,0AH,'$'
MaxStrdb'Max:
$'
MinStrdb'Min:
$'
Averagedb'Average:
$'
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
callcalcAverage
callfindMax
callfindMin
movah,4CH
int21H
calcAverage:
leasi,student
movcx,50
movax,0
PlusNext:
addal,[si]
adcah,0
incsi
loopPlusNext
movbl,50
divbl
movbl,al
xorbh,bh
leadx,Average
movah,09H
int21H
callputnum
leadx,NewLine
movah,09H
int21H
ret
findMax:
leasi,student
movcx,50
moval,0
MaxNext:
cmpal,[si]
jaMaxPass
moval,[si]
MaxPass:
incsi
loopMaxNext
movbl,al
xorbh,bh
leadx,MaxStr
movah,09H
int21H
callputnum
leadx,NewLine
movah,09H
int21H
ret
findMin:
leasi,student
movcx,50
moval,0FFH
MinNext:
cmpal,[si]
jbMinPass
moval,[si]
MinPass:
incsi
loopMinNext
movbl,al
xorbh,bh
leadx,MinStr
movah,09H
int21H
callputnum
leadx,NewLine
movah,09H
int21H
ret
putnum:
movcx,5
leadi,table
next:
movax,bx
movdx,0H
divwordptr[di]
testal,0H
movbx,dx
addal,'0'
movdl,al
movah,02H
int21H
adddi,2
loopnext
ret
codeends
endstart
四.实验结果(包括必要的截图)
第一题:
第二题:
第三题:
五.实验体会
1.汇编中的分支、循环只能通过跳转实现。
2.地址表是实现多分支结构的常用方法。
实验三循环和子程序设计
一.实验目的
1、掌握循环程序和子程序的设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
二.实验内容
1.在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。
设计程序完成如下功能:
根据用户输入的一个2位十进制数,作为查找对象,在该数组中查找,若找到则显示“Y”,若没找到则显示“N”。
2.从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:
查找中间是否有‘asm’子串。
如果有,输出‘Yes’;否则,输出‘No’)。
3.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。
要求通过堆栈(寄存器、内存)传送所有参数。
(要求输入输出实现,且有提示)
三.实验过程和程序
第一题:
stacksegmentstack
dw512dup(0)
stackends
datasegment
Scoredb20,21,22,23,24,25,26,27,28,29
db30,31,32,33,34,35,36,37,38,39
db40,41,42,43,44,45,46,47,48,49
db50,51,52,53,54,55,56,57,58,59
db60,61,62,63,64,65,66,67,68,69
db70,71,72,73,74,75,76,77,78,79
db80,81,82,83,84,85,86,87,88,89
db90,91,92,93,94,95,96,97,98,99
db100,101,102,103,104,105,106,107,108,109
db110,111,112,113,114,115,116,117,118,119
NextLinedb0DH,0AH,'$'
Tipdb'Inputanumber:
','$'
Nodb'N',0DH,0AH,'$'
Yesdb'Y',0DH,0AH,'$'
InputBufdb4,?
8dup('$')
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
;打印提示信息
leadx,Tip
movah,09H
int21H
;获取用户的输入,放在al
subsp,2
callGetNum
popax
;扫描Score
leabx,Score
movcx,100
L:
cmpal,[bx];若[bx]==al,找到
jeFound
incbx
loopL
;循环没有中断,没找到,打印'No'
leadx,No
jmpOutPut
Found:
leadx,Yes
jmpOutPut
OutPut:
movah,09H
int21H
Exit:
movah,4CH
int21H
;参数:
无
;返回值:
8位无符号数
GetNumprocfar
pushax
pushbx
pushcx
pushdx
pushbp
movbp,sp
leadx,InputBuf
movah,0AH
int21H
movdl,10
xorax,ax
leabx,InputBuf[2]
movcl,InputBuf[1];设置CX
xorch,ch
Next_GetNum:
muldl
movdh,[bx]
subdh,'0'
addal,dh
incbx
loopNext_GetNum
xorah,ah
movss:
[bp+14],ax
leadx,NextLine
movah,09H
int21H
popbp
popdx
popcx
popbx
popax
ret
GetNumendp
codeends
endstart
第二题:
stacksegmentstack
dw512dup(0)
stackends
datasegment
StrBufdb50,?
50dup('$'),'$'
Tip1db'Inputastring:
',0DH,0AH,'$'
Tip2db'Youinput:
',0DH,0AH,'$'
Nodb'No',0DH,0AH,'$'
Yesdb'Yes',0DH,0AH,'$'
NextLinedb0DH,0AH,'$'
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
callGetLine
leabx,StrBuf[2];BX为字符串首地址
L_BEGIN:
;每次循环的开始
cmpbyteptr[bx],'$';如果[bx]是'$',字符串已经结束,跳出循环
jeL_END
cmpbyteptr[bx],'a';若[bx]是'a',比较[bx+1]是不是's'
jneNEXT
cmpbyteptr[bx+1],'s'
jneNEXT
cmpbyteptr[bx+2],'m';若[bx+2]是'm',找到了'asm',跳出循环
jeL_END
NEXT:
incbx
jmpL_BEGIN
L_END:
cmpbyteptr[bx],'$';若[bx]=='$',则没找到'asm',否则就是找到了
jneFound
leadx,No
jmpOutPut
Found:
leadx,Yes
jmpOutPut
OutPut:
movah,09H
int21H
Exit:
movah,4CH
int21H
GetLineprocfar
pushax
pushbx
pushdx
;打印输入提示
leadx,Tip1
movah,09H
int21H
;获取用户输入
leadx,StrBuf
movah,0AH
int21H
;在StrBuf结尾添加'$'
leabx,StrBuf[2]
moval,StrBuf[1]
xorah,ah
addbx,ax
movbyteptr[bx],'$'
;换行打印
leadx,NextLine
movah,09H
int21H
;输出提示
leadx,Tip2
movah,09H
int21H
;打印用户输入的字符串
leadx,StrBuf[2]
movah,09H
int21H
;换行打印
leadx,NextLine
movah,09H
int21H
popdx
popbx
popax
ret
GetLineendp
codeends
endstart
第三题:
stacksegmentstack
dw512dup(0)
stackends
datasegment
Xdb0
Ydb0
Zdw0
NextLinedb0DH,0AH,'$'
TipXdb'InputX:
','$'
TipYdb'InputY:
','$'
TipZdb'Z=','$'
InputBufdb6,?
10dup('$')
OutputBufdb16dup('$')
Tabledw10000,1000,100,10,1
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
;用户输入X
leadx,TipX
movah,09H
int21H
subsp,2
callGetNum
popax
movX,al
leadx,NextLine
movah,09H
int21H
;用户输入Y
leadx,TipY
movah,09H
int21H
subsp,2
callGetNum
popax
movY,al
leadx,NextLine
movah,09H
int21H
moval,X
movah,Y
pushax
callFunc
popax
movZ,ax
pushwordptrZ
callPutNum
Exit:
movah,4CH
int21H
;参数8位有符号数X,Y
;返回值:
16位有符号数
Funcprocfar
pushax
pushbx
pushdx
pushbp
movbp,sp
movbx,[bp+12];bl==X,bh==Y
moval,bl
imulbh;ax=X*Y
movdx,ax;dx=X*Y
;dx+=X
moval,bl
cbw
adddx,ax
;dx-=Y
moval,bh
cbw
subdx,ax
mov[bp+14],dx
popbp
popdx
popbx
popax
ret2
Funcendp
;参数:
无
;返回值:
8位有符号数
GetNumprocfar
pushax
pushbx
pushcx
pushdx
pushbp
movbp,sp
leadx,InputBuf
movah,0AH
int21H
movdl,10
xorax,ax
leabx,InputBuf[2]
movcl,InputBuf[1];设置CX
xorch,ch
cmpbyteptrInputBuf[2],'-'
jneNext_GetNum
deccx
incbx
Next_GetNum:
muldl
movdh,[bx]
subdh,'0'
addal,dh
incbx
loopNext_GetNum
cmpbyteptrInputBuf[2],'-'
jneEnd_GetNum
movbl,al
xoral,al
subal,bl
End_GetNum:
xorah,ah
movss:
[bp+14],ax
leadx,NextLine
movah,09H
int21H
popbp
popdx
popcx
popbx
popax
ret
GetNumendp
;参数:
16位有符号数
;返回值:
无
PutNumprocfar
pushax
pushbx
pushcx
pushdx
pushdi
pushsi
pushbp
movbp,sp
movbx,[bp+18]
cmpwordptr[bp+18],0
jgeP1_PutN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 报告