需要帮助以下汇编语言

时间:2013-10-08 18:26:37

标签: assembly x86

这是一个简单的问题,但我是汇编语言的新手。有人可以回答吗?感谢。

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   

1 个答案:

答案 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位中。

其他答案对我来说似乎是正确的。