汇编.docx
- 文档编号:3388081
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:26
- 大小:842.53KB
汇编.docx
《汇编.docx》由会员分享,可在线阅读,更多相关《汇编.docx(26页珍藏版)》请在冰豆网上搜索。
汇编
《汇编语言程序设计》
实验报告
姓名:
学号:
班级:
学院:
2013-11-11
实验一汇编运行环境及方法、简单程序设计
一、程序说明
本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
二、调试说明
我们可以通过这一简单的比较程序,熟悉汇编语言上机的过程。
首先在EDIT中编写好程序代码并以ASM形式保存,然后在汇编程序MASM中汇编代码,生成OBI文件,再在连接程序LINK中连接,生成可执行文件EXE,然后直接执行程序即可,至此基本的汇编语言程序操作完成。
其中常用到的指令有:
用—g命令来运行程序,用—u命令来显示程序,用—d查看数据段情况,用—e或—f命令来修改需要改正的部分,用—t指令来逐步执行程序,用—r指令来查看寄存器和修改器的值,用—q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
三.源代码如下
;PROGRAMTITLEGOESHERE--Comparestring
;
datareasegment;definedatasegment
string1db'Movethecursorbackward.'
string2db'Movethecursorbackward.'
;
mess1db'Math.'13.10'$'
mess2db'Nomatch!
',13,10,'$'
;
datareaends
;
prognamsegment;definecodesegment
;
mainprocfar
assumecs:
prognam,ds:
datarea,es:
datarea
start:
;startingexecutionaddress
;setupstackforreturn
pushds;saveolddatasegment
subax,ax;putzeroinAX
pushax;saveitonstack
;setDSregistertocurrentdatasegment
movax,datarea;datareasegmentaddr
movds,ax;intoDSregister
moves,ax;intoESregister
;MAINPARTOFPROGRAMGOESHERE
leasi,string1
leadi,string2
cld
movcx,25
repzcmpsb
jzmatch
leadx,mess2
jmpshortdisp
match:
leadx,mess1
disp:
movah,09
int21h
ret;returntoDOS
mainendp;endofmainpartofprogram
prognamends;endofcodesegment
endstart;endassembly
四.执行结果如下:
实验二用DEBUG编程:
使用堆栈段将
AX和BX的内容进行交换等
一:
程序说明:
1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
二:
调试说明
第一部分先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试,用-t命令逐步运行程序,查看AX和BX中内容的变化。
如果发现AX和BX中的内容进行了交换,则说明程序运行成功。
三:
源代码
程序1的代码如下:
STSGSEGMENTSTACK'S'
DW1000DUP(?
)
STSGENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,SS:
STSG
;MOVSP,2000
MOVAX,3000H
MOVBX,5000H
PUSHAX
PUSHBX
POPAX
POPBX
MOVAX,4C00H
INT21H
MAINENDP
CODEENDS
ENDMAIN
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,0300h
MOVSI,0002h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
四.执行结果
程序1的结果如下
程序2的结果如下:
实验三、存储器块清零和内存块移动
一·程序说明:
第一个程序是存储块清零。
程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。
第二个程序是内存块移动。
程序流程框图为:
首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。
二:
调试说明:
第一个程序在进入debug后,先用-u指令查看一下程序,再将断点设置在指令Loopagain之后,通过指令-g加上指令Loopagain后的地址,将程序运行到Loopagain之后停止,然后再通过-d指令查看相关内存内容是否被清零。
第二个程序在进入到debug后,先用-u指令查看一下程序,再将断点设置在指令repmovsb之前,通过指令-g运行后,然后用-d指令查看一下内存块的相关内容。
三.源代码
程序1源代码
datasegment
blockdb256dup(55h)
dataends
codesegment
assumecs:
code,ds:
data
startprocnear
movax,data
movds,ax
movbx,offsetblock
movcx,256
again:
mov[bx],byteptr0
incbx
loopagain
jmp$
codeends
endstart
程序2源码:
DATASEGMENT
sourcedb256dup(055h)
targetdb256dup(0aah)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
STARTPROCNEAR
MOVAX,DATA
MOVDS,AX
MOVES,AX
movsi,offsetsource
movdi,offsettarget
movcx,256
repmovsb
JMP$
CODEENDS
ENDSTART
四.运算结果
程序1结果如下:
程序2结果如下:
实验四将键盘输入的小写字母用大写字母显示出来
一、程序说明
本程序用来将小写字母转变为大写,并在屏幕上显示出来。
先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。
若输入的是小写字母,则通过将其减去20h,从而变为大写字母。
在通过DOS功能调用INT21H的2号功能显示出来。
若输入的是Enter键,则结束程序。
二、调试说明
调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。
调试时可通过-t指令来逐步运行程序,观察相关内容变化,来调试程序。
三.源代码
DATASSEGMENT
string1db'thisnotisazimu!
Pleaseinputbetweenatoz!
',0ah,0dh,'$'
string2db'$'
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
L0:
movah,1
int21h
cmpal,0dh
jzexit
cmpal,'a'
jaeL1
jbL3
L1:
cmpal,'z'
jnaL2
jaL3
L2:
subal,20h
movcl,al
leadx,string2
movah,9
int21h
movdl,0
movdl,cl
movah,2
int21h
movdl,0ah
movah,2
int21h
movdl,0dh
movah,2
int21h
jmpL0
L3:
leadx,string1
movah,9
int21h
jmpL0
exit:
MOVAH,4CH
int21H
codesends
endstart
四.程序结果:
实验五:
循环程序设计
一、程序说明
第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:
若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’。
二、调试说明
调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。
调试时可通过-t指令来逐步运行程序,观察程序是如何进行循环的。
修改AL中的内容,可以通过-r指令来实现,如修改ax中的内容,通过指令-rax来实现。
三.程序源代码
程序1源代码:
CODESSEGMENT
ASSUMECS:
CODES
START:
moval,3eh
pushax
movdl,al
movcl,4
shrdl,cl
cmpdl,9
jbenext1
adddl,7
next1:
adddl,30h
movah,2
int21h
popax
movdl,al
anddl,0fh
cmpdl,9
jbenext2
adddl,7
next2:
adddl,30h
movah,2
int21h
movah,4ch
int21h
CODESENDS
ENDSTART
程序2源代码:
CODESSEGMENT
ASSUMECS:
CODES
START:
movah,1
int21h
cmpal,0dh
jzdone
cmpal,'0'
jbnext
cmpal,'9'
jacharup
int21h
movdl,al
movah,2
int21h
jmpSTART
charup:
cmpal,41h
jbnext
cmpal,5ah
jachrdn
dispc:
movdl,'c'
movah,2
int21h
next:
jmpSTART
chrdn:
cmpal,61h
jbnext
cmpal,7ah
janext
jmpdispc
done:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
四:
结果
程序1结果:
程序2结果:
实验六:
分支程序设计
一·程序说明
第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:
若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’
三、调试说明
调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。
调试时可通过-t指令来逐步运行程序,观察程序是如何进行分支的。
修改AL中的内容,可以通过-r指令来实现,如修改ax中的内容,通过指令-rax来实现。
三.程序源代码
程序1源代码:
CODESSEGMENT
ASSUMECS:
CODES
START:
moval,3eh
pushax
movdl,al
movcl,4
shrdl,cl
cmpdl,9
jbenext1
adddl,7
next1:
adddl,30h
movah,2
int21h
popax
movdl,al
anddl,0fh
cmpdl,9
jbenext2
adddl,7
next2:
adddl,30h
movah,2
int21h
movah,4ch
int21h
CODESENDS
ENDSTART
程序2源代码:
CODESSEGMENT
ASSUMECS:
CODES
START:
movah,1
int21h
cmpal,0dh
jzdone
cmpal,'0'
jbnext
cmpal,'9'
jacharup
int21h
movdl,al
movah,2
jmpSTART
charup:
cmpal,41h
jbnext
cmpal,5ah
jachrdn
dispc:
movdl,'c'
movah,2
int21h
next:
jmpSTART
chrdn:
cmpal,61h
jbnext
jmpdispc
done:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
四.程序结果
程序1结果:
程序2结果:
实验七统计不同成绩段学生的人数
一、程序说明
本程序用来统计在不同分数段的学生人数并显示出来。
有三个子程序,分别用来统计各分数段的学生人数、输出相关内容、换行回车。
子程序一中,先将每个学生的分数从100、90、80、70、60逐个比较,在哪一分数段,则将其个数加一。
直到所有分数都完成比较。
子程序二则利用DOS功能调用INT21H的9号功能在显示器上显示一个字符串和2号功能在显示器上显示一个字符来实现输出相关内容。
子程序三通过DOS功能调用INT21H的2号功能在显示器上显示一个字符实现换行和回车的。
二.调试说明
调试程序可以在debug中进行,基本步骤和前面的实验大致相同,在软件Masm集成实验环境2008.4中编辑程序,则可以直接点击程序上的调试按钮,即可进行调试。
调试时可通过-t指令来逐步运行程序,观察相关内容变化,来调试程序。
三.源代码
DATASSEGMENT
arraydb50,69,84,94,73,89,99,58,100,80,100,65,89,91,77
string1db'Thenumberof100:
$'
string2db'Thenumberof90-99:
$'
string3db'Thenumberof80-89:
$'
string4db'Thenumberof70-79:
$'
string5db'Thenumberof60-69:
$'
string6db'thenumberoflow60:
$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
moval,0
movbx,0
movcx,0
movdh,0
movdl,11
callcount
calloutput
MOVAH,4CH
INT21H
countprocnear;
movsi,0
next:
cmparray[si],100
jzL1
jlnext1
next1:
cmparray[si],90
jaeL2
jlnext2
next2:
cmparray[si],80
jaeL3
jlnext3
next3:
cmparray[si],70
jaeL4
jlnext4
next4:
cmparray[si],60
jaeL5
incdh
incsi
decdl
jnznext
jmpexit
L1:
incal
incsi
decdl
jnznext
jmpexit
L2:
incbh
incsi
decdl
jnznext
jmpexit
L3:
incbl
incsi
decdl
jnznext
jmpexit
L4:
incch
incsi
decdl
jnznext
jmpexit
L5:
inccl
incsi
decdl
jnznext
exit:
ret
countendp
outputprocnear;
movah,0
pushdx
pushcx
pushbx
pushax
leadx,string1;
movah,9
int21H
popbx
movdl,bl
adddl,30h
movah,2
int21H
callenter
leadx,string2;
movah,9
int21H
popbx
movdl,bh
adddl,30h
movah,2
int21H
callenter
leadx,string3;
movah,9
int21H
movdl,bl
adddl,30h
movah,2
int21H
callenter
leadx,string4;
movah,9
int21H
popbx
movdl,bh
adddl,30h
movah,2
int21H
callenter
leadx,string5;
movah,9
int21H
movdl,bl
adddl,30h
movah,2
int21H
callenter
leadx,string6;
movah,9
int21H
popbx
movdl,bh
adddl,30h
movah,2
int21H
callenter
ret
outputendp
enterprocnear;
movdl,0ah
movah,02h
int21h
movdl,0dh
movah,02h
int21h
ret
enterendp
CODESENDS
ENDSTART
四.程序结果:
实验心得与体会:
汇编语言是基于计算机硬件的操作,所以具有执行速度快,语言简洁等优点,刚开始做实验时,不怎么明白具体是怎么执行的,只是按照书上的顺序执行,随着实验的深入,渐渐了解汇编语言的特点的,。
也让我明白汇编语言和高级语言之间的不同,也更加了解计算机执行程序具体的过程,后面的程序是面向应用的,这样就对编程有了更高的要求,要求学会分解问题,然后再用子程序解决小问题,最后再解决总的问题。
通过这次的实验,让我对计算机的硬件工作系统有了更加细致的了解,也希望以后能在这方面加强自己,争取能有一定的专业知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编
![提示](https://static.bdocx.com/images/bang_tan.gif)