変数とレジスタ


イニシャルデータの宣言


構文:変数名[サイズ](Size)[初期値](Initial Value)
サイズ:db(1 byte)、dw(2 bバイト)、dd(4 bバイト)、dq(8バイト)
section .data
    a db 0x11  
    b dw 0x2222  
    c dd 0x33333333
    d dq 0x4444444444444444
上記データ宣言後の構築時のメモリ情報

図に示すように、変数a,b,c,dはメモリ空間に連続的に記憶される.

初期化されていないデータ


構文:変数名[サイズ](Size)[カウント](Count)
サイズ:resb(1 byte)、resw(2 bytes)、resd(4 bytes)、resq(8 bytes)
section .bss
    e resb 10
初期化されていないデータはファイルサイズに影響しません.(ファイルサイズを小さくする効果)

メモリ/レジスタ間でのデータ移動

mov rax, a  ;변수 a의 주소값을 rax에 복사
mov rax, [a]  ;변수 a의 값을 rax에 복사 
;별도 크기지정이 없어서 8바이트값이 들어감 (rax = 8bytes)
;0x4433333333222211 (메모리상의 a부터 연속된 8바이트에 저장된값)
mov al, [a]  ;al 1byte에 변수a값 복사
mov [a], byte 0x55  ;변수 a에 0x55 복사
mov [a], word 0x6666  ;변수 a에 0x6666을 복사 (변수 b메모리공간 침범)
mov [a], cl  ;cl레지스터의 값을 a에 복사 할수 있음