汇编语言-实验5

一、实验目的

  1. 学会汇编语言程序的编译链接执行。
  2. 学会使用debug分步调试程序。
  3. 掌握代码段定义相关伪操作。
  4. 初步学会使用loop语句实现简单循环程序设计

二、实验要求

  1. 请用绿色或者蓝色字体作答。
  2. 源程序直接粘贴文字,源程序不要截图。

三、实验过程和结果
汇编语言-实验5_第1张图片

  • 1.将汇编语言编译环境(masm文件夹)复制粘贴至c或者d根目录下(这个步骤在前几个实验中就已经完成)。
  • 2.将上图汇编语言程序输入至记事本中(分号后面的是注释,可以不敲入),并且另存为“文件名.asm”的形式。文件命名请以字母或者下划线开头,不要使用中文。例如“myfile.asm”。请注意输入的时候符号是全角还是半角状态。
  • 3.进入dosbox,mount命令使用完成后,进入masm文件夹。
    汇编语言-实验5_第2张图片
  • 4.编译链接执行汇编语言程序。从键盘输入某个字母,如下图中输入了q

汇编语言-实验5_第3张图片
思考1:上图中qqa是怎么回事(不一定是q,你也可以输入其他字符),请猜测这个程序干了什么事情(参阅系统功能调用int 21h)。

  • 从键盘输入单个字符后,输出与键盘输入的字符相同的字符,然后输出大写的字母A(大写字母A的ASCII码对应的十六进制是41)比如输如q,输出qqA

5.Debug生成的exe程序,并逐条执行。注意使用t和p命令。直到程序运行结束,用q命令退出debug。
汇编语言-实验5_第4张图片在这里插入图片描述
思考2:本程序并没有使用cx寄存器,可是cx=0015h这是随机数还是有什么含意?可再次debug逐条执行,看看cx是不是不同。

  • CX中存放的是程序的长度,程序的机器码共有15个字节,

如下图所示:
汇编语言-实验5_第5张图片
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.重新编译链接执行新源程序,看看能不能得到你想要的结果(程序中适当的注释是不是很有用呢?)。

截图:
汇编语言-实验5_第6张图片

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可执行文件,查看初始状态,截图:
汇编语言-实验5_第7张图片
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截图)
汇编语言-实验5_第8张图片
结果:
汇编语言-实验5_第9张图片

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)
汇编语言-实验5_第10张图片

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

结果:
汇编语言-实验5_第11张图片
汇编语言-实验5_第12张图片

【好啦,老师这周就要讲解了,等老师讲完,错了的地方我就来更改,小编今天下午去吃了凉皮呢!虽然每次吃凉皮我都觉得量好少啊,可能是学校的量少吧,(但是我今天吃的是校外的啊,附近好像新开了一家什么“叉骨店”嗯,改天要去吃!)】

句子君:

“现在知道了,那些恣意飞扬的岁月里,我们每一次躁动不安的梦想,年轻气盛的誓言,猝不及防的暗恋,义无反顾地摔倒又爬起,其实都藏着一颗颗饱满的种子,它让我们有了脊椎,有了思想,有了人格,通晓了嘴巴和手真正的功能。在人生每一场来势凶猛的暗战中,保全了自己。”

你可能感兴趣的:(汇编语言实验题,汇编语言)