汇编 - 最短的指令代码

时间:2012-06-25 08:13:16

标签: assembly x86

列出制作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

1 个答案:

答案 0 :(得分:1)

以下是您的xyz所在的内存,列为字节(从较低地址(x)到较高(z) ):

xx XX yy zz ZZ

其中xxx(0)的最低有效字节,XXx(0xFF)的最高有效字节,同样对于{{1} }和y

如果我理解正确,zy未初始化(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