1

列出 SHORTEST POSSIBLE CODE(计算指令数),定义如下,得到值 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 

但。这不好...应该打印 1

4

1 回答 1

1

这是您的x,yz以字节形式列出的内存(从低地址 ( x) 到高地址 ( z)):

xx XX yy zz ZZ

其中xxx(0) 的最低有效字节,XXx(0xFF) 的最高有效字节,对于 和 也是y如此z

如果我理解正确,y并且z没有初始化(res*提示内存保留关键字的 NASM 语法)。

所以你想改变这个:

00 FF yy zz ZZ

进入这个:

01 00 01 01 00

对?

MOV DWORD [x+1], 0x01010001将其转换为:

00 01 00 01 01

所以,这是不正确的。并且您需要超过 1 条指令来更改 5 个字节,因为 32 位指令一次最多写入 4 个字节。

我想说指令数量最短的是2 MOVs(NASM语法):

mov dword [x], 0x01010001
mov byte [x+4], 0
于 2012-06-25T10:00:53.693 回答