这是一个简单的问题,但我是新的汇编语言。有人能回答他们吗?谢谢。
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 发布于 2013-10-08 18:51:54
a) A[2]仅是一个信息字节,因此,您应该将其移动到一个字节长的寄存器中。您可以将其移动到EAX寄存器的较低字节,编写MOV AL, [A+2]。(*)检查EAX寄存器配置这里。那么,您的代码会做什么呢?好的,这意味着从[A+2]开始移动EAX寄存器中的4个字节,因为4个字节是EAX的大小。
c)它取决于内存的恩迪内斯。在大多数PC机中,您的答案可能是错误的,因为数据存储为30 00, 40 00, .... --也就是说,最重要的部分是正确的(这种存储数据的方式被称为little-endian方式),但是如果您的CPU体系结构确实实现了大端方式,您将是正确的。
e)如果您按照发布的方式声明数据段,那么您将拥有[D-10] = [A+2] = 10。原因是,B中的数据填充了8字节的内存,[A+3]是第9字节,[A+2]是第10字节,向后移动。
(*)请注意,正如Michael在下面的评论中所述,您可以使用movsx或movzx指令。
MOVSX EAX, [A+2]将[A+2]字节移动到EAX双字,扩展数字的符号。
MOVZX EAX, [A+2]将把[A+2]字节移动到EAX双字,将所有的0都放在其余的24位中。
其他的答案在我看来是正确的。
https://stackoverflow.com/questions/19255447
复制相似问题