Assembly 汇编指令代码
列出使x、y和z(定义如下)成为可能的最短代码(计算指令数),得到值1。 对于80*86的机器Assembly 汇编指令代码,assembly,x86,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 25
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这是内存,您的
x
、y
和z
以字节的形式列出(从较低的地址(x
)到较高的地址(z
):
其中,xx
是x
(0)的最低有效字节,xx
是x
(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个字节
就指令数量而言,我认为最短的指令是2mov
(NASM语法):
这是您的
x
、y
和z
以字节形式列出的内存(从较低的地址(x
)到较高的地址(z
):
其中,xx
是x
(0)的最低有效字节,xx
是x
(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个字节
就指令数量而言,我认为最短的指令是2mov
(NASM语法):
现在还不清楚被问到了什么。那代码必须初始化x,y和z吗?“获取值1”是什么意思?这是做什么用的?如果是x86,什么模式?16位?32位?64位?如果是16位,可以使用32位指令吗?我编辑它。“获取值1”表示在指令x=y=z=1之后,不清楚询问的是什么。那代码必须初始化x,y和z吗?“获取值1”是什么意思?这是做什么用的?如果是x86,什么模式?16位?32位?64位?如果是16位,可以使用32位指令吗?我编辑它。“获取值1”意味着在指令x=y=z=1之后执行hank u!!摩托罗拉68000怎么样?是真的吗:MOVEQ.L#0x00010100,x MOVEQ.B#0x01,x+4我对摩托罗拉不太熟悉。您最初询问了x86。例如(假设使用“类似NASM”的语法),
x:dw 0
表示x
位于初始化的数据部分(例如.data
);和y
和z
使用resb
/resw
,这意味着它们位于未初始化的数据部分(例如.bss
)。我没有看到任何东西可以保证x
的地址与其他变量的地址接近。这种差异可能是由于简单的打字错误或其他原因造成的。@Brendan NASM不太关心章节。除非您明确告诉它更改当前节,否则所有内容都将进入同一个当前节,不管它是代码、初始化数据还是未初始化数据。@AlexeyFrunze:请尝试在初始化数据节中使用resw
,然后在未初始化数据节中尝试使用dw
;然后再次提醒我NASM是多么的不关心章节。谢谢!!摩托罗拉68000怎么样?是真的吗:MOVEQ.L#0x00010100,x MOVEQ.B#0x01,x+4我对摩托罗拉不太熟悉。您最初询问了x86。例如(假设使用“类似NASM”的语法),x:dw 0
表示x
位于初始化的数据部分(例如.data
);和y
和z
使用resb
/resw
,这意味着它们位于未初始化的数据部分(例如.bss
)。我没有看到任何东西可以保证x
的地址与其他变量的地址接近。这种差异可能是由于简单的打字错误或其他原因造成的。@Brendan NASM不太关心章节。除非您明确告诉它更改当前节,否则所有内容都将进入同一个当前节,不管它是代码、初始化数据还是未初始化数据。@AlexeyFrunze:请尝试在初始化数据节中使用resw
,然后在未初始化数据节中尝试使用dw
;然后再次提醒我NASM是多么不关心章节。