汇编实验.docx
《汇编实验.docx》由会员分享,可在线阅读,更多相关《汇编实验.docx(22页珍藏版)》请在冰豆网上搜索。
汇编实验
实验1调试程序DEBUG的使用
一、DEBUG命令的使用
2、用DEBUG调试程序的学习
1.装载HELLO.EXE
2.利用R、U、D、T、G命令调试程序
思考题
不可以随意在DEBUG提示符“-”后不带参数发出命令G;
从CS:
IP指向的指令开始执行程序,直到程序结束或遇到INT 3
从CS:
IP指向的指令开始执行程序,直到遇到断点。
实验2指令系统及程序格式
1.传送指令
用A命令在内存100H处键入下列内容;用U命令检查键入的程序,特别注意左边的机器码
用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2.加减法指令:
思考题:
这次运行还是用T调试行不行?
如何单步运行上述小程序?
用R命令检查一下IP的内容。
注意T命令与IP的关系。
可行;T=2009;
3.带进位加减法:
用A命令在内存300H处键入下列内容,并用U命令,T命令检查
上面这段程序若改用16位操作指令达到同样结果,怎么改?
试修改并运行之
4.BCD码加减法
5、内存操作数及各种寻址方式使用:
6、DEBUG环境下汇编运行程序方法
思考题:
可否随意在DEBUG提示符“-”后不带参数发出命令G?
什么情况下使用命令G时,可不用“=”给出执行的首地址?
不可以随意在DEBUG提示符“-”后不带参数发出命令G;
从CS:
IP指向的指令开始执行程序,直到程序结束或遇到INT 3
从CS:
IP指向的指令开始执行程序,直到遇到断点。
实验3选择结构程序设计
1.编写实验内容要求的两个程序;
(1) 显示AL中两位十六进制数程序:
datasegment
dataends
stacksegment
db256dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movax,stack
movss,ax
moval,0c5h
calldisp_al
moval,065h
calldisp_al
movah,04ch
int21h
;disp_al子程序将寄存器AL中的数值以十六进制显示出来
disp_al:
movdh,al
movbx,2;bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次
movcl,4;首先显示高4位,在下次循环进再显示低4位
shral,cl
again:
andal,0fh
cmpal,9
jahex
addal,'0';如果小于9,加上字符'0'将数字转换字符
jmpdisp
hex:
subal,10;如果大于9,先减去10,再加上字符'A',就可以将数字转换成相应的'A'~'F'
addal,'A'
disp:
;利用中断显示字符
movdl,al
movah,02h
int21h
moval,dh
decbx
testbx,bx
jnzagain
ret
codeends
endstart
(2)显示键入字符程序
datasegment
DB0
dataends
codesegment
assumecs:
code,ds:
data
mainprocfar
pushds
subax,ax
pushax
movax,data
movds,ax
next:
movah,07
int21h
cmpal,0dh
jEend_d
cmpal,'0'
JGEDY0;>=0
JMPNEXT;<'0'...30H
DY0:
CMPAL,'9'
JLEIS_09
CMPAL,'A'
JGEDY_A;DAYUA
JMPNEXT;<'A'...41H
DY_A:
CMPAL,'Z'
JLEIS_AZ
CMPAL,'a'
JGEDY_xA;DAYUxA
JMPNEXT;<'a'...61H
DY_xA:
CMPAL,'z'
JLEIS_AZ
JMPNEXT
;......................
IS_AZ:
MOVAH,02
MOVDL,'c'
INT21H
JMPNEXT
IS_09:
MOVAH,2
MOVDL,AL
INT21H
JMPNEXT
end_d:
ret
mainendp
codeends
endmain
2.对其进行汇编及连接,产生.EXE文件
3.对.EXE文件进行调试运
DISPHEX.EXE
DISPKEY.EXE
对DSPKEY.EXE键入不同的字符,分别进行调试
在DOS的模拟环境下运行这两个.EXE文件
实验4循环结构程序设计
1.编写实验内容要求的程序;
编写一循环程序,测量一字符串长度,并用16进制数显示之。
JMPSTART
DB'Thisisaprogramtomeasurethelengthofastring。
'
DB0D,0A
DB'thelengthofthestringis:
$'
START:
MOVAH,9
MOVDX,102
INT21
MOVBX,101
MOVAL,'$'
MOVDH,FF
LOP:
INCBX
INCDH
CMPAL,[BX]
JNZLOP
MOVCH,2
MOVCL,4
LOP1:
ROLDH,CL
MOVDL,DH
ANDDL,0F
ADDDL,30
CMPDL,3A
JCJ
ADDDL,7
J:
MOVAH,2
INT21
DECCH
JNZLOP1
INT20