Assembly 使用nasm将数字移动到内存中

Assembly 使用nasm将数字移动到内存中,assembly,nasm,Assembly,Nasm,我是nasm编程新手。我想在变量中存储整数值 SECTION .bss temp: RESB 8 SECTION .text global _start _start: mov eax,4 mov [temp],eax 这将把我的整数值移动到临时位置的开始处。但是我想把它移到第二个位置。由于整数占用2个字节,我想存储4不是在开始位置,而是在下一个位置,即temp+2。我该怎么做?另外,在检索回值时,如果在temp中有4个整数,每个整数占用2个字

我是
nasm
编程新手。我想在变量中存储整数值

SECTION .bss
    temp:      RESB    8

SECTION .text

global  _start

_start:

    mov eax,4
    mov [temp],eax

这将把我的
整数
值移动到临时位置的开始处。但是我想把它移到第二个位置。由于整数占用2个字节,我想存储
4
不是在开始位置,而是在下一个位置,即
temp+2
。我该怎么做?另外,在检索回值时,如果在temp中有4个整数,每个整数占用2个字节,那么我如何才能仅从
temp+2
位置检索。

要存储2字节整数,请使用
ax
寄存器而不是
eax
ax
对应于
eax
的2个最低字节)

要存储在
temp
+2,请存储在
temp
+2:)

因此:

类似地,您可以仅将值检索到
ax
寄存器中:

mov ax, [temp+2]
或者您可以使用零扩展名或符号扩展名移动到
eax

movzx eax, word [temp+2]
movsx eax, word [temp+2]

(如果值是无符号的,则使用第一个,如果值是有符号的,则使用第二个)。

要存储2字节整数,请使用
ax
寄存器而不是
eax
ax
对应于
eax
的最低两个字节)

要存储在
temp
+2,请存储在
temp
+2:)

因此:

类似地,您可以仅将值检索到
ax
寄存器中:

mov ax, [temp+2]
或者您可以使用零扩展名或符号扩展名移动到
eax

movzx eax, word [temp+2]
movsx eax, word [temp+2]

(如果值是无符号的,则使用第一个值;如果值是有符号的,则使用第二个值)。

存储立即数时,无需经过寄存器。您可以简单地说
mov-word[temp+2],4
。存储立即数时不需要经过寄存器。你可以简单地说
mov-word[temp+2],4