數據類型與數據傳送指令

數據類型與數據傳送指令

數據類型、數據傳送指令、間接尋址

一、數據類型

數據類型的基本特徵是以數據爲的數目度量的大小,其他特徵主要是爲了方便程序員記憶變量中存儲的數據類型,默認情況下大小寫不敏感。

類型 描述
BYTE 8位無符號
SBYTE 8位有符號
WORD 16位無符號
SWORD 16位有符號
DWORD 32位無符號
SDWORD 32位有符號
FWORD 48位整數
QWORD 64位整數
TBYTE 80位整數
REAL4 32位短實數
REAL8 64位長實數
REAL10 80位擴展實數

遺留數據定義僞指令

類型 描述
DB 8位整數
DW 16位整數
DD 32位整數或實數
DQ 64位整數或實數
DT 定義10字節

數據定義語句:

[變量名]  數據定義僞指令 初始值[,初始值]...

有多個初始值的話,用逗號隔開;未初始化,用?代替初始值。

bigArr DWORD 500 DUP(?)

二、數據傳送指令

指令中的操作數的描述及其表述

1、操作數類型:

  • 立即操作數(immediate)

  • 寄存器操作數(register)

  • 內存操作數(memory)

操作數 描述
r8 8位通用寄存器:
r16 16位通用寄存器:
r32 32位通用寄存器:
reg 任意的通用寄存器
sreg 16位段寄存器:
imm 8位、16位或32位立即數
imm8 8位立即數(字節)
imm16 16位立即數(字)
imm32 32位立即數(雙字)
r/m8 8位操作數(可以是8位通用寄存器或內存字節)
r/m16 16位操作數(可以是16位通用寄存器或內存字節)
r/m32 32位操作數(可以是32位通用寄存器或內存字節)
mem 8位、16位或32位操作數

2、基本命令

mov destination,source 從源操作數向目的操作數幅值數據

movzx(move with zero-extend)零擴展傳送,將源操作數的內容複製到目的操作數中,並將該值零擴展至16位或32位。只能用於無符號整數,目的操作數只能是寄存器。

movezx r32 r/m8
movezx r32 r/m16
movezx r16 r/m8

movsx(move with sign-extend)符號擴展傳送,將源操作數的內容複製到目的操作數中,並將該符號零擴展至16位或32位。只能用於有符號整數,目的操作數只能是寄存器。

movesx r32 r/m8
movesx r32 r/m16
movesx r16 r/m8

LAHF:將ELFAGS寄存器的低字節複製到AH寄存器,無操作數

SAHF:將AH寄存器的值複製到ELFAGS寄存器的低字節,無操作數

XCHG:交換兩個操作數的值,不接受立即數操作數

XCHG reg,reg
XCHG reg,mem
XCHG mem.reg

直接偏移操作數:在變量名稱後加上一個偏移值,可以創建直接偏移操作數,來訪問沒有顯式標號的內存地址。

arrayW WORD 100h,200h,300h
mov ax [arrayW+2];AX = 200H

3、加法和減法

INC/DEC:從操作數中加1或減1

INC reg/mem
DEC reg/mem

ADD:將尺寸相同的源操作數和目的操作數相加,結果保存在目的操作數中

ADD 目的操作數,源操作數

SUB:將尺寸相同的源操作數和目的操作數相加,結果保存在目的操作數中

SUB 目的操作數,源操作數

NEG:將數字轉換成補碼求相反數

NEG reg/mem

4、相關操作符和僞指令

  • OFFSET,返回變量相對於其所在段開始的偏移

  • PTR,允許重載變量的默認尺寸

  • TYPE,返回數組中每個元素的大小(字節)

  • LENGTH,返回數組內元素的數目

  • SIZEOF,返回數組初始化時佔用的字節數

三、間接尋址

處理數組唯一可行的方法是用寄存器作爲指針並操縱寄存器的值,這稱爲間接尋址。操作數使用間接尋址時,就稱爲間接操作數。

constant[reg]
[constant + reg]
arrayW WORD 100h,200h,300h

mov esi,0
mov al,[arrayW + esi]

mov al,arrayW[0]

比例因子

array DWORD 100h,200h,300h,400h

mov esi,3*BYTE array    ;array[3]的偏移地址
mov eax,[esi]       ;eax=400h

mov esi,3       ;下標
mov eax,array[esi*3]    ;eax=400h
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章