Assembly 需要以下汇编语言的帮助吗
这是一个简单的问题,但我是汇编语言新手。有人能回答吗?谢谢Assembly 需要以下汇编语言的帮助吗,assembly,x86,Assembly,X86,这是一个简单的问题,但我是汇编语言新手。有人能回答吗?谢谢 A BYTE 0Ah,20,10,40 B WORD 30,40,50,0Bh D DWORD A00,200,300,400,500,600 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)
A BYTE 0Ah,20,10,40
B WORD 30,40,50,0Bh
D DWORD A00,200,300,400,500,600
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
a)a[2]
只不过是一个字节的信息,因此,您应该将其移动到一个字节长的寄存器中。您可以将其移动到EAX
寄存器的较低字节,写入MOV AL[A+2]
()
检查EAX
寄存器配置。
那么,您的代码将做什么呢?这意味着在EAX
寄存器中从[A+2]
开始移动4个字节,因为4个字节是EAX
的大小
c)这取决于你的记忆力。在大多数PC机中,您的答案可能是错误的,因为数据存储为30 00、40 00等。
也就是说,最重要的位在右边(这种存储数据的方式被称为little-endian
方式),但如果您的CPU体系结构确实实现了big-endian方式,那么您的答案是正确的
e)如果您按照发布的方式声明数据段,那么您将拥有[D-10]=[A+2]=10
。原因是,B
中的数据填充了内存的8字节,[A+3]
是第九个字节,[A+2]
是第十个字节,向后移动
(*)请注意,正如Michael在下面的评论中所报告的,您可以使用movsx
或movzx
说明
MOVSX-EAX,[A+2]
将[A+2]
字节移动到EAX
双字,扩展数字的符号
MOVZX-EAX,[A+2]
将[A+2]
字节移动到EAX
双字,将所有0放在剩余的24位
其他答案对我来说似乎是正确的。a)a[2]
只不过是一个字节的信息,因此,您应该将其移动到一个字节长的寄存器中。您可以将其移动到EAX
寄存器的较低字节,写入MOV AL[A+2]
()
检查EAX
寄存器配置。
那么,您的代码将做什么呢?这意味着在EAX
寄存器中从[A+2]
开始移动4个字节,因为4个字节是EAX
的大小
c)这取决于你的记忆力。在大多数PC机中,您的答案可能是错误的,因为数据存储为30 00、40 00等。
也就是说,最重要的位在右边(这种存储数据的方式被称为little-endian
方式),但如果您的CPU体系结构确实实现了big-endian方式,那么您的答案是正确的
e)如果您按照发布的方式声明数据段,那么您将拥有[D-10]=[A+2]=10
。原因是,B
中的数据填充了内存的8字节,[A+3]
是第九个字节,[A+2]
是第十个字节,向后移动
(*)请注意,正如Michael在下面的评论中所报告的,您可以使用movsx
或movzx
说明
MOVSX-EAX,[A+2]
将[A+2]
字节移动到EAX
双字,扩展数字的符号
MOVZX-EAX,[A+2]
将[A+2]
字节移动到EAX
双字,将所有0放在剩余的24位
其他答案对我来说似乎是正确的。问题是什么?你已经有答案了A,C和E的答案在我看来不正确。请解释你们的理由。第一部分是问题,我对我的答案表示怀疑。它们是否正确?A。mov将把A[2]移到蜡像登记器中。否
A
是一个字节数组,EAX
是4个字节,因此它会将DWORD
从A[2]
开始移动到EAX
。问题是什么?你已经有答案了A,C和E的答案在我看来不正确。请解释你们的理由。第一部分是问题,我对我的答案表示怀疑。它们是否正确?A。mov将把A[2]移到蜡像登记器中。否A
是一个字节数组,EAX
是4个字节,因此它会将DWORD
从A[2]
开始移动到EAX
.A)从80386开始有movsx
和movzx
.A)从80386开始有movsx
和movzx
。