汇编实验报告山东大学.docx
- 文档编号:8048634
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:37
- 大小:292.12KB
汇编实验报告山东大学.docx
《汇编实验报告山东大学.docx》由会员分享,可在线阅读,更多相关《汇编实验报告山东大学.docx(37页珍藏版)》请在冰豆网上搜索。
汇编实验报告山东大学
实验一熟悉汇编环境及调试命令
内容和要求:
(1)选取教科书中典型例题(完整程序),用编辑软件在PC机中形成汇编源程序*.ASM文件,然后编译、连接,生成目标文件和可执行文件。
(2)用DEBUG程序进行调试,熟悉动态调试环境和常用命令。
目的:
掌握用编辑软件编辑程序文本的方法;在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤;熟悉并掌握用DEBUG调试程序。
实验程序
DATASSEGMENT
onedb20dup(32),1,'WELCOMEYOU!
',7,13,10
countequ$-one
DATASENDS
STACKSSEGMENTstack'stack'
stapdb256dup(?
)
topequthisword
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movax,segstacks;此处输入代码段代码
movss,ax
movsp,offsettop
movsi,offsetone
movcx,count
next:
movdl,[si]
movah,2
int21h
incsi
loopnext
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
结果
Debug调试:
输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。
实验总结:
1.通过实验,了解了程序书写,熟悉了MASM环境,编译和运行的方法,对汇编有了初步认识。
2.掌握了Debug调试方法,对程序修改有很大帮助,通过练习,熟悉了各调试指令。
实验二多位十进制数相加求和显示
内容和要求:
将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。
要求:
将相加结果仍以常用十进制数形式显示在屏幕上。
目的:
学习数据传送、加法运算及十进制数(BCD码)运算调整指令的用法;熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程,练习分析程序,会查错。
实验程序:
DATA1SEGMENT
bufdb10
db0
db10dup(0)
sumdw?
buffdb10
db0
db10dup(0)
sum1dw?
tw1db'pleaseinputthefirstnum:
','$'
tw2db'pleaseinputthesecondnum:
','$'
tw3db'sum:
','$';此处输入数据段代码
DATA1ENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA1,ss:
stacks
START:
MOVAX,DATA1
MOVDS,AX
movax,stacks
movss,ax
pushf
;显示输入a
movah,9
movdx,offsettw1
int21h
;输入buf
;movdx,segbuf
;movds,dx
movdx,offsetbuf
movah,0ah
int21h
;换行
movah,2
movdl,10
int21h
;换行
movah,2
movdl,10
int21h
;提示输入b
movah,9
movdx,offsettw2
int21h
;输入buf
;movdx,segbuf
;movds,dx
movdx,offsetbuff
movah,0ah
int21h
;换行
movah,2
movdl,10
int21h
movah,2
movdl,10
int21h
;显示加法标志
movah,9
movdx,offsettw3
int21h
;
;以下为加法过程
MOVDI,OFFSETbuff+2
MOVSI,OFFSETbuf+2
xordx,dx
xorax,ax
movdl,ds:
[di-1]
moval,ds:
[si-1]
adddi,dx
addsi,ax
movcx,0
movds:
[di],cx
movds:
[si],cx
pushax
pushdx
MOVDI,OFFSETbuff+2
MOVSI,OFFSETbuf+2
popdx
cmpdl,1
jetep2
movcx,dx
deccx
tep1:
movdx,cx
test1:
moval,ds:
[di]
xchgal,ds:
[di+1]
movds:
[di],al
incdi
looptest1
movcx,dx
movdi,offsetbuff+2
looptep1
tep2:
popax
cmpax,1
jetep4
movcx,ax
deccx
tep3:
movdx,cx
test2:
moval,ds:
[si]
xchgal,ds:
[si+1]
movds:
[si],al
incsi
looptest2
movcx,dx
movsi,offsetbuf+2
looptep3
tep4:
popf
MOVDI,OFFSETbuff+2
MOVSI,OFFSETbuf+2
movcx,10
ADDS:
MOVAL,ds:
[DI]
ADCAL,dS:
[SI]
AAA
MOVds:
[DI],AL
INCDI
INCSI
LOOPADDS
MOVCX,10
SHOW:
MOVDL,ds:
[DI-1]
ADDDL,30H
DECDI
MOVAH,2H
INT21H
LOOPSHOW
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
CODESENDS
ENDSTART
实验结果:
实验总结:
1.学会数据传送,由键盘输入是ASCII码需转换成十进制数加30h。
2.学会了汇编加法指令的使用方法,以及BCD码调整。
3.注意问题:
汇编内部处理数据与输入是反向的,在显示时应倒序显示。
实验三两个十进制数相乘并显示乘积
内容和要求:
实现一多位十进制数和一个一位十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,结果以十进制数形式显示在屏幕上。
目的:
掌握乘法指令的用法、计算结果的转换、存放及显示。
实验程序:
CRLFMACRO
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
ENDM
DATASEGMENT
DATA1DB20DUP(?
)
DATA2DB20DUP(?
)
str1db'Thefirstnumber(0~9):
','$'
str2db'Thesecondnumber(0~99):
','$'
zDB?
DATAENDS
STACKSEGMENT
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
movah,09h
leadx,str1
int21h
CRLF
MOVBX,01
MOVSI,OFFSETDATA1
CALLINPUT2
CRLF
movah,09h
leadx,str2
int21h
CRLF
MOVBX,02
MOVSI,OFFSETDATA2
CALLINPUT1
CRLF
CRLF
MOVSI,OFFSETDATA1
MOVBX,02
CALLDISPL
movah,02
movdl,2AH
INT21H
MOVSI,OFFSETDATA2
MOVBX,01
CALLDISPL
movah,02h
movdl,3dh
int21h
MOVDI,OFFSETDATA1
xorz,0
CALLADDA
MOVSI,OFFSETDATA2
MOVBX,03
CALLDISPL
CRLF
MOVAX,4C00H
INT21H
DISPLPROCNEAR
DSI:
MOVAH,06
MOVDL,[SI+2]
INT21H
MOVAH,06
MOVDL,[SI+1]
INT21H
MOVAH,06
MOVDL,[SI]
INT21H
RET
DISPLENDP
ADDAPROCNEAR
MOVDX,SI
MOVBP,DI
MOVBX,02
AD1:
SUBBYTEPTR[SI+BX-1],30H
DECBX
JNZAD1
SUBBYTEPTR[DI],30H
MOVSI,DX
MOVDI,BP
;MOVCX,01
CLC
AD2:
MOVAL,[SI]
MOVBL,[DI]
imulBL
AAM
movz,ah
MOV[SI],al
movAL,[SI+1]
movBL,[DI]
imulBL
AAM
ADCAL,z
AAA
MOV[SI+1],AL
MOV[SI+2],AH
MOVSI,DX
MOVDI,BP
MOVBX,03
AD3:
ADDBYTEPTR[SI+BX-1],30H
DECBX
JNEAD3
;ADDBYTEPTR[DI],30H
RET
INPUT1PROCNEAR
IN1:
MOVAH,01
INT21H
MOV[SI+1],AL
decSI
DECBX
JNZIN1
RET
INPUT1ENDP
INPUT2PROCNEAR
IN1:
MOVAH,01
INT21H;
MOV[SI],AL
RET
INPUT2ENDP
ADDAENDP
CODEENDS
ENDSTART
实验结果:
实验总结:
1.通过实验学会了,使用汇编语言完成相乘运算以及转过程。
2.与加法类似,应注意显示顺序的问题。
3.学会了使用宏定义,重复部分只需写一次即可,大大简化了程序的复杂性,简洁易懂。
实验四字符串匹配程序
内容与要求:
编写程序,实现两个字符串(假设两字符串事先已存于内存中)的比较。
若相同,则显示比较结果’MATCH’,否则显示’NOMATCH’。
目的:
掌握字符串比较指令的使用方法及运行结果的提示显示。
实验程序:
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
datasegment
string1db100,?
100dup(?
)
string2db100,?
100dup(?
)
str1db'MATCH','$'
str2db'NOMATCH','$'
dataend
codesegment'code'
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moves,ax
leadx,string1
movah,0AH
int21h
subch,ch
adddx,2
movsi,dx
CRLF
leadx,string2
movah,0AH
int21h
subch,ch
adddx,2
movdi,dx
CRLF
movcl,100
repzcmpsb
jnzdiffer
jmpsame
same:
movah,09h
leadx,str1
int21h
jmptail
differ:
movah,09h
leadx,str2
int21h
tail:
movah,4ch
int21h
codeends
endstart
实验结果:
实验总结:
1.学会了repzcmpsb指令的使用方法,其比较次数放在cl中,学会了cx寄存器的使用方法。
2.进一步了解了DOS调用方法,分别是9号调用显示字符串,1号调用从键盘输入字符和4CH调用终止程序。
9号使用DX指向字符串首地址,1号结果存在AL中。
通过实验,对DOS功能调有了更加深刻的认识。
3.学会了跳转指令使用,jmp、jz以及jnz的区别,使用时应选择正确的标志寄存器。
实验五查找字符串中的指定字符(即字符搜索)
内容与要求:
用串操作指令设计程序,实现在指定存储区(长度:
100H)中寻找指定的匹配字符,当遇空格字符(20H)便结束,并显示查找结果,如提示“找到”或“未找到”。
要求:
欲查找的指定字符从键盘输入。
目的:
灵活运用串操作指令,掌握DOS功能调用,完成键入信息的提示和信息键入。
实验程序:
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
datasegment
string1db100,?
100dup(?
)
string2db0
str3db'pleaseinputastring:
','$'
keydb'Pleasethekeyword:
','$'
str1db'FIND','$'
str2db'NOFIND','$'
dataends
codesegment'code'
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax
MOVAH,09H
leadx,str3
INT21H
movdx,offsetstring1
movah,0AH
int21h
subch,ch
CRLF
MOVAH,09H
leadx,key
INT21H
movah,01H
int21h
movstring2,al
CRLF
;xorax,ax
movdi,offsetstring1+2
moval,string2
movcl,100
repnescasb
jnenofind
find:
movah,09h
leadx,str1
int21h
jmptail
nofind:
movah,09h
leadx,str2
int21h
tail:
movah,4ch
int21h
codeends
endstart
实验结果:
实验总结:
1.本实验与上一个实验内容类似,不过不同之处在于直接比较两个已存在的字符串内容是否
等。
2.对字符串内容比较时,使用repnescasb,用标志位ZF不相等时跳转。
3.用cl控制比较次数。
实验六将键入的十六进制数转换为对应二进制数并回显
内容与要求:
编写程序,将键盘输入的四位十六进制数形式转换为对应的二进制数形式,并显示在屏幕上,(如:
键入AE60H---回显1010111001100000)。
若输入的不是0—F间的数字字符,则显示出错信息,并提示重新输入。
目的:
掌握接收键盘输入的方法,并掌握数制转换,将转换结果数据以ASCII码显示。
实验程序:
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
SPACEMACRO
MOVAH,02H
MOVDL,32
INT21H
ENDM
DATASSEGMENT
xdb?
xcdb'Pleaseinputahexnumber(0000~FFFF):
','$'
eordb'error!
',0dh,0ah,'$'
bufdb10,?
10dup(?
)
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,09h
leadx,xc
int21h
CRLF
movdx,offsetbuf
movah,0Ah
int21h
movdi,offsetbuf+2
CRLF
movcx,4
loop0:
moval,[di]
incdi
cmpal,30h
jsERROR
cmpal,40h
jsl1
cmpal,41h
jsERROR
cmpal,47h
jsl1
cmpal,61h
jsERROR
cmpal,67h
jnsERROR
l1:
looploop0
movcx,4
movdi,offsetbuf+2
loop1:
movx,00010000b
moval,[di]
incdi
cmpal,40h
jssub1
cmpal,47h
jsadd1
cmpal,67h
jsadd1
sub1:
subal,30h
jmps1
add1:
addal,09h
s1:
movdh,al
pushcx
movcx,4
comp:
moval,dh
shrx,1
andal,x
jnzonedisp
jzzerodisp
onedisp:
movah,02h
movdl,31h
int21h
jmptail1
zerodisp:
movah,02h
movdl,30h
int21h
tail1:
loopcomp
SPACE
popcx
looploop1
jmptail
ERROR:
leadx,eor
MOVAH,09H
INT21H
tail:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
实验结果:
实验总结:
1.输入的数字在寄存器中以二进制储存,但不能依次显示,用00001000序列与其进行比较,此序列每比较一次右移一位,这样可以把每一位数值提取出来。
2.判断输入值在0~9、a~f还是A~F范围内,需要让其分别与3ah,47h与67h进行比较。
实验七字符串键入和统计显示程序
内容与要求:
显示信息“输入字符串,回车或空格结束”,回车或空格后显示输入字符串的字符总个数,统计并显示其中的数字字符(1--9)个数和非数字字符个数。
目的:
掌握字符串信息的统计方法和数据的显示。
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
SPACEMACRO
MOVAH,02H
MOVDL,32
INT21H
ENDM
DATASSEGMENT
Ldb0
Ddb0
str1db'Pleaseinputastring:
','$'
digdb'Digital:
','$'
letdb'Letter:
','$'
bufdb100,?
100dup(?
)
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movah,09h
leadx,str1
int21h
CRLF
movdx,offsetbuf
movah,0Ah
int21h
movdi,offsetbuf+2
CRLF
check:
moval,[di]
incdi
cmpal,0dh
jzk
cmpal,3ah
jsadd1
jnsadd2
add1:
incD
jmps1
add2:
incL
s1:
jmpcheck
k:
movah,09h
leadx,dig
int21h
subah,ah
moval,D
movdl,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告 山东大学
![提示](https://static.bdocx.com/images/bang_tan.gif)