实验三

实验内容

1.练习1

1步,编写汇编源程序t1.asm,源程序代码如图1-1所示。

1

assume cs:code

2

code segment

3

mov ah, 2

4

mov dl, 3

5

add dl, 30h

6

int 21h

7

8

mov ah, 2

9

mov dl, 6

10

add dl, 30h

11

int 21h

12

13

mov ah, 4ch

14

int 21h

15

code ends

16

end

图1-1汇编源程序tl .asm源代码

2步,对源程序tl.asm进行汇编、连接、运行、调试

(1) 运行程序,观察程序输出结果是什么?

首先,编译

刚开始时,我的t1.asm文件和masm不在同一文件下并且没有输入完整路径,出现了以下错误,如图:

经过修正,将t1.asm放入masm的同一目录下,编译得到如下结果,如图:

由上图可知,这个源程序没有警告错误和必须要改正的错误;

然后,连接

这个程序有一个警告错误“没有栈段”,这里我们不理会这个错误;

最后,运行

这里可以看出,运行结果为36;

(2) 将line4和line9种寄存器dl的值分别修改为0~9中任何一个数宇,重新汇编— 连接—运行,观察结果的变化。

这里,我将line4的3改为5,将line9的6改为7,以简化的方式重新进行编译、连接、运行,得到如下图:

结果由原来的36变为57;

⑶用debug对生成的可执行文件t1.exe进行调试。

① 使用r命令查看。观察寄存器cx的值是多少;观察寄存器dscs的值是多 少,它们之间是否满足关系(cs) = (ds) + 10H?

 

 cx=0016h;cs=076Ah,ds=075Ah,满足cs=ds+10h;

② PSP (程序段前缀)的头两个字节是CD 20,用debug查看PSP的内容,验证是否 如此。

③ 使用u命令对t1.exe进行反汇编,观察反汇编得到的源代码。

④ 使用t命令和p命令(遇到int命令时,用p命令)单步调试,观察结果。

2.练习2

1步,编写汇编源程序t2.asm,源程序代码如图1-2所示。

1

assume cs:code

2

code segment

3

mov ax, 0b800h

4

mov ds, ax

5

6

mov bx, 0

7

mov [bx], 0433h

8

9

add bx, 2

10

mov [bx], 0436h

11

12

mov ax, 4c00h

13

int 21h

14

code ends

15

end

图1-2汇编源程序t2.asm源代码

*:

line6-7相当于 mov [0], 0433h line9-10相当于 mov [2], 0436h

至于为什么这样使用两条指令,而不直接简化写成上面的形式,有两个原因。其中_个 是方便以后循环;另一个原因,留待第5章再解释说明。暂时,先这样使用。

2步,对源程序t2.asm进行汇编、连接、运行、调试

(1) 对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe观察程序运行 结果,验证是否在屏幕左上方出现红色的数值36。

清屏后,得到如下图:

注*)经测试,有些平台在dosbox下运行这个程序时有些问题,如果屏幕左上方没有 输出结果,请运行程序t2.exe前,先输入cls命令清空一下屏幕,然后再执行t2.exe

(2) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h—0432h, linelO的0436h—0439h,然后重新汇编、连接,得到可执行文件t2.exe。使用cls命令清 屏后,再次观察程序运行结果。

代码如下:

运行结果:

(3) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h—0333h, line10的0436h—0336h,然后重新汇编、连接,得到可执行文件t2.exe。使用cls命令清 屏后,再次观察程序运行结果。

代码如下:

运行结果:

总结与体会

     这次的实验让我进一步的了解汇编源程序如何编写、汇编、连接、运行、调试,也顺利地解决了实验中出现的一些小问题,很期待接下来的学习。

原文地址:https://www.cnblogs.com/xinqimisa/p/9977622.html