(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。