-
彙編指令
鎖定
- 中文名
- 彙編指令
- 外文名
- assembly instruction
- 領 域
- 彙編語言
- 應用領域
- 程序調試
- 指令類別
- 整數指令
- 學 科
- 計算機科學與技術、電子信息技術
彙編指令編譯背景
任何一種微處理器(CPU)在設計時,就已規定好自己特定的指令系統,這種指令系統的功能也就決定了由該微處理器構成的計算機系統及其基本功能。指令系統中所設計的每條指令都對應着微處理器要完成的一種規定功能操作,即這些指令功能的實現都是由微處理器中的物理器件完成的。要使計算機完成一個完整的任務,就需要執行一組指令,這組指令通常稱為程序。計算機能夠執行的各種不同指令的集合就稱為處理器(CPU)的指令系統。
[3]
一台計算機只能識別由二進制編碼表示的指令,稱之為機器指令。一條機器指令應包括兩部分內容:一部分給出該指令應完成何種操作,稱為指令操作碼部分;另一部分給出參與操作的操作數的值,或指出操作數存放在何處、操作的結果應送往何處等,這一部分稱為指令的操作數部分。處理器可根據指令中給出的地址信息求出存放操作數的地址稱為有效地址EA(Effective Address),然後對存放在有效地址中的操作數進行存取操作。指令中關於如何求岀存放操作數有效地址的方法稱為操作數的尋址方式。計算機按照指令給出的尋址方式求出操作數有效地址進行存取操作數的過程,稱為指令的尋址操作。
[3]
彙編指令指令的格式
指令是計算機能夠識別和執行的操作命令,由二進制數“0”、“1”組成。每條指令的編碼格式由機器指令系統規定。通常,一條指令包含操作碼和操作數兩部分內容,格式如下圖所示:
操作碼(Operation Code)用來説明指令操作的性質與功能,常用OP表示。操作碼是指令中不可缺少的部分,通常由1~2個字節組成,機器通過譯碼電路來識別指令。操作數用於提供指令中要處理的數據或數據所在的地址信息。
以MOV指令作為例子,MOV指令的格式為:MOV dst,src。其中:MOV為指令助記符,表示傳送,dst為目標操作數,src表示源操作數,該指令的功能是將源操作數傳送到目標單元。例如:
MOV......AL,20H;將8位立即數20H傳送到AL中。
MOV......AX,1234H;將16位立即數1234H傳送到AX中。
彙編指令尋址方式
彙編指令寄存器尋址
彙編指令立即尋址
彙編指令寄存器移位尋址
彙編指令寄存器間接尋址
彙編指令基址尋址
彙編指令多寄存器尋址
彙編指令堆棧尋址
彙編指令數據傳輸指令
數據傳輸類指令主要包括數據傳送、數據交換、堆棧操作、查錶轉換、地址傳送、標誌位傳送、I/O數據傳送指令。這類指令的主要特點是大部分指令操作完成後,對FR中的標誌位不產生影響。它們在存儲器和寄存器、寄存器和輸入輸出端口之間傳送數據。
[4]
彙編指令數據傳送指令
MOV:傳送字或字節。
MOVSX:先符號擴展,再傳送。
MOVZX:先零擴展,再傳送。
PUSH:把字壓入堆棧。
POP: 把字彈出堆棧。
PUSHA: 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧。
POPA: 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧。
POPAD: 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧。
BSWAP: 交換32位寄存器裏字節的順序。
XADD: 先交換再累加。( 結果在第一個操作數裏 )
彙編指令輸入輸出端口傳送指令
彙編指令目的地址傳送指令
彙編指令標誌傳送指令
SAHF: 標誌寄存器傳送,把AH內容裝入標誌寄存器。
PUSHF: 標誌入棧。
POPF: 標誌出棧。
PUSHD: 32位標誌入棧。
彙編指令算術運算指令
算數運算類指令包括加減乘除、比較與調整指令。它們可進行8位、16位和32位的運算。參加運算的操作數可以説二進制數和十進制數(BCD碼),這些數可以是無符號數,也可以是帶符號數。算術運算指令的主要特點是執行結果影響標誌寄存器的狀態標誌位OF、SF、ZF、AF、PF、CF。
[4]
ADD: 加法。
ADC: 帶進位加法。
INC: 加 1。
AAA: 加法的ASCII碼調整。
DAA: 加法的十進制調整。
SUB: 減法。
SBB: 帶借位減法。
DEC: 減 1。
NEG: 取補。
CMP: 比較。(兩操作數作減法,僅修改標誌位,不回送結果)
AAS: 減法的ASCII碼調整。
DAS: 減法的十進制調整。
MUL: 無符號乘法。結果回送AH和AL(字節運算),或DX和AX(字運算)
IMUL: 整數乘法。結果回送AH和AL(字節運算),或DX和AX(字運算)
AAM: 乘法的ASCII碼調整。
DIV: 無符號除法:商回送AL,餘數回送AH,(字節運算);或商回送AX,餘數回送DX(字運算)
IDIV: 整數除法:商回送AL,餘數回送AH,(字節運算);或商回送AX,餘數回送DX(字運算)
AAD: 除法的ASCII碼調整。
CBW: 字節轉換為字。(把AL中字節的符號擴展到AH中去)
CWD: 字轉換為雙字。(把AX中的字的符號擴展到DX中去)
CWDE: 字轉換為雙字。 (把AX中的字符號擴展到EAX中去)
彙編指令邏輯運算類指令
彙編指令邏輯運算指令
AND: 與運算。
or: 或運算。
XOR: 異或運算。
NOT: 取反。
彙編指令移位指令
SHL: 邏輯左移。
SAL: 算術左移。(=SHL)
SHR: 邏輯右移。(每位右移,低位進 CF,高位補 0)
SAR: 算術右移。(每位右移, 低位進 CF,高位不變)
ROL: 循環左移。
ROR: 循環右移。
RCL: 通過進位的循環左移。
RCR: 通過進位的循環右移。
以上八種移位指令,其移位次數可達255次。
彙編指令串操作指令
CX: 重複次數計數器。
AL/AX: 掃描值。
D標誌: 0表示重複操作中SI和DI應自動增量;1表示應自動減量。
Z標誌: 用來控制掃描或比較操作的結束。
MOVS: 串傳送。(MOVSB 傳送字符, MOVSW 傳送字, MOVSD 傳送雙字)
CMPS: 串比較。(CMPSB 比較字符, CMPSW 比較字)
SCAS: 串掃描。把AL或AX的內容與目標串作比較,比較結果反映在標誌位。
LODS: 裝入串。把源串中的元素(字或字節)逐一裝入AL或AX中。(LODSB 傳送字符, LODSW 傳送字,LODSD 傳送雙字)
STOS: 保存串。是LODS的逆過程。
REP: 當CX/ECX<>0時重複。
REPE/REPZ: 當ZF=1或比較結果相等,且CX/ECX<>0時重複。
REPNE/REPNZ: 當ZF=0或比較結果不相等,且CX/ECX<>0時重複。
REPC: 當CF=1且CX/ECX<>0時重複。
彙編指令程序轉移指令
彙編指令無條件轉移指令
(長轉移)
JMP: 無條件轉移指令。
CALL: 過程調用。
彙編指令條件轉移指令
(短轉移,-128到+127的距離內;當且僅當(SF、XOR、OF)=1時,OP1<OP2 )
JA/JNBE: 大於轉移。
JAE/JNB: 大於或等於轉移。
JB/JNAE: 小於轉移。
JBE/JNA: 小於或等於轉移。
以上四條,測試無符號整數運算的結果(標誌C和Z)
JG/JNLE: 大於轉移。
JGE/JNL: 大於或等於轉移。
JL/JNGE: 小於轉移。
JLE/JNG: 小於或等於轉移。
以上四條,測試帶符號整數運算的結果(標誌S,O和Z)
JE/JZ: 等於轉移。
JNE/JNZ: 不等於時轉移。
JC: 有進位時轉移。
JNC: 無進位時轉移。
JNO: 不溢出時轉移。
JNP/JPO: 奇偶性為奇數時轉移。
JNS: 符號位為 "0" 時轉移。
JO: 溢出轉移。
JP/JPE: 奇偶性為偶數時轉移。
彙編指令循環控制指令
(短轉移)
LOOP: CX不為零時循環。
LOOPE/LOOPZ: CX不為零且標誌Z=1時循環。
LOOPNE/LOOPNZ: CX不為零且標誌Z=0時循環。
JCXZ: CX為零時轉移。
彙編指令中斷指令
INT: 中斷指令。
INTO: 溢出中斷。
彙編指令其他指令
彙編指令偽指令
DB: 定義字節(1字節)
DW: 定義字(2字節)
DD: 定義雙字(4字節)
PROC: 定義過程。
ENDP: 過程結束。
SEGMENT: 定義段。
ASSUME: 建立段寄存器尋址。
ENDS: 段結束。
彙編指令處理機控制指令
即標誌處理指令,處理機控制指令完成簡單的控制功能。
CLC: (進位位置0指令)
CMC: (進位位求反指令)
CLC: (進位位置為0指令)
STC: (進位位置為1指令)
CLD: (方向標誌位置0指令)
STD: (方向標誌位置1指令)
CLI: (中斷標誌置0指令)
STI: (中斷標誌置1指令)
NOP: (無操作)
HLT: (停機)
WAIT: (等待)
ESC: (換碼)