列出制作x,y和z的最短可能代码(计数指令数),定义如下,得到值1。 对于80 * 86机器
x: dw 0xff00
y: resb 1
z: resw 1
修改 我认为答案应该是这样的想法:
MOV DWORD [x+1], 0x01010001 ;
;检查:
mov eax , 0
mov al , byte[y]
print_d eax ; print 0
mov eax , 0
mov ax , word[x]
print_d eax ; print 256
mov eax , 0
mov ax , word[z]
print_d eax ; print 257
但是。这不好...... sholud print 1
答案 0 :(得分:1)
以下是您的x
,y
和z
所在的内存,列为字节(从较低地址(x
)到较高(z
) ):
xx XX yy zz ZZ
其中xx
是x
(0)的最低有效字节,XX
是x
(0xFF)的最高有效字节,同样对于{{1} }和y
。
如果我理解正确,z
和y
未初始化(z
暗示内存预留关键字的NASM语法。)
所以你想改变它:
res*
进入这个:
00 FF yy zz ZZ
右?
01 00 01 01 00
会将其转换为:
MOV DWORD [x+1], 0x01010001
所以,这不正确。并且您需要多于1条指令来更改5个字节,因为32位指令一次最多写入4个字节。
我说说明的最短指令是2 00 01 00 01 01
(NASM语法):
MOVs