一、实验目的
- 学会汇编语言程序的编译链接执行。
- 学会使用debug分步调试程序。
- 掌握代码段定义相关伪操作。
- 初步学会使用loop语句实现简单循环程序设计
二、实验要求
- 请用绿色或者蓝色字体作答。
- 源程序直接粘贴文字,源程序不要截图。
三、实验过程和结果
- 1.将汇编语言编译环境(masm文件夹)复制粘贴至c或者d根目录下(这个步骤在前几个实验中就已经完成)。
- 2.将上图汇编语言程序输入至记事本中(分号后面的是注释,可以不敲入),并且另存为“文件名.asm”的形式。文件命名请以字母或者下划线开头,不要使用中文。例如“myfile.asm”。请注意输入的时候符号是全角还是半角状态。
- 3.进入dosbox,mount命令使用完成后,进入masm文件夹。
- 4.编译链接执行汇编语言程序。从键盘输入某个字母,如下图中输入了q
思考1:上图中qqa是怎么回事(不一定是q,你也可以输入其他字符),请猜测这个程序干了什么事情(参阅系统功能调用int 21h)。
- 从键盘输入单个字符后,输出与键盘输入的字符相同的字符,然后输出大写的字母A(大写字母A的ASCII码对应的十六进制是41)比如输如q,输出qqA
5.Debug生成的exe程序,并逐条执行。注意使用t和p命令。直到程序运行结束,用q命令退出debug。
思考2:本程序并没有使用cx寄存器,可是cx=0015h这是随机数还是有什么含意?可再次debug逐条执行,看看cx是不是不同。
- CX中存放的是程序的长度,程序的机器码共有15个字节,
如下图所示:
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寄存器的值跟之前的程序一样吗?
- 不一样,因为修改后的源程序的代码长度变了,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次方吗,为什么?
- 不可以,试过了,好像放不下,2的20次方是1048576,转换成16进制是10 0000,然而,AX只显示4个0
源程序粘贴如下(不要截图):
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
结果:AX=040B(十进制1035)
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
结果:
【好啦,老师这周就要讲解了,等老师讲完,错了的地方我就来更改,小编今天下午去吃了凉皮呢!虽然每次吃凉皮我都觉得量好少啊,可能是学校的量少吧,(但是我今天吃的是校外的啊,附近好像新开了一家什么“叉骨店”嗯,改天要去吃!)】
句子君:
“现在知道了,那些恣意飞扬的岁月里,我们每一次躁动不安的梦想,年轻气盛的誓言,猝不及防的暗恋,义无反顾地摔倒又爬起,其实都藏着一颗颗饱满的种子,它让我们有了脊椎,有了思想,有了人格,通晓了嘴巴和手真正的功能。在人生每一场来势凶猛的暗战中,保全了自己。”