这是一个简单的问题,但我是汇编语言的新手。有人可以回答吗?感谢。
A BYTE 0Ah,20,10,40
B WORD 30,40,50,0Bh
D DWORD A00,200,300,400,500,600
a)将A[2]
移入eax寄存器
b)什么是[A+2]
?
c)什么是[B+2]
?
d)什么是[D+4]
?
e)什么是[D-10]
?
数目:
a) mov eax, A[2]
b) [A+2] is third array position that is 10.
c) [B+2] is zero
d) [D+4] is 200
e) [D-10] is byte 40
答案 0 :(得分:1)
a) A[2]
只是一个信息字节,因此,您应该将其移动到一个字节长的寄存器中。您可以将其移动到EAX
寄存器的低位字节,写入MOV AL, [A+2]
。(*)
检查EAX
注册配置here。
那么,你的代码会做什么呢?好吧,它意味着从[A+2]
寄存器中的EAX
开始移动4个字节,因为4个字节是EAX
的大小。
c)这取决于你记忆的Endianess。在大多数PC中,您的答案是错误的,因为数据存储为30 00, 40 00, ....
,即最重要的位在右侧(这种存储数据的方式是所谓的{{1}如果您的CPU架构确实实现了big-endian方式,那么你就是对的。
e)如果您按照发布的确切方式声明数据段,那么您将拥有little-endian
。原因是,[D-10] = [A+2] = 10
中的数据填充了8字节的内存,B
是第9个字节,[A+3]
填充了第10个字节,向后移动。
(*)请注意,正如Michael在下面的评论中所述,您可以使用[A+2]
或movsx
说明。
movzx
会将MOVSX EAX, [A+2]
字节移至[A+2]
双字,扩展数字的符号。
EAX
会将MOVZX EAX, [A+2]
字节移至[A+2]
双字,将所有0放在剩下的24位中。
其他答案对我来说似乎是正确的。