汇编语言程序设计上机实验.docx
- 文档编号:17144145
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:15
- 大小:1.21MB
汇编语言程序设计上机实验.docx
《汇编语言程序设计上机实验.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计上机实验.docx(15页珍藏版)》请在冰点文库上搜索。
汇编语言程序设计上机实验
实验报告
汇编语言程序设计实验报告
系
班级
学号
姓名
指导教师陆勤
实验一汇编语言运行环境及方法、简单程序设计
1、程序说明
本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’
2、结合你的调试过程,整理其中用到的debug命令的使用方法和效果截图,并解释每一步骤的结论
用汇编程序masm对源文件汇编产生目标文件objC:
\masm5\sample
用连接程序link尝试执行文件exe
执行程序
使用debug程序调试
-g命令运行程序
-u命令显示程序,了解命令地址
-g0b将断点设置在程序的主要部分以前
-d0根据其中只是的ds寄存器内容查看数据段情况,显示地址0及地址0后面数据
e命令修改数据区的字符串
q命令退出debug
t命令逐条跟踪程序的执行
e命令修改一段字符串
3、调试中遇到的问题及解决方法
E命令修改数据区的一个字符,而不是一段字符串
实验二用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中的内容是什么。
2、调试说明第一部分先将程序编好后,在DOS环境下用masm程序生成obj文件,再用link程序生成exe文件,然后进入debug进行调试,用-t命令逐步运行程序,查看AX和BX中内容的变化。
如果发现AX和BX中的内容进行了交换,则说明程序运行成功。
进入debug程序,先用—u指令查看一下程序,结果如下:
用—t指令逐步调试,结果如下:
第二部分:
如前面第一章最终生成可执行程序。
也可进入进入debug进行编写,如下:
三:
程序清单和执行结果:
第一个程序清单:
DATASSEGMENT
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,3000H
MOVBX,5000H
PUSHAX
MOVAX,BX
POPBX
MOVAH,4CH
INT21HCODESENDS
ENDSTART
在debug中进行调试,逐步执行结果:
第二个程序清单:
DATASSEGMENT
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,0300h
MOVSI,0002h
MOVAH,4CH
INT21HCODESENDS
ENDSTART
在debug中进行调试,逐步执行结果:
实验三、存储器块清零和内存块移动
1、程序说明:
第一个程序是存储块清零。
程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。
第二个程序是内存块移动。
程序流程框图为:
首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。
2、调试说明:
第一个程序在进入debug后,先用-u指令查看一下程序,再将断点设置在指令Loopagain之后,通过指令-g加上指令Loopagain后的地址,将程序运行到Loopagain之后停止,然后再通过-d指令查看相关内存内容是否被清零。
第二个程序在进入到debug后,先用-u指令查看一下程序,再将断点设置在指令repmovsb之前,通过指令-g运行后,然后用-d指令查看一下内存块的相关内容,得到的结果如下:
三:
源程序代码和执行结果:
实验一:
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
实验二:
源代码:
地址块加一方法移动块的源程序:
DATASSEGMENT
sourcedb256dup(055h)
targetdb256dup(0aah)
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
DATAS,SS:
STACKSSTART:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
movsi,offsetsource
movdi,offsettarget
movcx,256
repmovsb
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
第二部分地址块减一方法移动块的源程序:
DATASSEGMENT
sourcedb256dup(055h)t
argetdb256dup(0aah)
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
DATAS,SS:
STACKSSTART:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
movsi,offsetsource
addsi,255
movdi,offsettarget
movcx,256
next:
moval,[si]
mov[di],al
decsi
incdi
loopnext
movah,0
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
执行结果:
实验四将键盘输入的小写字母用大写字母显示出来
1、程序说明
本程序用来将小写字母转变为大写,并在屏幕上显示出来。
先利用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,9int21h
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
运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 上机 实验