一、实验目的
二、实验要求
思考1:上图中qqa是怎么回事(不一定是q,你也可以输入其他字符),请猜测这个程序干了什么事情(参阅系统功能调用int 21h)。
5.Debug生成的exe程序,并逐条执行。注意使用t和p命令。直到程序运行结束,用q命令退出debug。
思考2:本程序并没有使用cx寄存器,可是cx=0015h这是随机数还是有什么含意?可再次debug逐条执行,看看cx是不是不同。
如下图所示:
6.尝试修改源程序,完成你想要的功能,并另存为另外的名字(能用中文名吗)。
新源程序粘贴如下(不要截图):
code segment
;求解2*2*2
assume cs:code
start:
mov ax,2
add ax,ax
add ax,ax
mov ax,4c00h
int 21h
code ends
end start
7.重新编译链接执行新源程序,看看能不能得到你想要的结果(程序中适当的注释是不是很有用呢?)。
8.debug你的新程序生成的可执行文件,并逐条执行。注意查看刚刚加载时cx的值。
思考3
:初始状态cx寄存器的值跟之前的程序一样吗?
9.请自己尝试编写求2的3次方的汇编程序,运行结果保存在AX寄存器中。编译、链接、执行后,debug所生成的可执行文件,再用u命令查看代码,用t命令单步执行后查看结果(如果遇到int 21h 请用p命令执行)。填写代码段的范围。
源程序:
code segment
;求解2*2*2
assume cs:code
start:
mov ax,2
add ax,ax
add ax,ax
mov ax,4c00h
int 21h
code ends
end start
debug可执行文件,查看初始状态,截图:
psp起止地址:
DS的值为075A,则PSP的地址为075A:0000
代码段地址范围:
076A:0000 076A 000C
10. 编写程序,计算2的10次方,结果存放在任意通用寄存器中。你的程序可以通过修改数字10,计算2的20次方吗,为什么?
源程序粘贴如下(不要截图):
code segment
assume cs:code
start:
mov ax,2
mov cx,9
s: add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end start
debug生成的可执行文件,并且t命令单步执行程序,观察loop指令的执行过程(最后几个t截图)
结果:
11. 编写程序,计算15*69,结果存放在任意通用寄存器中。(debug的t命令是不是会敲的手抽筋?请试试g +偏移地址的形式或者p命令执行loop指令)
源程序(不要截图):
code segment
assume cs:code
start:
mov ax,0
mov cx,69
s: add ax,15
loop s
mov ax,4c00h
int 21h
code ends
end start
12.编写程序,计算2+4+6…+100,结果存放在内存中。
源程序(不要截图):
code segment
assume cs:code
start:
mov ax,0
mov bx,0
mov cx,50
mov dx,2
s: add ax,dx
add dx,2
add bx,ax
loop s
mov ax,4c00h
int 21h
code ends
end start
【好啦,老师这周就要讲解了,等老师讲完,错了的地方我就来更改,小编今天下午去吃了凉皮呢!虽然每次吃凉皮我都觉得量好少啊,可能是学校的量少吧,(但是我今天吃的是校外的啊,附近好像新开了一家什么“叉骨店”嗯,改天要去吃!)】
句子君:
“现在知道了,那些恣意飞扬的岁月里,我们每一次躁动不安的梦想,年轻气盛的誓言,猝不及防的暗恋,义无反顾地摔倒又爬起,其实都藏着一颗颗饱满的种子,它让我们有了脊椎,有了思想,有了人格,通晓了嘴巴和手真正的功能。在人生每一场来势凶猛的暗战中,保全了自己。”