• 汇编实验报告四


    (1)
    源代码:

    Debug调试:

    运行:

    修改后:

    (2)
    源代码:

    Debug调试:


    g 命令和 d 命令,确实将0~63传送此段内存区域

    (3)
    源代码:

    g 命令和d 命令,结果是对的(内存中的和上面反汇编出来的一样)







    (t命令调试 只截图了部分,太多了……)

    分析:
    1.每一条指令都有对应的编码来实现,他们在内存中存入的是这条指令对应的编码。
    正是因为编码不同,所以导致了每一条指令对应的IP不同,我以前对IP变化的问题,在这里也可以体现。比如 mov ax, 0123h 在内存中是 B8 23 01 , 而 mov ax, bx 对应的是89 D8, 所以,复制指令,也就是复制指令对应的编码。
    2.指令是在CS:IP中的,而我们处理的往往是DS以及他对应的偏移地址,这里也要注意, 这题就需要CS,因为正好要复制指令,我们需要的是CS也就是指令所在的内存位置,将CS给AX 从而给DS(不能直接赋值DS)以便于后面的处理,所以 第一处填CS。
    3. 和第一点结合来看,第二处需要的是循环次数,而循环体中每次只存入一个字节,所以要计算所有指令的字节数,如果不会计算,可以先随便填一个在反汇编,通过反汇编观察指令对应的字节数即可。两种我都试过,结果都是23.。所以第二处填23。

  • 相关阅读:
    Assets Pipeline
    how to execute-shell-commands by ruby
    DFS---迷宫问题
    病毒感染监测
    RE数组开多大?
    C++如何输入含空格的字符串
    后缀算术表达式
    中缀表达式转化为后缀表达式
    基于两端操作的循环队列的实现---怎么判断队满??
    循环队列--忘记分配空间和如何用tag判断队空队满
  • 原文地址:https://www.cnblogs.com/zxy666/p/10123587.html
Copyright © 2020-2023  润新知