实验3

1.1

先利用指令打开记事本==(这样可能比较有b格?哈哈)

然后把要打的汇编代码输入到记事本中:

将这个文件名改为t1.asm,存于masm环境文件中(这样后面的操作就很简便)

之后打开dosbox开始操作:

一步   老操作不多说;

先type编译一下,与原码相同;(记得用type加文件全名)

masm用来查错,0 errors!来解释一下这些东西哈:

浅蓝色的那行表示你要对它操作的文件名称

橙色是表示你要输出的目标文件名

深蓝色表示是否要生成产生中间结果的文件

绿色表示输入交叉引用文件的名称

(一般的话只要输入你要操作的文件名,其他是不需要的,enter就完事了)

link链接将t1.obj链接成可执行文件t1.exe

当然masm和link也可以简化操作就是在他们之后加文件名,在文件名后加分号就行了,

可以自动忽略中间文件的生成。

最后一步:执行t1,输入文件名(不要后缀)

输入结果是36

1.2

前面改成了dl,4后面改成了dl,5

重新masm ,link输出是45;由此观之,输出的就是dl的值==这两次小分段代码就是

对dl的赋值及输出。

1.3

进入t1.exe的debug环境

用r命令查看cx的值是0016,为什么是0016呢?了解到因为代码占用的字节是16。

ds=075A,cs=076A,相差10H,没毛病。

1.3.2

查看psp的内容即查看ds:ip的地址:

用d命令查看16位,前两位就CD 20。

1.3.3

                                          有16行机器码==

1.3.4

附一张代码图,忘记把代码改回去了,索性就算到底了吧

使用t指令执行一个指令,在这里p指令与它的区别在于执行int的时候会把整个int执行完毕,

不是跳转到这个中断程序去跟踪执行。

第一次到int时,用p指令执行:

输出了dl=4,并且ax的值从02FF变成了0234,这正是dl=34的值,我怀疑int操作将

al,dl了,不知道与int 这个21的值有没有关系。

第二次到int时,用p指令执行:

输出了dl=5,并且ax同上变化为0235.

最后一次,p指令跟进,系统执行完毕,正常结束。

2.1.1

操作和上面相同

操作失误:被盖住了==,注释后面才注意到

经改正出现了红色的36

2.1.2

修改后:

变成了红色的29了!!!

2.1.3

经过修改:

出现了蓝色的36!!!

我自己还有疑问:尝试改变了十位数试一试:

附上t指令单步执行的图:

我有个思考:地址处于显存地址A0000~BFFFF之间:而且【bx】,0433h这个命令前面两位

是用来改变输出颜色的,而后两位是用来改变其输出为什么值的。

小结:通过这次实验,我想了蛮多的,但是还是不能很好的解答疑问,但也有很多收获吧,对自己

的汇编还是很有信心的,毕竟写了第一个汇编程序嘛,哈哈。

原文地址:https://www.cnblogs.com/guapihenhaoc/p/9979354.html