1

我是 Linux Assembly Programming 和运行 x86_64 Ubuntu 13.04 的新手。我所知道的 。64 位寄存器就像这样 rax - 64 bit eax - 32 bit ax - 16 bit 和 ah 和 al 8 bits

但是 32 位和 64 位操作系统中的 int 都是 32 位,即 Int32。

因此,如果我尝试在(比如 rax)中复制一个 int vaue,它只需要 eax(如果你知道我的意思),我的简单问题是 LINUX 汇编编程中的 64 位整数使用什么关键字(数据类型)?像 .int 的 32 位 INETGER 我尝试了很长时间,它也使用 32 位,不知道为什么。如果您需要任何其他信息,请在下面回复。

4

2 回答 2

1

您可能正在寻找该.quad指令。

于 2013-08-19T18:49:26.167 回答
1

例如,在 NASM 中,整数数据类型被命名为BYTE、和WORD,例如:DWORDQWORD

mov  al,  BYTE PTR [ebx]    ; 1 byte
mov  ax,  WORD PTR [ebx]    ; 2 bytes
mov eax, DWORD PTR [ebx]    ; 4 bytes
mov rax, QWORD PTR [ebx]    ; 8 bytes

其他汇编语言也会给指令添加后缀(movb, movs, movl, movq),但在这个版本中,指令的类型是从操作数大小推断出来的。

严格来说,这个例子中的指针类型也是多余的,但是其他指令(比如带零扩展的移动)确实需要明确地知道要从内存中读取多少字节,这就是类型名称的来源。

于 2013-08-19T19:42:07.477 回答