【发布时间】:2012-09-13 19:50:39
【问题描述】:
我正在尝试手动完成Art of Assembly 中的 3.6.7 自我修改代码练习部分,并且不禁想到我在高/低顺序上做错了什么字节交错(我知道作者是如何为他想象的 x86 变体做到这一点的)或者文本中有错误。
也就是说,文中的程序是
sub ax, ax
mov [100], ax
a: mov ax, [100]
cmp ax, 0
je b
halt
b: mov ax, 00c6
mov [100], ax
mov ax, 0710
mov [102], ax
mov ax, a6a0
mov [104], ax
mov ax, 1000
mov [106], ax
mov ax, 8007
mov [108], ax
mov ax, 00e6
mov [10a], ax
mov ax, 0e10
mov [10c], ax
mov ax, 4
mov [10e], ax
jmp 100
据称“将以下代码写入位置 100,然后执行它:”
mov ax, [1000]
put
add ax, ax
add ax, [1000]
put
sub ax, ax
mov [1000], ax
jmp 0004
但是,由于多种原因,这对我来说没有意义(首先,它将 00 写入字节 100,这是一条应该跳转到的非法指令;其次,在地址似乎被切换了,等等)另一方面,如果我只是在 b 循环中的mov ax, c 语句中交换高/低位字节,那么这似乎是正确的。所以:
我错了吗(如果是,为什么?)还是应该交换 b 循环常量中的高位/低位字节?
【问题讨论】: