• 实验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这个命令前面两位

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

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

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

  • 相关阅读:
    JS组件系列——使用HTML标签的data属性初始化JS组件
    JS组件系列——分享自己封装的Bootstrap树形组件:jqTree
    JS组件系列——封装自己的JS组件,你也可以
    JS组件系列——Bootstrap 树控件使用经验分享
    JS组件系列——Bootstrap Select2组件使用小结
    面试干货——年底干货大放送,你准备好了吗?
    JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享(你值得拥有)
    JS组件系列——Form表单验证神器: BootstrapValidator
    HTTPS的加密过程
    Http知识总结
  • 原文地址:https://www.cnblogs.com/guapihenhaoc/p/9979354.html
Copyright © 2020-2023  润新知