2016-04-22 5 views
0

私はnasmプログラミングの初心者です。私は、これは一時場所の開始に私のinteger値を移動しますnasmを使用して数値をメモリに移動

SECTION .bss 
    temp:  RESB 8 

SECTION .text 

global _start 

_start: 

    mov eax,4 
    mov [temp],eax 

変数に整数値を格納します。しかし、私はそれを2nd locationに移したいと思う。整数が2バイトを占めているので、最初に4を格納しないで、次の位置に格納します。つまり、temp+2です。どうやってやるの?また、値を取り戻すときには、それぞれが2バイトを占める4つの整数のテンポラリを持つと仮定して、ちょうどtemp+2の位置から検索することができます。

+0

即時保存時にレジスタを通過する必要はありません。あなたは単に 'mov word [temp + 2]、4'と言うことができます。 – Michael

答えて

2

axeaxの2最下位バイトに相当)、2バイトの整数を格納する代わりeaxaxレジスタを使用します。

mov ax, [temp+2] 

:あなたは同様にちょうどaxレジスタに値を取得することができ

mov [temp+2], ax 

だから temp 2 :)

temp +2、店舗で保存するにはまたは、ゼロ拡張子または符号拡張子をeaxに移動することができます。

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

(値が符号なしの場合は最初を使用し、署名されている場合は2番目の値を使用します)。

関連する問題