標籤:
轉載:http://blog.sina.com.cn/s/blog_4be6adec01007xvh.htmlJNGE∶指令助記符——(有符號數比較)不大於且不等於轉移(等價於JL)。當SF和OF異號,且ZF=0 時轉移(段內直接短轉移)。
JNL∶ 指令助記符——(有符號數比較)不小於時轉移(等價於JGE)。 當SF和OF同號,或ZF=1, 則轉移(段內直接短轉移)。
JNLE∶指令助記符——(有符號數比較)不小於且不等於轉移(等價JG)。SF和OF同號,且ZF=0 時轉移。
JNO∶簡單條件轉移指令助記符——前次操作無溢出轉移。OF=0 則轉移(段內直接短轉移)。
JNP∶ 簡單條件轉移指令助記符——奇數同位轉移。PF=0 則轉移(段內直接短轉移)。
JNS∶ 簡單條件轉移指令助記符——前次操作結果為正數轉移。SF=0 則轉移(段內直接短轉移)。
JNZ∶ 簡單條件轉移指令助記符——不相等轉移(同JNE)。ZF=0 則轉移(段內直接短轉移)。
JO∶ 簡單條件轉移指令助記符——前次操作溢出轉移。OF=1 則轉移(段內直接短轉移)。
JP∶ 簡單條件轉移指令助記符——偶校正轉移。前次操作結果中1的個數是偶數,PF=1 則轉移(段內直接短轉移)。
JPE∶ 簡單條件轉移指令助記符——偶校正轉移。前次操作結果中1的個數是偶數,PF=1 則轉移(段內直接短轉移)。
JPO∶ 簡單條件轉移指令助記符—奇數同位轉移。PF=0 則轉移(段內直接短轉移)。
JS∶ 簡單條件轉移指令助記符——前次操作結果為負數轉移。SF=1 則轉移(段內直接短轉移)。
JZ∶ 簡單條件轉移指令助記符——相等轉移(同JE)。ZF=1 則轉移(段內直接短轉移)。
LABLE∶ 定義符號名偽指令——為當前儲存單元定義一個指定類型的變數或標號。
一、LABLE 與變數連用。
例 TIMB LABLE BYTE
TIMW DW 4142H 第一句給第二句定義的字變數TIMW取一個新名字TIMB,並且修改類型屬性為位元組。以後如果以字類型訪問該變數時,應使用變數名TIMW,以位元組類型訪問該變數時,應使用變數名TIMB。
二、LABLE 與標號連用。
例 POINTF LABLE FAR POINTN:MOV AX,[BX+SI] 第一句給第二句隱含定義的近標號POINTN取一個新名字POINTF,並將類型屬性修改為FAR 。這樣就允許作為
其他程式碼片段中轉移或調用指令的目標標號(這時標號是POINTF)。
LAHF∶指令助記符——標誌寄存器(PSW)低8位內容送AH中。
LDS∶ 指令助記符——取地址指標到資料區段寄存器。要求源運算元是一個雙字長儲存空間運算元,目的運算元是16位通用寄存器、指標或變址寄存器,但不能是段寄存器。指令執行時,雙字長儲存空間運算元中的低地址傳送到指定的寄存器中,高地址傳送到DS寄存器中。
例:LDS SI,DATA_SEG[DI] 由DATA_SEG[DI]可以得到在資料區段的有效地址EA(即段內位移量)。在EA和EA+2中存放著目標指標。EA存放的是目標指標的段內位移量,送至SI;EA+2存放的是目標指標的段地址,送至DS。
例:變數名一 DD 變數名二
......
LDS SI 變數名一
變數名二所在資料區段的EA和段地址存放在變數名一中,EA送至SI,EA+2存放的段地址送至DS。
LE∶ 關係運算子——小於等於。若滿足條件,輸出結果為全 1(所有的位),否則為全0 。
LEA∶指令助記符——取有效地址。將儲存空間運算元的位移地址傳送到通用寄存器、指標或變址寄存器中。該指令常用來建立串操作指令所需要的寄存器指標。
例一 LEA SI,變數名(與MOV SI OFFSET 變數名 等效);
例二 LEA AX,[AX] (將SI所指儲存單元的EA送至AX,而MOV AX,[SI]送的是該儲存單元存放的內容)
LENGTH∶數值返回運算子。其加在一個變數名前面,返回的數值是陣列變數的元素個數。如果變數是用DUP 說明的,則返回DUP前面的數值;如果沒有DUP 說明的,則返回的值總是1。
LES∶ 指令助記符——取地址指標到資料區段寄存器。要求源運算元是一個雙字長儲存空間運算元,目的運算元是16位通用寄存器、指標或變址寄存器,但不能是段寄存器。指令執行時,雙字長儲存空間運算元中的低地址傳送到指定的寄存器中,高地址傳送到ES寄存器中。
LDCK∶ 指令助記符——封鎖匯流排。加在任何指令前面的單位元組首碼指令,配合用來維持匯流排的鎖存訊號,直到與其配合的指令執行完為止。
LOCAL∶ 巨集指令——局部符號(變數,標號)定義。在宏擴充時,組譯工具給LOCAL 後的形式參數指定特殊的符號,然後用這些符號替換巨集指令體中LOCAL 指出的形式參數。這樣可避免這些符號在多次調用宏時發生重複定義。
LODS∶指令助記符——裝入串。一般用LODSB或LODSW。
LODSB∶ 指令助記符——位元組裝入(從位元組串中取數)。它將DS段SI指出的位元組資料送入AL寄存器中,並根據方向標誌DF修改SI中的地址。即當DF=0時,地址加1 ;DF= 1 時,地址減1 。
LODSW∶ 指令助記符——字裝入(從字串中取數)。 它將DS段SI指出的字資料送入AX寄存器中,並根據方向標誌DF修改SI中的地址。即當DF=0 時,地址加2 ;DF= 1 時,地址減2 。
LOOP∶指令助記符——迴圈控制。每執行一次,CX的內容減1 ,若減1 後不為0 ,則轉移到目標地址;否則,執行LOOP之後的指令。
LOOPE∶ 指令助記符——迴圈控制(等於LOOPZ)。每執行一次,CX的內容減1, 若減1 後不為0 ,且ZF=1, 則轉移到目標地址;否則,執行LOOPE 之後的內容。
LOOPZ∶指令助記符——迴圈控制(等於LOOPE)。每執行一次,CX的內容減1 ,若減1 後不為0 ,且ZF=1, 則轉移到目標地址;否則,執行LOOPZ 之後的內容。
LOOPNE∶指令助記符——迴圈控制(等於LOOPNZ)。每執行一次,CX的內容減1 ,若減1 後不為0 ,且ZF=0, 則轉移到目標地址;否則,執行LOOPNE之後的內容。
LOOPNZ∶指令助記符——迴圈控制(等於LOOPNE)。每執行一次,CX的內容減1 ,若減1 後不為0 ,且ZF=0, 則轉移到目標地址;否則,執行LOOPNZ之後的內容。
LOW∶ 位元組分解運算子(操作符)。用來從運算對象(一個數或地址運算式)中分離出(取)低位元組。
LT∶ 關係運算子——小於。若滿足條件,輸出結果為全1 (所有的位),否則為全0 。
MACRO∶ 巨集指令——宏定義。
MASK∶運算子。使得記錄中指定欄位各位均為1 ,其他各位均為0 。
MEMORY∶偽指令——段定義(組合類別型)。該段在儲存空間中應該定位在所有其他段的最高地址。如果不止一個段選用MEMORY方式,則把第一個遇到的段作MEMORY處理,而其他段均作COMMON方式處理。
MOD∶ 算術運算子——模除(取整除後的餘數)。
MOV∶ 指令助記符——通用資料傳送。注意,①兩個段寄存器之間不能直接傳送資料;②兩個儲存單元之間不能直接傳送資料(可以用MOVS);兩個運算元中必須有一個是寄存器或立即數;③立即數和段寄存器CS不能作為目的運算元。
MOVS∶指令助記符——串傳送。與MOVSB和MOVSW相似,但必須說明資料串類型(字或位元組)。
MOVSB∶ 指令助記符——串(位元組)傳送。把由SI指向的資料區段中的一個位元組資料傳送到由DI指向的附加段內一個位元組儲存單元中去,並同時根據方向標誌對SI和DI中的地址進行修改。當DF=0時, 地址都加1 ;當DF=1時 ,地址都減1 。
MOVSW∶ 指令助記符——串(字)傳送。把由SI指向的資料區段中的一個字資料傳送到由DI指向的附加段內一個字儲存單元中去,並同時根據方向標誌對SI和DI中的地址進行修改。當DF=0時, 地址都加2 ;當DF=1時,地址都減2 。
MUL∶ 指令助記符——無符號數乘法。 位元組乘法:(AL)*(源運算元)->AX
字乘法: (AX)*(源運算元)->DX和AX
若結果的高半部分(AH或DX,對應位元組和字)為非0 值,則CF和OF置1;否則CF和OF清0。
NAME∶偽指令——模組定義。程式將對給定的程式模組模數塊名。格式是,NAME 模組名。 彙編處理時,一個模組就是一個獨立的彙編單位。彙編處理只進行到模組結束語句END 為止。如果該模組是主模組,END 語句可以指出一個標號,它表示該程式的啟動地址。
NE∶關係運算子——不等。若滿足條件,輸出結果為全1 (所有的位),否則為全0 。
NEG∶ 指令助記符——求補。將目的運算元的每一位求反(包括符號位)後加1.若在位元組操作時對—128,或在字操作時對—32768取補,則運算元不變,但溢出標誌OF置位。運算元可以是寄存器或儲存空間單元,但不能是段寄存器或立即數。結果送回目的運算元。執行結果不但影響標誌位AF、CF、OF、PF、SF和ZF,而且一般總是置CF=1 (除非運算元為0)。
NONE∶偽指令——段定義(組合類別型)。本段與其它段邏輯上不發生關係,每段都有自己的基地址。這是隱含的組合類別型。
NOP∶ 指令助記符——空操作。用於程式調試。
NOT∶ 邏輯運算子(在語句的運算元部分)或邏輯操作指令助記符(在語句的作業碼部分)——按位非(求反)。將目的地址中的內容逐位取反後再送入目的地址中。
OF∶Overflow Flag, 溢出標誌,在標誌寄存器的第11位元組。在運算過程中,如運算元超出了機器能表示的範圍,此時OF 置1。作加法時,OF位是根據運算元的符號及其結果情況來設定的,若兩個運算元的符號相同,而結果的符號與之相反時,OF置1,否則置0。
OFFSET∶數值返回運算子。其加在一個變數名或標號前面,返回的數值是該變數名或標號所在的段的位移地址。
OPD∶ 教材符號--目的運算元。
OPR∶ 教材符號--源運算元。
OR∶ 邏輯運算子(在語句的運算元部分)或邏輯操作指令助記符(在語句的作業碼部分)——按位或。進行“或”運算的兩位中任一位是 1,則結果為1 。
ORG∶ 偽指令——定位(置彙編地址計數器)。在每段來源程式或資料區塊的開始,指明此語句後面的程式或資料區塊的起始地址,其餘指令或資料就連續存放在以後的地址單元中。
例一 ORG $+10 表示跳過10個位元組。
例二 ORG 數值運算式(值為0-65535) 表示$改為數值運算式的值。
OUT∶ 指令助記符——輸出。把AX或AL中的內容傳送到一個輸出連接埠。定址方式與IN相同。
PA∶教材符號--某一儲存單元的物理地址。 對於指令,PA=(CS)左移4位+(IP);
對於堆棧段資料,PA=(SS)左移4位+(SP);或PA=(SS)左移4位+(BP);
對於資料區段和附加資料區段資料,PA=(DS或ES)+該變數的位移地址。
PARA∶偽指令——段定義(定位類型方式)。規定在定位時每個段的起始地址總是16的整倍數,最後四位位元一定是0 。這種定位方式最簡單,但段間往往有空隙(最多為15個位元組)。預設定位方式是按PARA定位。
PAGE∶①偽指令——段定義(定位類型方式)。要求段起始地址是 256的整倍數,即段的邊界必須是頁的邊界。段地址的最低兩位(16進位數)必須是0 。②偽指令——格式控制。指定組譯工具所產生的列表檔案每頁多少行(10—255), 每行多少字元(60-132)。或指定輸出新的一頁(用+號)。
PF∶Parity Flag,奇偶標誌,在標誌寄存器的第2位元組,當運算結果(指低8位)中1的個數為偶數時置1,否則置0。該標誌主要用來檢測資料在傳輸過程中的錯誤。
POP∶指令助記符——出棧。將棧頂元素彈出送至某一寄存器,段寄存器(CS除外)或儲存空間中。首先將SP指的內容送至低8位,SP加1;再將SP指的內容送入高8位,SP再加1。
POPF∶指令助記符——將堆棧頂端的字資料送入標誌寄存器。對於TF和OF置位可先將數值置於AX中,壓入堆棧,再用POPF送入標誌寄存器。此方式對TF和OF標誌位是唯一可行的置位方法。
PROC∶偽指令——過程(子程式)定義(起始)。定義一個子程式,並說明它是NEAR或FAR 過程。已定義流程如果由 DOS直接裝入並啟動執行,則該過程必須定義為 FAR過程。
PSW∶Program Status Word,程式狀態字寄存器,由條件碼標誌(OF、SF、ZF、AF、PF、CF)和控制標誌(DF、IF、TF)構成。
11 10 9 8 7 6 4 2 0
─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│
─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
PTR∶ 修改屬性運算子。用來明確指出變數、標號或地址運算式的類型屬性( 只在所在的指令內有效)。類型放在PTR 之前,可以是BYTE、WORD、 DWORD、NEAR、FAR。
PUBLIC∶①偽指令——段定義(組合類別型)。該段與其它模組中說明為PUBLIC類型的同名同‘類別‘段組合起來,形成一個物理段(小於等於64K),公用一個段基址,②偽指令——定義全域符號。表示該模組中定義的哪些符號常量、變數、標號以及過程名(幾個模組公用的過程一般都是FAR 過程)等可以被其他模組所引用。
PURGE∶ 巨集指令——取消宏定義。
PUSH∶指令助記符——進棧。把寄存器,段寄存器中的一個字資料壓入堆棧。高8位先進,SP減1;低8位後進,SP再減1。
PUSHF∶ 指令助記符——把標誌寄存器的內容壓入堆棧。在子程式調用和中斷服務中可用來保護標誌位(恢複用POPF)。
RCL∶ 指令助記符——帶進位迴圈左移。
格式為:RCL 目的運算元,1
或RCL 目的運算元,CL (其中CL中存放的是移動次數)
┌─┐ ┌───────────────┐
┌│CF│← │ ←───────────── │←┐
│└─┘ └───────────────┘ │
└───────────────────────┘
RCR∶ 指令助記符——帶進位迴圈右移。
┌───────────────┐ ┌─┐
┌→│ ─────────────→ │→│CF│─┐
│ └───────────────┘ └─┘ │
└───────────────────────┘
RECORD∶偽指令——設計一個單位元組或雙位元組的記錄格式。指令格式為,
記錄名 RECORD 欄位名1:=運算式,欄位名2:=運算式 ……
記錄定義後,必須利用初始化記錄的方法來定義儲存空間變數,格式為,
變數名 記錄名 <運算式,運算式,……>
或變數名 記錄名 數量DUP(<運算式,……>)
REP∶ 指令助記符——重複首碼。它可以使串指令反覆執行(CX不等於0 就執行),每執行一次,CX的內容減1 。
REPE∶指令助記符——重複首碼。當兩串相等,即ZF=1時 ,它可以使串指令反覆執行(CX不等於0 就執行),每執行一次,CX的內容減1 。(與REPZ完全一樣)
REPNE∶ 指令助記符——重複首碼。當兩串不相等,即ZF=0時, 它可以使串指令反覆執行(CX不等於0 就執行),每執行一次,CX的內容減1 。(與REPNZ完全一樣)
REPNZ∶ 指令助記符——重複首碼。當兩串不相等,即ZF=0時, 它可以使串指令反覆執行(CX不等於0 就執行),每執行一次,CX的內容減1 。(與REPNE完全一樣)
REPT∶巨集指令——重複塊(以ENDM結束)。
格式為: REPT 重複次數
重複塊
ENDM
這種巨集指令用於確定重複次數。
REPZ∶指令助記符——重複首碼。當兩串相等,即ZF=1時, 它可以使串指令反覆執行(CX不等於0 就執行),每執行一次,CX的內容減1 。(與REPE完全一樣)
RET∶ 指令助記符——返回。
一、段內返回。先將棧頂的字送入IP,然後SP增2 。若帶立即數,SP再加立即數(丟棄一些在執行CALL之前入棧的參數)。
二、段間返回。棧頂的字送入IP後(SP增 2),再將棧頂的字送入CS,SP再增2 。若帶立即數,則SP再加立即數。
ROL∶ 指令助記符——迴圈左移。
格式為:ROL 目的運算元,1
或ROL 目的運算元,CL (其中CL中存放的是移動次數)
┌─┐ ┌───────────────┐
│CF│←┬│ ←───────────── │←┐
└─┘ │└───────────────┘ │
└──────────────────┘
ROR∶ 指令助記符——迴圈右移。
┌───────────────┐ ┌─┐
┌→│ ─────────────→ │┬→│CF│
│ └───────────────┘│ └─┘
└──────────────────┘
SAHF∶指令助記符——將AH 寄存器的內容送入標誌寄存器(PSW)的低位元組中,標誌寄存器高八位保持不變。
SAL∶ 指令助記符——帶符號數的算術左移。經常用來乘以2。
格式為: SAL 目的運算元,1
當移位次數大於 1時,則移位次數應預先置於CL寄存器中。
格式為: SAL 目的運算元,CL
┌─┐ ┌───────────────┐
│CF│←│ ←───────────── │← 0
└─┘ └───────────────┘
如果符號位發生變化時,就將 1送到OF標誌,表示移位前運算元的最高位與移位後的最高位不同。
SAR∶ 指令助記符——帶符號數的算術右移。符號位保持不變。經常用來除以2。當移位次數大於 1時,則移位次數應預先置於CL寄存器中。
┌───────────────┐ ┌─┐
┌→│ ─────────────→ │→│CF│
│ └───────────────┘ └─┘
└──┘
SBB∶ 指令助記符——帶借位減法(減去CF的值)。用於多位元組減法運算。兩高位字相減,並減去低位的借位CF。
SCAS∶指令助記符——串搜尋(掃描)。通常用SCASB或SCASW。
SCASB∶ 指令助記符——位元組串掃描(搜尋)。用AL寄存器中的內容與由ES段DI指定的一個位元組資料進行比較(減),若相等(結果為0) ,ZF=1 。並依方向標誌DF的值修改DI中的地址,即DF=0 ,地址加1 ;DF=1 ,地址減 1。
SCASW∶ 指令助記符——字串掃描(搜尋)。 用AX寄存器中的內容與由ES段DI 指定的一個字資料進行比較(減),若相等(結果為0) ,ZF=1 。並依方向標誌DF的值修改DI中的地址,即DF=0 ,地址加2 ;DF=1 ,地址減 2。
SEG∶ 數值返回運算子。其加在一個變數名或標號前面,返回的數值是該變數名或標號所在的段基址(段寄存器的內容)。
SEGMENT∶ 段定義偽指令 。格式為 段名 SEGMENT [定位方式][組合方式][‘類別‘]。在定義段的時候,還可以在SEGMENT 語句中給出該段的類別,類別名是一個用單括弧括起來的字串。進行串連處理時,LINK程式把類別名相同的所有段放在連續的儲存地區內。同類的各個段在串連時,先出現的在前,後出現的在後。
SF∶Sign Flag, 符號標誌,在標誌寄存器的第7位元組.記錄運算結果的符號,結果為負時置1。
SHL∶
一、算術運算子——左移(移1位相當於乘以2)。
二、指令助記符——無符號數的邏輯左移。經常用來乘以2。 當移位次數大於1 時,則移位次數應預先置於CL寄存器中,寫成“SHL OPD CL”。
┌─┐ ┌───────────────┐
│CF│←| ←───────────── │← 0
└─┘ └───────────────┘
SHORT∶ 屬性運算子(操作符)。用來指定JMP 指令中轉向地址的屬性,指出轉向(目標)地址與本指令地址的位元組距離在-128到+127之間。
SHR∶
一、算術運算子——右移(移1位相當於除以2)。
二、指令助記符——無符號數的邏輯右移。經常用來除以2。 當移位次數大於 1時,則移位次數應預先置於CL寄存器中,寫成“SHR …,CL”。
┌───────────────┐ ┌─┐
0→ │ ─────────────→ │→│CF│
└───────────────┘ └─┘
SI∶Source Index,源變址寄存器。與DS聯用,用來確定資料區段中某一儲存單元的位移地址。在串處理指示中,SI指出源運算元的地址,隱含段為當前的資料區段。
SIZE∶數值返回運算子。其加在一個變數前面,返回的是陣列變數所佔的總位元組數(LENGTH和TYPE傳回值的乘積)。
學習linux核心時常碰到的彙編指令(2)