数据类型与数据传送指令
數據類型與數據傳送指令
數據類型、數據傳送指令、間接尋址
一、數據類型
數據類型的基本特征是以數據為的數目度量的大小,其他特征主要是為了方便程序員記憶變量中存儲的數據類型,默認情況下大小寫不敏感。
| 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/m8movsx(move with sign-extend)符號擴展傳送,將源操作數的內容復制到目的操作數中,并將該符號零擴展至16位或32位。只能用于有符號整數,目的操作數只能是寄存器。
movesx r32 r/m8 movesx r32 r/m16 movesx r16 r/m8LAHF:將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 = 200H3、加法和減法
INC/DEC:從操作數中加1或減1
INC reg/mem DEC reg/memADD:將尺寸相同的源操作數和目的操作數相加,結果保存在目的操作數中
ADD 目的操作數,源操作數SUB:將尺寸相同的源操作數和目的操作數相加,結果保存在目的操作數中
SUB 目的操作數,源操作數NEG:將數字轉換成補碼求相反數
NEG reg/mem4、相關操作符和偽指令
OFFSET,返回變量相對于其所在段開始的偏移
PTR,允許重載變量的默認尺寸
TYPE,返回數組中每個元素的大小(字節)
LENGTH,返回數組內元素的數目
SIZEOF,返回數組初始化時占用的字節數
三、間接尋址
處理數組唯一可行的方法是用寄存器作為指針并操縱寄存器的值,這稱為間接尋址。操作數使用間接尋址時,就稱為間接操作數。
constant[reg] [constant + reg] arrayW WORD 100h,200h,300hmov esi,0 mov al,[arrayW + esi]mov al,arrayW[0]比例因子
array DWORD 100h,200h,300h,400hmov esi,3*BYTE array ;array[3]的偏移地址 mov eax,[esi] ;eax=400hmov esi,3 ;下標 mov eax,array[esi*3] ;eax=400h總結
以上是生活随笔為你收集整理的数据类型与数据传送指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加载、存储浮点数
- 下一篇: 状态标志寄存器--EFLAGS