80X86 匯編指令符號大全
2008年03月23日 星期日 18:02
|
80X86 匯編指令符號大全 +、-、*、/∶算術(shù)運算符。
&∶宏處理操作符。宏擴展時不識別符號和字符串中的形式參數(shù),如果在形式參數(shù)前面加上一個& 記號,宏匯編程序就能夠用實在參數(shù)代替這個形式參數(shù)了。
$∶地址計數(shù)器的值——記錄正在被匯編程序翻譯的語句地址。每個段均分配一個計數(shù)器,段內(nèi)定義的所有標號和變量的偏移地址就是當前匯編地址計數(shù)器的值。
?∶操作數(shù)。在數(shù)據(jù)定義語句中,操作數(shù)用?,其作用是分配并保留存儲空間,但不存入確定的數(shù)據(jù)。
=∶等號偽指令——符號定義。對符號進行定義和賦值,功能與 EQU相似,但允許(重復)再定義。
:∶修改屬性運算符(操作符)——段操作符。用來臨時給變量、標號或地址表達式指定一個段屬性(不用缺省的段寄存器),自動生成一個“跨段前綴字節(jié)”。注意,段寄存器CS和ES不能被跨越,堆棧操作時也不能跨越SS。
;∶注釋符號。
%∶特殊宏操作符,用來將其后的表達式(通常是符號常數(shù),不能是變量名和寄存器名)轉(zhuǎn)換成它所代表的數(shù)值,并將此數(shù)值的ASCII碼嵌入到宏擴展中。
( )∶1.運算符——用來改變運算符的優(yōu)先級別。2.教材符號,表示括號內(nèi)存儲單元(或寄存器)的內(nèi)容。
< >∶宏調(diào)用時用來將帶間隔符(如空格,逗號等)的字符串(作為實參)括起來。
[ ]∶1.運算符。方括號括起來的數(shù)是數(shù)組變量的下標或地址表達式。帶方括號的地址表達式必須遵循下列原則,①只有BX、BP、SI、DI這四個寄存器可在方括號內(nèi)出現(xiàn);②BX或BP可單獨出現(xiàn)在各方括號中,也可以與常數(shù)、SI或DI一起出現(xiàn)在方括號內(nèi),但不允許BX和BP出現(xiàn)在同一個方括號內(nèi);③SI和DI可以單獨出現(xiàn)在各方括號內(nèi),也可以與常數(shù)、BP或BX一起出現(xiàn)在方括號內(nèi),但不允許SI和DI出現(xiàn)在同一個方括號內(nèi);④一個方括號內(nèi)包含多個寄存器時,它們只能作加法運算;⑤若方括號內(nèi)包含基址指針BP,則隱含使用堆棧段寄存器SS提供段基址,否則均隱含使用數(shù)據(jù)段寄存器DS提供段基址。2.教材符號,表示其中的內(nèi)容可省略。
.LIST∶ 偽指令。用于打開列表文件輸出。
.RADIX∶偽指令。把缺省的基數(shù)改為2-16范圍內(nèi)的任意基數(shù)。.RADIX不影響DD、DQ、DT偽指令,在這些偽指令中,輸入的數(shù)值只要沒有加上數(shù)據(jù)類型就認為是十進制數(shù)。
.XLIST∶偽指令。用于關(guān)閉列表文件輸出。
%OUT∶偽指令。在匯編時顯示其后的信息。
AAA∶ 指令助記符——加法運算后的ASCII調(diào)整(非壓縮的BCD碼)。無操作數(shù),調(diào)整的加法結(jié)果在AL中。AF和CF的狀態(tài)改變說明結(jié)果大于9。檢查AL的低四位是否為合法的BCD碼(0-9),如果合法就清除AL的高四位以及AF和CF標志。當AL的低四位表示的數(shù)大于 9或AF=1時, 將AL加 6,AH加1 ,并使AF和CF置位,清除AL中的高四位。任何一個A—F之間的數(shù)加上6 以后,都會使AL低 4位產(chǎn)生0-9之間的數(shù),從而達到調(diào)整的目的。
AAD∶ 指令助記符——除法的ASCII調(diào)整(非壓縮的BCD碼)。在執(zhí)行除法操作前,必須利用 AAD指令將非壓縮型 BCD碼表示的數(shù)轉(zhuǎn)換成二進制數(shù)送AL。步驟是,先將被除數(shù)的高位數(shù)(AH中的內(nèi)容)乘以10,然后加到AL的低位數(shù)中,接著將AH清零。
AAM∶ 指令助記符——乘法的ASCII調(diào)整(非壓縮的BCD碼)。用于將字節(jié)乘法的積轉(zhuǎn)換成兩個合法的十進制非壓縮碼。AAM不帶操作數(shù),假定成績在AH和AL中,并將調(diào)整后的非壓縮碼送回AH和AL。為了保證 AAM得到正確的結(jié)果,原乘數(shù)和被乘數(shù)必須是合法的非壓縮碼。指令執(zhí)行時,AAM 用10(0AH) 除AL寄存器,并將除得的商和余數(shù)分別送AH和AL寄存器,實現(xiàn)轉(zhuǎn)換。
AAS∶ 指令助記符——減法運算后的ASCII調(diào)整(非壓縮的BCD碼)。檢查AL的低四位是否為合法的BCD碼(0-9),如果合法就清除AL的高四位以及AF和CF標志。當AL的低四位表示的數(shù)大于 9或AF=1時, 將AL減 6,AH減1 ,并使AF和CF置1,清除AL中的高四位。 |
|
|
|
|
作者: wyc890618 2006-12-29 13:36 回復此發(fā)言 |
|
|
2 |
80X86 匯編指令符號大全(上)
|
|
ADC∶ 指令助記符——帶進位加法(把CF的值加上)。用于多字節(jié)數(shù)的高字節(jié)加法運算。
ADD∶ 指令助記符——加法。參與運算的二操作數(shù)應該同時帶符號或不帶符號 ,并且長度一致。操作數(shù)可以是寄存器、存儲器或立即數(shù),但不能同時為存儲單元或段寄存器,立即數(shù)也不能作為目的操作數(shù)。
AF∶ Auxiliary Carry Flag,輔助進位標志,在標志寄存器的第4字節(jié)。記錄運算時第 3位(半個字節(jié))產(chǎn)生的進位值(置1)。該標志用于對BCD碼的加減運算中。
AND∶邏輯運算符(在語句的操作數(shù)部分,匯編時完成)或邏輯操作指令助記符(在語句的操作碼部分,其運算在執(zhí)行指令時完成)——按位與。只有相“與”的兩位全為1 ,結(jié)果才為1。某數(shù)自己與自己相“與”,操作數(shù)不變,進位標志CF清0 。
ASSUME∶段定義偽指令——設定分段寄存器,格式為"ASSUME 段寄存器:段名[,段寄存器名:段名]"。在代碼段的開始用來指出所有段與段寄存器的關(guān)系,確定某個段分配給哪個段寄存器。ASSUME只指出各段寄存器的分配,并沒有把段地址裝入相應的段寄存器。為此,在代碼段中,還必須把數(shù)據(jù)段和附加數(shù)據(jù)段的段地址裝入相應的寄存器中。
AT∶偽指令——段定義(組合類型)。該段按絕對地址定位,段基址為數(shù)值表達式的值,位移量為0 。不能指定代碼段。
AX∶ Accumulator,通用寄存器,算術(shù)運算的主要寄存器。另外,所有的I/O指令都使用這一寄存器與外部設備傳送信息。其中AH是高8位,AL是低8位。
B∶ 數(shù)據(jù)類型后綴,表示二進制常量。
BP∶Base Pointer, 基址指針寄存器。可以與SS寄存器聯(lián)用來確定堆棧中任一存儲單元的地址。它指示堆棧中任一單元的偏移量。非堆棧進出指令要訪問堆棧,只能通過BP進行。
BX∶Base,通用寄存器。在計算存儲器地址時,經(jīng)常用作基址寄存器。其中BH是高 8位,BL是低 8位。
BYTE∶偽指令——段定義(定位類型)。本段起始單元可以從任一地址開始,段間不留空隙,存儲器利用率最高。
CALL∶指令助記符——程序調(diào)用。 一、段內(nèi)直接調(diào)用:格式為" CALL 過程名"。先把IP內(nèi)容(子程序的返回地址,即CALL下一條指令的地址)壓入堆棧,然后IP轉(zhuǎn)移到子程序的入口地址。 二、段內(nèi)間接調(diào)用:格式為" CALL WORD PTR OPD"。先把IP的內(nèi)容壓入堆棧,然后IP指向(轉(zhuǎn)到)由尋址方式?jīng)Q定的EA。 三、段間直接調(diào)用。格式為"CALL FAR PTR 過程名"。先把CS和IP的內(nèi)容壓入堆棧,然后在CS中裝入新的段地址,IP指向段內(nèi)偏移地址。 四、段間間接調(diào)用:格式為"CALL DWORD PTR OPD"。 先把CS和IP的內(nèi)容壓入堆棧,然后把尋址方式確定的有效地址所指定的一個字儲存單元的內(nèi)容送入IP,下一個字存儲單元的內(nèi)容(段首址)送入CS。
CBW∶指令助記符——字節(jié)轉(zhuǎn)換為字。把AL中字節(jié)的符號擴展到AH中,若(AL)的最高有效位為0 ,則(AH)=00;若(AH)的最高有效位為1, 則(AH)=0FFH。
CF∶Carry Flag,進位標志,在標志寄存器的第0字節(jié) ,記錄運算時從最高有效位產(chǎn)生的進位值(置1)。 作加法時,CF位可以用來表示無符號數(shù)的溢出(有符號數(shù)溢出用OF表示)。
CLC∶ 指令助記符——標志(進位)設置。設置CF=0。
CLD∶ 指令助記符——清方向標志。使DF=0 。這樣,當執(zhí)行字節(jié)串操作指令時,地址自動增1 ;當執(zhí)行字串操作指令時,地址自動增2 。
CLI∶ 指令助記符——中斷允許標志設置。設置IF=0 。
CMC∶ 指令助記符——標志(進位)設置。CF取反。
CMP∶ 指令助記符——比較。對于“ CMP AX,BX” ,如果是兩個無符號數(shù)比 較(減),若結(jié)果沒有產(chǎn)生借位,即CF=0, 則(AX)≥(BX);若CF= 1,則(AX)〈(BX)。 如果是兩個帶符號數(shù)比較,則 當沒有溢出(OF=0)時,若SF=0,則(AX)〉(BX) 若SF=1,則(AX)〈(BX) 當產(chǎn)生溢出(OF=1)時,若SF=0,則(AX)〈(BX) 多SF=1,則(AX)〉(BX) 簡煉的結(jié)論,若 OF 異或 SF=0,則(AX)〉(BX) 若 OF 異或 SF=1,則(AX)〈(BX) |
|
|
|
|
作者: wyc890618 2006-12-29 13:36 回復此發(fā)言 |
|
|
3 |
80X86 匯編指令符號大全(上)
|
|
CMPS∶指令助記符——串比較。通常用CMPSB或CMPSW。
CMPSB∶ 指令助記符——串比較。將DS段SI指出的字節(jié)數(shù)據(jù)減去ES段DI指出的字節(jié)數(shù)據(jù)(不保存結(jié)果),然后根據(jù)相減結(jié)果設置標志位(兩個數(shù)據(jù)相等,則ZF=1)。 并由方向標志DF修改SI 和DI中的地址,即當DF=0時,地址都加1; 當DF=1時, 地址都減1 。
CMPSW∶ 指令助記符——串比較。將DS段SI指出的字數(shù)據(jù)減去ES段DI指出的字數(shù)據(jù)(不保存結(jié)果),然后根據(jù)相減結(jié)果設置標志位(兩個數(shù)據(jù)相等,則ZF=1)。 并由方向標志DF修改SI 和DI中的地址,即當DF=0時,地址都加2; 當DF=1時, 地址都減2 。
COMMON∶偽指令——段定義(組合類型)。該段與其它模塊中所有也說明為COMMON的同名,同'類別'段共享相同的存儲區(qū)域,即這些段的起始地址都相同,共享的公共存儲區(qū)域的長度是各模塊同名段中最大的長度。使用COMMON方式可以使不同模塊中的不同變量或標號作用于相同的存儲單元。
CS∶Code Segment,代碼段寄存器,存放當前運行的代碼段起始地址(高16位)。代碼段存放當前正在運行的程序。
CWD∶ 指令助記符——字轉(zhuǎn)換為雙字。把AX中字節(jié)的符號擴展到DX中,若(AX)的最高有效位為0 ,則(DX)=0000;若(AX)的最高有效位為1, 則(DX)=0FFFFH。
CX∶Count, 通用寄存器。在循環(huán)和串處理指令中用作隱含的計數(shù)器。其中CH是高 8位,CL是低 8位。
DAA∶ 指令助記符——加法的十進制調(diào)整(壓縮的BCD碼)。 無操作數(shù),調(diào)整 的加法結(jié)果在AL中。調(diào)整方法是,如果AL的低 4位大于9 或AF=1 ,則加 6 到AL并置AF=1 ;如果AL的高 4位大于 9或CF=1 ,則加60H 到AL,并 置CF=1 。
DAS∶ 指令助記符——減法的十進制調(diào)整(壓縮的BCD碼)。 調(diào)整方法是,若AF=1 或AL的低4位為A—F,則(AL)減06H,且AF置 1;若CF=1 或AL的高 4位為A—F,則(AL)減60H,且CF置1。
DB∶ 偽指令——定義字節(jié)。其后的每個操作數(shù)占用一個字節(jié)。若是字符串, 必須用引號' '括起來,字符串不能超過 255個字符,字符串自左至右以 字符的ASCII碼按地址遞增的順序依次存放。
DD∶ 偽指令——定義雙字。其后的每個操作數(shù)占用二個字(低字在前)。 DD還可以把其后的變量或標號的偏移地址和所在段首址存入存儲器內(nèi)指定 的雙字單元(即DD前面的變量)中,第一個字中存放DD后的變量的偏移地址, 第二個字中存放該變量所在段的段首址。
DEC∶ 指令助記符——減1 。操作數(shù)可以是寄存器或存儲器單元,但不能是段 寄存器或立即數(shù)。
DF∶Direction Flag,方向標志,在標志寄存器的第 10字節(jié),在串處理指令中控制處理信息的方向。DF為1時是反向,每次操作后使SI和DI減量(這樣就使串處理從高地址向低地址方向處理);當DF為0時是正向,使SI和DI增量。
DI∶Destination Index,目的變址寄存器。與ES聯(lián)用,用來確定數(shù)據(jù)段中某一存儲單元的偏移地址。在串處理指令中,DI指出目的操作數(shù)的地址,隱含段為當前的附加段。
DIV∶ 指令助記符——無符號數(shù)除法。 對于字節(jié)操作,16位被除數(shù)(若被除數(shù)為 8位,需用符號擴展的方法 ,即用CBW 指令擴展到16位)放在AX中, 8位除數(shù)為源操作數(shù),相除結(jié)果 ,8位商在AL中,而 8位余數(shù)在AH中。 對于字操作,32位被除數(shù)(若被除數(shù)為16位,用CWD 指令擴展到32位)放在DX和AX中,16位除數(shù)為源操作數(shù),相除結(jié)果,字(16位)商在AX中 ,字余數(shù)在DX中。 源操作數(shù)不能是立即操作數(shù),指令執(zhí)行后,源操作數(shù)的值不變。 如果商超過目標寄存器能存放的最大數(shù)值時,系統(tǒng)產(chǎn)生0 類中斷。 被除數(shù)若需要轉(zhuǎn)換為雙精度值時,一定不能用符號擴展,而只能將高16位送0("MOV DX,0")。
DQ∶ 偽指令——定義四字。其后的每個操作數(shù)占用四個字。
DS∶Data Segment,數(shù)據(jù)段寄存器。存放數(shù)據(jù)段的起始地址(高16位)。數(shù)據(jù)段存放當前運行程序所用的數(shù)據(jù),如果程序中使用了串處理指令,則其源操作數(shù)也存放在數(shù)據(jù)段中。 |
|
|
|
|
作者: wyc890618 2006-12-29 13:36 回復此發(fā)言 |
|
|
4 |
80X86 匯編指令符號大全(上)
|
|
DT∶ 偽指令——定義十字節(jié)。其后的每個操作數(shù)占用十個字節(jié)。
DUP∶ 復制操作符。DUP 前面的常量或表達式的值(正整數(shù))指明DUP 后面的括號中的操作數(shù)之重復次數(shù)。
DW∶ 偽指令——定義字。其后的每個操作數(shù)占用一個字(低字節(jié)在前,高字節(jié)在后)。DW可以給兩個字符組成的字符串(用' '括起來) 分配兩個字節(jié)的存儲單元(前一個字符在高字節(jié))。DW還可以把其后的變量或標號的偏移地址存入存儲器的指定單元(即DW前的變量)。
DX∶Data,通用寄存器。在作雙字長運算時,把DX和AX組合在一起存放一個雙字數(shù),DX用來存放高位字。此外,對某些I/O 操作,DX可用來存放 I/O的端口地址。其中DH是高 8位,DL是低 8位。
EA∶ 教材符號----某一存儲單元的偏移地址,即該單元到它所在段首址的字節(jié)距離。
ELSE∶偽指令——條件。條件不滿足時匯編ELSE至ENDIF之間的程序塊。
END∶ 偽指令——程序模塊結(jié)束。主程序模塊結(jié)束,END 后要接標號(存儲器地址),指出程序開始執(zhí)行的地址 。子程序不用。
ENDIF∶偽指令——條件(結(jié)尾)。
ENDM∶宏指令——①宏定義(結(jié)尾)。②重復塊(結(jié)尾)。
ENDP∶偽指令——過程(子程序)定義(結(jié)尾)。
ENDS∶偽指令——段定義或結(jié)構(gòu)定義(結(jié)尾)。
ES∶Extra Segment,附加段寄存器。 用于存放附加段的起始地址(高16位)。附加段是一個輔助的數(shù)據(jù)區(qū),也是串處理指令的目的操作數(shù)據(jù)存放區(qū)。
ESC∶指令助記符——交權(quán)給外部協(xié)處理器。是在大模式下使用的一條指令,它可以使外部協(xié)處理器從 8086/8088指令流中獲得一個操作碼和一個操作數(shù),并使用8086/8088 的尋址方式。指令后的操作碼是一個 6位的立即數(shù) ,其中 3位用來指明哪一個協(xié)處理器工作,另外 3位指明這個處理器執(zhí)行什么指令。隨后的源操作數(shù)若是寄存器,則8086/8088 直接將其內(nèi)容放置在數(shù)據(jù)總線上;如果這個源操作數(shù)是存儲變量,則8086/8088 從存儲器中取出操作數(shù)并放到數(shù)據(jù)總線上,從而使外部協(xié)處理器可以獲取這個操作數(shù),對它進行運算。
EQ∶ 關(guān)系運算符——相等。若滿足條件,輸出結(jié)果為全1 (所有的位),否則為全0 。
EQU∶ 等價偽指令 。格式為"符號名 EQU 表達式". EQU可以把它前面的符號定義為一個常量或一個能求出常數(shù)值的表達式,或定義為別的符號名,甚至定義為一條可執(zhí)行的命令。不得重復定義。 例一,"新變量名 EQU THIS DWORD",該語句將緊跟其后的變量重新定義為雙字類,以新變量名命名。數(shù)據(jù)存儲區(qū)首址不變。 例二,"新變量名 EQU WORD PTR 舊變量名",該語句將舊變量重新定義為字類型,以新變量名命名。數(shù)據(jù)存儲區(qū)首址不變。
EVEN∶偽指令。它使此語句后面的程序或數(shù)據(jù)塊的起始地址為偶數(shù)。
EXTRN∶偽指令——定義外部符號。格式是 EXTRN 符號名:類型 。表示本模塊中需要引用但卻是在其他模塊中定義說明為PUBLIC的那些符號(符號常量、變量、標號以及過程名)。符號類型必須與他們在其他模塊定義時的符號類型保持一致。
FLAGS∶ 標志寄存器(即PSW)。
GE∶ 關(guān)系運算符——大于等于。若滿足條件,輸出結(jié)果為全 1 (所有的位),否則為全0 。
GROUP∶ 偽指令——分組。把模塊中若干不同名的段集合成一個組,并賦予一個組名,使它們都裝在一個物理段中(64KB)。可以得到較緊湊的代碼,組內(nèi)各段間的跳轉(zhuǎn)都可以看作是段內(nèi)跳轉(zhuǎn)。 格式是 組名 GROUP <段名1,段名2,……>
GT∶ 關(guān)系運算符——大于。若滿足條件,輸出結(jié)果為全1 (所有的位),否則為全0 。
H∶ 數(shù)據(jù)類型后綴,表示十六進制常量。
HIGH∶ 字節(jié)分解運算符(操作符)。用來從運算對象(一個數(shù)或地址表達式)中分離出(取)高字節(jié)。
HLT∶ 指令助記符——停機。該指令使處理器處于暫停狀態(tài),該狀態(tài)可以由復位信號、非屏蔽中斷請求信號以及IF=1 情況下可屏蔽中斷信號清除。 |
|
|
|
|
作者: wyc890618 2006-12-29 13:36 回復此發(fā)言 |
|
|
5 |
80X86 匯編指令符號大全(上)
|
|
IDIV∶指令助記符——帶符號數(shù)除法。 對于字節(jié)操作,16位被除數(shù)(若被除數(shù)為 8位,需用符號擴展的方法,即用CBW 指令擴展到16位)放在AX中, 8位除數(shù)為源操作數(shù),相除結(jié)果,8位商在AL中,而 8位余數(shù)在AH中。 對于字操作,32位被除數(shù)(若被除數(shù)為16位,用CWD 指令擴展到32位)放在DX和AX中,16位除數(shù)為源操作數(shù),相除結(jié)果,字(16位)商在AX中,字余數(shù)在DX中。 余數(shù)的符號必須和被除數(shù)的符號相同。
IF∶Interrupt Flag,①中斷標志, 在標志寄存器的第9字節(jié),當IF為1時,允許中斷,即CPU響應外設的中斷請求。②偽指令——條件(表達式的值不等于0 為真)。若條件成立,則匯編整個程序塊;但中間若有ELSE命令,則只匯編到ELSE;當條件不成立時,只匯編從ELSE到ENDIF 之間的程序塊。
IF1∶ 偽指令——條件(若是第一趟掃描,條件為真)。
IF2∶ 偽指令——條件(若是第二趟掃描,條件為真)。
IFB∶ 偽指令——條件(若其后的參數(shù)對應的實參存在,為真)。
IFDEF∶ 偽指令——條件(若其后的符號已定義或被說明為外部符號,則條件為真)。
IFDIF∶偽指令——條件(若兩個字符串參數(shù)不相同,則條件為真)。
IFE∶ 偽指令——條件(表達式的值等于0 時,條件為真)。
IFIDN∶偽指令——條件(若兩個字符串參數(shù)相同,則條件為真)。
IFNB∶偽指令——條件(若其后的參數(shù)對應的實參不存在,為真)。
IFNDEF∶偽指令——條件(若其后的符號未定義或未被說明為外部符號,則條件為真)。
IMUL∶指令助記符——帶符號的整數(shù)乘法。 對于字節(jié)乘法,(AL)*(源操作數(shù))---> AX; 對于字乘法, (AX)*(源操作數(shù))---> AX和DX; 若結(jié)果的高半部分(AH或DX,對應字節(jié)和字)是低半部分的符號擴展,則CF=0,OF=0; 否則,CF=1,OF=1,表示在AH(對于字節(jié))或DX(對于字)中包含結(jié)果的有效值。
IN∶指令助記符——輸入。允許把一個字或字節(jié)由輸入端口(port)傳送到AX或AL。端口地址可以用直接尋址(IN AL n),也可用DX間接尋址(IN AL,DX)。8 位地址直接尋址,可尋址256 個端口;DX間接尋址,可尋址64K個端口。
INC∶ 指令助記符——加1。 操作數(shù)可以是寄存器或存儲器單元,但不能是段寄存器或立即數(shù)。狀態(tài)標志CF不受影響。
INCLUDE∶ 偽指令。當宏匯編程序匯編到INCLUDE偽指令時,立即打開INCLUDE指示的文件,并把它匯編到當前的源文件中去,直到該文件被匯編結(jié)束,匯編程序繼續(xù)匯編INCLUDE偽指令之后的語句。INCLUDE可以嵌套。
INT∶ 指令助記符——中斷調(diào)用。操作數(shù)是用戶定義的中斷類型,它可以實現(xiàn)256種不同的中斷。當指令執(zhí)行時,首先將標志寄存器內(nèi)容進棧,清除IF和TF標志并將當前CS內(nèi)容進棧;然后將中斷類型乘以4 ,得到中斷向量地址;最后取中斷向量的第二個字送CS,將IP進棧,取中斷向量的第一個字送IP。由于CS:IP指向中斷服務程序,因此可以實現(xiàn)指定中斷類型的段間調(diào)用。
INTO∶指令助記符——溢出中斷。只有OF=1 時才進入溢出中斷(IF和TF被改為0)。
IP∶Instruction Pointer,控制寄存器——指令指針寄存器。用來存放代碼段中指令的偏移地址。在程序運行的過程中,它始終指向下一條指令的首地址。它與CS聯(lián)用,確定下一條要執(zhí)行的指令的物理地址。IP寄存器不能用于算術(shù)運算,也不能直接存取,但可以用控制轉(zhuǎn)移指令加以改變。
IRET∶指令助記符——中斷返回。執(zhí)行該指令時,從棧中退出三個16位的值,分別送IP、CS和標志寄存器。
IRP∶ 宏指令——重復塊(以ENDM結(jié)束)。IRP 形參,<實參1,實參2,…> 這種宏指令用于帶立即數(shù)的偽操作。實參是用戶指定的立即數(shù),它的個數(shù)就是重復的次數(shù),每重復一次,就用一個實參代替形參。
IRPC∶宏指令——重復塊(以ENDM結(jié)束)。IRPC 形參,字符串這種宏指令用于帶字符串的重復偽操作。重復次數(shù)由字符串中字符個數(shù)確定。每次重復,依次用字符串中的一個字符替代形參,直到字符替代完畢。
JA∶ 無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)高于轉(zhuǎn)移(等價JBE)。CF=0,且ZF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JAE∶ 無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)高于或等于轉(zhuǎn)移(等價JNB)。CF=0 , 或ZF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JB∶ 無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)低于轉(zhuǎn)移(等價JNAE)。CF=1, 且ZF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JBE∶ 無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)低于或等于轉(zhuǎn)移(等價JNA)。CF=1 或ZF=1 則轉(zhuǎn)移。
JC∶ 簡單條件轉(zhuǎn)移指令助記符——有進位轉(zhuǎn)移。CF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移,產(chǎn)生 8位的位移量,即轉(zhuǎn)移地址的偏移量在—128 到+127之間)。
JCXZ∶指令助記符——條件轉(zhuǎn)移。(CX)=0, 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移?)。
JE∶ 簡單條件轉(zhuǎn)移指令助記符——(兩數(shù)比較)相等轉(zhuǎn)移(同JZ)。前次操作結(jié)果為0,ZF=1則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JG∶有符號數(shù)條件轉(zhuǎn)移指令助記符——(有符號數(shù)比較)大于轉(zhuǎn)移(等價JNLE)。SF和OF同號,且ZF=0 時轉(zhuǎn)移。(段內(nèi)直接短轉(zhuǎn)移)
JGE∶ 有符號數(shù)條件轉(zhuǎn)移指令助記符——(有符號數(shù)比較)大于或等于轉(zhuǎn)移(等價于JNL)。 當SF和OF同號,或ZF=1, 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JL∶ 有符號數(shù)條件轉(zhuǎn)移指令助記符——(有符號數(shù)比較)小于轉(zhuǎn)移(等價于JNGE)。當SF和OF異號,且ZF=0 時轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。 |
|
|
80X86 匯編指令符號大全 (下)
JLE∶ 指令助記符——(有符號數(shù)比較)小于或等于轉(zhuǎn)移(等價于JNG)。當SF和OF異號或ZF=1時轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JMP∶ 指令助記符——無條件轉(zhuǎn)移。無條件轉(zhuǎn)移到指令所指示的目標地址,并從該地址開始執(zhí)行。目標地址可以從指令中直接得到,也可以從指令中給定的寄存器或存儲器中得到。 一、段內(nèi)直接短轉(zhuǎn)移 JMP SHORT 標號。標號是轉(zhuǎn)移的目的地址,由它確定一個 8位位移量。這個位移量被加到IP寄存器中。位移量是一個帶符號數(shù),負數(shù)表示向前轉(zhuǎn)移,正數(shù)表示向后轉(zhuǎn)移。轉(zhuǎn)移范圍是—128至+127。 二、段內(nèi)直接近轉(zhuǎn)移 JMP NEAR PTR 標號。 標號是轉(zhuǎn)移的目的地址,由它確定一個16位位移量。這個位移量被加到IP寄存器中。位移量是一個帶符號數(shù),負數(shù)表示向前轉(zhuǎn)移,正數(shù)表示向后轉(zhuǎn)移。轉(zhuǎn)移范圍是—32768至+32767。 三、段內(nèi)間接轉(zhuǎn)移 ①JMP AX (段內(nèi)寄存器間接轉(zhuǎn)移);②JMP [BX](段內(nèi)存儲器間接轉(zhuǎn)移)。將指令中給定的寄存器或存儲單元中的內(nèi)容送到IP中。 四、段間直接轉(zhuǎn)移 JMP FAR PTR 標號。 標號為符號地址。
JNB∶ 無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)不低于轉(zhuǎn)移(等價JAE)。CF=0,或ZF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNBE∶無符號數(shù)條件轉(zhuǎn)移指令助記符——(無符號數(shù)比較)不低于且不等于轉(zhuǎn)移(等價JA)。CF=0, 且ZF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNC∶ 簡單條件轉(zhuǎn)移指令助記符——前次操作無進或進位位轉(zhuǎn)移。CF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNE∶ 簡單條件轉(zhuǎn)移指令助記符——不相等轉(zhuǎn)移(同JNZ)。前次操作結(jié)果不等于0,ZF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNG∶ 指令助記符——(有符號數(shù)比較)不大于轉(zhuǎn)移(等價于JLE)。當SF和OF異號或ZF=1時轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNGE∶指令助記符——(有符號數(shù)比較)不大于且不等于轉(zhuǎn)移(等價于JL)。當SF和OF異號,且ZF=0 時轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNL∶ 指令助記符——(有符號數(shù)比較)不小于時轉(zhuǎn)移(等價于JGE)。 當SF和OF同號,或ZF=1, 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNLE∶指令助記符——(有符號數(shù)比較)不小于且不等于轉(zhuǎn)移(等價JG)。SF和OF同號,且ZF=0 時轉(zhuǎn)移。
JNO∶簡單條件轉(zhuǎn)移指令助記符——前次操作無溢出轉(zhuǎn)移。OF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNP∶ 簡單條件轉(zhuǎn)移指令助記符——奇校驗轉(zhuǎn)移。PF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNS∶ 簡單條件轉(zhuǎn)移指令助記符——前次操作結(jié)果為正數(shù)轉(zhuǎn)移。SF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JNZ∶ 簡單條件轉(zhuǎn)移指令助記符——不相等轉(zhuǎn)移(同JNE)。ZF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JO∶ 簡單條件轉(zhuǎn)移指令助記符——前次操作溢出轉(zhuǎn)移。OF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JP∶ 簡單條件轉(zhuǎn)移指令助記符——偶校驗轉(zhuǎn)移。前次操作結(jié)果中1的個數(shù)是偶數(shù),PF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JPE∶ 簡單條件轉(zhuǎn)移指令助記符——偶校驗轉(zhuǎn)移。前次操作結(jié)果中1的個數(shù)是偶數(shù),PF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JPO∶ 簡單條件轉(zhuǎn)移指令助記符—奇校驗轉(zhuǎn)移。PF=0 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JS∶ 簡單條件轉(zhuǎn)移指令助記符——前次操作結(jié)果為負數(shù)轉(zhuǎn)移。SF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
JZ∶ 簡單條件轉(zhuǎn)移指令助記符——相等轉(zhuǎn)移(同JE)。ZF=1 則轉(zhuǎn)移(段內(nèi)直接短轉(zhuǎn)移)。
LABLE∶ 定義符號名偽指令——為當前存儲單元定義一個指定類型的變量或標號。 一、LABLE 與變量連用。 例 TIMB LABLE BYTE TIMW DW 4142H 第一句給第二句定義的字變量TIMW取一個新名字TIMB,并且修改類型屬性為字節(jié)。以后如果以字類型訪問該變量時,應使用變量名TIMW,以字節(jié)類型訪問該變量時,應使用變量名TIMB。 二、LABLE 與標號連用。 例 POINTF LABLE FAR POINTN:MOV AX,[BX+SI] 第一句給第二句隱含定義的近標號POINTN取一個新名字POINTF,并將類型屬性修改為FAR 。這樣就允許作為 其他代碼段中轉(zhuǎn)移或調(diào)用指令的目標標號(這時標號是POINTF)。
LAHF∶指令助記符——標志寄存器(PSW)低8位內(nèi)容送AH中。
LDS∶ 指令助記符——取地址指針到數(shù)據(jù)段寄存器。要求源操作數(shù)是一個雙字長存儲器操作數(shù),目的操作數(shù)是16位通用寄存器、指針或變址寄存器,但不能是段寄存器。指令執(zhí)行時,雙字長存儲器操作數(shù)中的低地址傳送到指定的寄存器中,高地址傳送到DS寄存器中。 例:LDS SI,DATA_SEG[DI] 由DATA_SEG[DI]可以得到在數(shù)據(jù)段的有效地址EA(即段內(nèi)偏移量)。在EA和EA+2中存放著目標指針。EA存放的是目標指針的段內(nèi)偏移量,送至SI;EA+2存放的是目標指針的段地址,送至DS。 例:變量名一 DD 變量名二 ...... LDS SI 變量名一 變量名二所在數(shù)據(jù)段的EA和段地址存放在變量名一中,EA送至SI,EA+2存放的段地址送至DS。
LE∶ 關(guān)系運算符——小于等于。若滿足條件,輸出結(jié)果為全 1(所有的位),否則為全0 。
LEA∶指令助記符——取有效地址。將存儲器操作數(shù)的偏移地址傳送到通用寄存器、指針或變址寄存器中。該指令常用來建立串操作指令所需要的寄存器指針。 例一 LEA SI,變量名(與MOV SI OFFSET 變量名 等效); 例二 LEA AX,[AX] (將SI所指存儲單元的EA送至AX,而MOV AX,[SI]送的是該存儲單元存放的內(nèi)容)
LENGTH∶數(shù)值返回運算符。其加在一個變量名前面,返回的數(shù)值是數(shù)組變量的元素個數(shù)。如果變量是用DUP 說明的,則返回DUP前面的數(shù)值;如果沒有DUP 說明的,則返回的值總是1。
LES∶ 指令助記符——取地址指針到數(shù)據(jù)段寄存器。要求源操作數(shù)是一個雙字長存儲器操作數(shù),目的操作數(shù)是16位通用寄存器、指針或變址寄存器,但不能是段寄存器。指令執(zhí)行時,雙字長存儲器操作數(shù)中的低地址傳送到指定的寄存器中,高地址傳送到ES寄存器中。
LDCK∶ 指令助記符——封鎖總線。加在任何指令前面的單字節(jié)前綴指令,配合用來維持總線的鎖存信號,直到與其配合的指令執(zhí)行完為止。
LOCAL∶ 宏指令——局部符號(變量,標號)定義。在宏擴展時,匯編程序給LOCAL 后的形式參數(shù)指定特殊的符號,然后用這些符號替換宏指令體中LOCAL 指出的形式參數(shù)。這樣可避免這些符號在多次調(diào)用宏時發(fā)生重復定義。
LODS∶指令助記符——裝入串。一般用LODSB或LODSW。
LODSB∶ 指令助記符——字節(jié)裝入(從字節(jié)串中取數(shù))。它將DS段SI指出的字節(jié)數(shù)據(jù)送入AL寄存器中,并根據(jù)方向標志DF修改SI中的地址。即當DF=0時,地址加1 ;DF= 1 時,地址減1 。
LODSW∶ 指令助記符——字裝入(從字串中取數(shù))。 它將DS段SI指出的字數(shù)據(jù)送入AX寄存器中,并根據(jù)方向標志DF修改SI中的地址。即當DF=0 時,地址加2 ;DF= 1 時,地址減2 。
LOOP∶指令助記符——循環(huán)控制。每執(zhí)行一次,CX的內(nèi)容減1 ,若減1 后不為0 ,則轉(zhuǎn)移到目標地址;否則,執(zhí)行LOOP之后的指令。
LOOPE∶ 指令助記符——循環(huán)控制(等于LOOPZ)。每執(zhí)行一次,CX的內(nèi)容減1, 若減1 后不為0 ,且ZF=1, 則轉(zhuǎn)移到目標地址;否則,執(zhí)行LOOPE 之后的內(nèi)容。
LOOPZ∶指令助記符——循環(huán)控制(等于LOOPE)。每執(zhí)行一次,CX的內(nèi)容減1 ,若減1 后不為0 ,且ZF=1, 則轉(zhuǎn)移到目標地址;否則,執(zhí)行LOOPZ 之后的內(nèi)容。
LOOPNE∶指令助記符——循環(huán)控制(等于LOOPNZ)。每執(zhí)行一次,CX的內(nèi)容減1 ,若減1 后不為0 ,且ZF=0, 則轉(zhuǎn)移到目標地址;否則,執(zhí)行LOOPNE之后的內(nèi)容。
LOOPNZ∶指令助記符——循環(huán)控制(等于LOOPNE)。每執(zhí)行一次,CX的內(nèi)容減1 ,若減1 后不為0 ,且ZF=0, 則轉(zhuǎn)移到目標地址;否則,執(zhí)行LOOPNZ之后的內(nèi)容。
LOW∶ 字節(jié)分解運算符(操作符)。用來從運算對象(一個數(shù)或地址表達式)中分離出(取)低字節(jié)。
LT∶ 關(guān)系運算符——小于。若滿足條件,輸出結(jié)果為全1 (所有的位),否則為全0 。
MACRO∶ 宏指令——宏定義。
MASK∶運算符。使得記錄中指定字段各位均為1 ,其他各位均為0 。
MEMORY∶偽指令——段定義(組合類型)。該段在存儲器中應該定位在所有其他段的最高地址。如果不止一個段選用MEMORY方式,則把第一個遇到的段作MEMORY處理,而其他段均作COMMON方式處理。
MOD∶ 算術(shù)運算符——模除(取整除后的余數(shù))。
MOV∶ 指令助記符——通用數(shù)據(jù)傳送。注意,①兩個段寄存器之間不能直接傳送數(shù)據(jù);②兩個儲存單元之間不能直接傳送數(shù)據(jù)(可以用MOVS);兩個操作數(shù)中必須有一個是寄存器或立即數(shù);③立即數(shù)和段寄存器CS不能作為目的操作數(shù)。
MOVS∶指令助記符——串傳送。與MOVSB和MOVSW相似,但必須說明數(shù)據(jù)串類型(字或字節(jié))。
MOVSB∶ 指令助記符——串(字節(jié))傳送。把由SI指向的數(shù)據(jù)段中的一個字節(jié)數(shù)據(jù)傳送到由DI指向的附加段內(nèi)一個字節(jié)存儲單元中去,并同時根據(jù)方向標志對SI和DI中的地址進行修改。當DF=0時, 地址都加1 ;當DF=1時 ,地址都減1 。
MOVSW∶ 指令助記符——串(字)傳送。把由SI指向的數(shù)據(jù)段中的一個字數(shù)據(jù)傳送到由DI指向的附加段內(nèi)一個字存儲單元中去,并同時根據(jù)方向標志對SI和DI中的地址進行修改。當DF=0時, 地址都加2 ;當DF=1時,地址都減2 。
MUL∶ 指令助記符——無符號數(shù)乘法。 字節(jié)乘法:(AL)*(源操作數(shù))->AX 字乘法: (AX)*(源操作數(shù))->DX和AX 若結(jié)果的高半部分(AH或DX,對應字節(jié)和字)為非0 值,則CF和OF置1;否則CF和OF清0。
NAME∶偽指令——模塊定義。程序?qū)o定的程序模塊取模塊名。格式是,NAME 模塊名。 匯編處理時,一個模塊就是一個獨立的匯編單位。匯編處理只進行到模塊結(jié)束語句END 為止。如果該模塊是主模塊,END 語句可以指出一個標號,它表示該程序的啟動地址。
NE∶關(guān)系運算符——不等。若滿足條件,輸出結(jié)果為全1 (所有的位),否則為全0 。
NEG∶ 指令助記符——求補。將目的操作數(shù)的每一位求反(包括符號位)后加1.若在字節(jié)操作時對—128,或在字操作時對—32768取補,則操作數(shù)不變,但溢出標志OF置位。操作數(shù)可以是寄存器或存儲器單元,但不能是段寄存器或立即數(shù)。結(jié)果送回目的操作數(shù)。執(zhí)行結(jié)果不但影響標志位AF、CF、OF、PF、SF和ZF,而且一般總是置CF=1 (除非操作數(shù)為0)。 NONE∶偽指令——段定義(組合類型)。本段與其它段邏輯上不發(fā)生關(guān)系,每段都有自己的基地址。這是隱含的組合類型。
NOP∶ 指令助記符——空操作。用于程序調(diào)試。
NOT∶ 邏輯運算符(在語句的操作數(shù)部分)或邏輯操作指令助記符(在語句的操作碼部分)——按位非(求反)。將目的地址中的內(nèi)容逐位取反后再送入目的地址中。
OF∶Overflow Flag, 溢出標志,在標志寄存器的第11字節(jié)。在運算過程中,如操作數(shù)超出了機器能表示的范圍,此時OF 置1。作加法時,OF位是根據(jù)操作數(shù)的符號及其結(jié)果情況來設置的,若兩個操作數(shù)的符號相同,而結(jié)果的符號與之相反時,OF置1,否則置0。
OFFSET∶數(shù)值返回運算符。其加在一個變量名或標號前面,返回的數(shù)值是該變量名或標號所在的段的偏移地址。
OPD∶ 教材符號--目的操作數(shù)。
OPR∶ 教材符號--源操作數(shù)。
OR∶ 邏輯運算符(在語句的操作數(shù)部分)或邏輯操作指令助記符(在語句的操作碼部分)——按位或。進行“或”運算的兩位中任一位是 1,則結(jié)果為1 。
ORG∶ 偽指令——定位(置匯編地址計數(shù)器)。在每段源程序或數(shù)據(jù)塊的開始,指明此語句后面的程序或數(shù)據(jù)塊的起始地址,其余指令或數(shù)據(jù)就連續(xù)存放在以后的地址單元中。 例一 ORG $+10 表示跳過10個字節(jié)。 例二 ORG 數(shù)值表達式(值為0-65535) 表示$改為數(shù)值表達式的值。
OUT∶ 指令助記符——輸出。把AX或AL中的內(nèi)容傳送到一個輸出端口。尋址方式與IN相同。
PA∶教材符號--某一存儲單元的物理地址。 對于指令,PA=(CS)左移4位+(IP); 對于堆棧段數(shù)據(jù),PA=(SS)左移4位+(SP);或PA=(SS)左移4位+(BP); 對于數(shù)據(jù)段和附加數(shù)據(jù)段數(shù)據(jù),PA=(DS或ES)+該變量的偏移地址。
PARA∶偽指令——段定義(定位類型方式)。規(guī)定在定位時每個段的起始地址總是16的整倍數(shù),最后四位二進制數(shù)一定是0 。這種定位方式最簡單,但段間往往有空隙(最多為15個字節(jié))。缺省定位方式是按PARA定位。
PAGE∶①偽指令——段定義(定位類型方式)。要求段起始地址是 256的整倍數(shù),即段的邊界必須是頁的邊界。段地址的最低兩位(16進制數(shù))必須是0 。②偽指令——格式控制。指定匯編程序所產(chǎn)生的列表文件每頁多少行(10—255), 每行多少字符(60-132)。或指定輸出新的一頁(用+號)。
PF∶Parity Flag,奇偶標志,在標志寄存器的第2字節(jié),當運算結(jié)果(指低8位)中1的個數(shù)為偶數(shù)時置1,否則置0。該標志主要用來檢測數(shù)據(jù)在傳輸過程中的錯誤。
POP∶指令助記符——出棧。將棧頂元素彈出送至某一寄存器,段寄存器(CS除外)或存儲器中。首先將SP指的內(nèi)容送至低8位,SP加1;再將SP指的內(nèi)容送入高8位,SP再加1。
POPF∶指令助記符——將堆棧頂端的字數(shù)據(jù)送入標志寄存器。對于TF和OF置位可先將數(shù)值置于AX中,壓入堆棧,再用POPF送入標志寄存器。此方式對TF和OF標志位是唯一可行的置位方法。
PROC∶偽指令——過程(子程序)定義(起始)。定義一個子程序,并說明它是NEAR或FAR 過程。定義的過程如果由 DOS直接裝入并啟動執(zhí)行,則該過程必須定義為 FAR過程。
PSW∶Program Status Word,程序狀態(tài)字寄存器,由條件碼標志(OF、SF、ZF、AF、PF、CF)和控制標志(DF、IF、TF)構(gòu)成。 11 10 9 8 7 6 4 2 0 ─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│ ─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
PTR∶ 修改屬性運算符。用來明確指出變量、標號或地址表達式的類型屬性( 只在所在的指令內(nèi)有效)。類型放在PTR 之前,可以是BYTE、WORD、 DWORD、NEAR、FAR。
PUBLIC∶①偽指令——段定義(組合類型)。該段與其它模塊中說明為PUBLIC類型的同名同'類別'段組合起來,形成一個物理段(小于等于64K),公用一個段基址,②偽指令——定義全局符號。表示該模塊中定義的哪些符號常量、變量、標號以及過程名(幾個模塊公用的過程一般都是FAR 過程)等可以被其他模塊所引用。
PURGE∶ 宏指令——取消宏定義。
PUSH∶指令助記符——進棧。把寄存器,段寄存器中的一個字數(shù)據(jù)壓入堆棧。高8位先進,SP減1;低8位后進,SP再減1。
PUSHF∶ 指令助記符——把標志寄存器的內(nèi)容壓入堆棧。在子程序調(diào)用和中斷服務中可用來保護標志位(恢復用POPF)。
RCL∶ 指令助記符——帶進位循環(huán)左移。 格式為:RCL 目的操作數(shù),1 或RCL 目的操作數(shù),CL (其中CL中存放的是移動次數(shù)) ┌─┐ ┌───────────────┐ ┌│CF│← │ ←───────────── │←┐ │└─┘ └───────────────┘ │ └───────────────────────┘
RCR∶ 指令助記符——帶進位循環(huán)右移。 ┌───────────────┐ ┌─┐ ┌→│ ─────────────→ │→│CF│─┐ │ └───────────────┘ └─┘ │ └───────────────────────┘
RECORD∶偽指令——設計一個單字節(jié)或雙字節(jié)的記錄格式。指令格式為, 記錄名 RECORD 字段名1:=表達式,字段名2:=表達式 …… 記錄定義后,必須利用初始化記錄的方法來定義存儲器變量,格式為, 變量名 記錄名 <表達式,表達式,……> 或變量名 記錄名 數(shù)量DUP(<表達式,……>)
REP∶ 指令助記符——重復前綴。它可以使串指令反復執(zhí)行(CX不等于0 就執(zhí)行),每執(zhí)行一次,CX的內(nèi)容減1 。
REPE∶指令助記符——重復前綴。當兩串相等,即ZF=1時 ,它可以使串指令反復執(zhí)行(CX不等于0 就執(zhí)行),每執(zhí)行一次,CX的內(nèi)容減1 。(與REPZ完全一樣)
REPNE∶ 指令助記符——重復前綴。當兩串不相等,即ZF=0時, 它可以使串指令反復執(zhí)行(CX不等于0 就執(zhí)行),每執(zhí)行一次,CX的內(nèi)容減1 。(與REPNZ完全一樣)
REPNZ∶ 指令助記符——重復前綴。當兩串不相等,即ZF=0時, 它可以使串指令反復執(zhí)行(CX不等于0 就執(zhí)行),每執(zhí)行一次,CX的內(nèi)容減1 。(與REPNE完全一樣)
REPT∶宏指令——重復塊(以ENDM結(jié)束)。 格式為: REPT 重復次數(shù) 重復塊 ENDM 這種宏指令用于確定重復次數(shù)。
REPZ∶指令助記符——重復前綴。當兩串相等,即ZF=1時, 它可以使串指令反復執(zhí)行(CX不等于0 就執(zhí)行),每執(zhí)行一次,CX的內(nèi)容減1 。(與REPE完全一樣)
RET∶ 指令助記符——返回。 一、段內(nèi)返回。先將棧頂?shù)淖炙腿隝P,然后SP增2 。若帶立即數(shù),SP再加立即數(shù)(丟棄一些在執(zhí)行CALL之前入棧的參數(shù))。 二、段間返回。棧頂?shù)淖炙腿隝P后(SP增 2),再將棧頂?shù)淖炙腿隒S,SP再增2 。若帶立即數(shù),則SP再加立即數(shù)。
ROL∶ 指令助記符——循環(huán)左移。 格式為:ROL 目的操作數(shù),1 或ROL 目的操作數(shù),CL (其中CL中存放的是移動次數(shù)) ┌─┐ ┌───────────────┐ │CF│←┬│ ←───────────── │←┐ └─┘ │└───────────────┘ │ └──────────────────┘
ROR∶ 指令助記符——循環(huán)右移。 ┌───────────────┐ ┌─┐ ┌→│ ─────────────→ │┬→│CF│ │ └───────────────┘│ └─┘ └──────────────────┘
SAHF∶指令助記符——將AH 寄存器的內(nèi)容送入標志寄存器(PSW)的低字節(jié)中,標志寄存器高八位保持不變。
SAL∶ 指令助記符——帶符號數(shù)的算術(shù)左移。經(jīng)常用來乘以2。 格式為: SAL 目的操作數(shù),1 當移位次數(shù)大于 1時,則移位次數(shù)應預先置于CL寄存器中。 格式為: SAL 目的操作數(shù),CL ┌─┐ ┌───────────────┐ │CF│←│ ←───────────── │← 0 └─┘ └───────────────┘ 如果符號位發(fā)生變化時,就將 1送到OF標志,表示移位前操作數(shù)的最高位與移位后的最高位不同。
SAR∶ 指令助記符——帶符號數(shù)的算術(shù)右移。符號位保持不變。經(jīng)常用來除以2。當移位次數(shù)大于 1時,則移位次數(shù)應預先置于CL寄存器中。 ┌───────────────┐ ┌─┐ ┌→│ ─────────────→ │→│CF│ │ └───────────────┘ └─┘ └──┘
SBB∶ 指令助記符——帶借位減法(減去CF的值)。用于多字節(jié)減法運算。兩高位字相減,并減去低位的借位CF。
SCAS∶指令助記符——串搜索(掃描)。通常用SCASB或SCASW。
SCASB∶ 指令助記符——字節(jié)串掃描(搜索)。用AL寄存器中的內(nèi)容與由ES段DI指定的一個字節(jié)數(shù)據(jù)進行比較(減),若相等(結(jié)果為0) ,ZF=1 。并依方向標志DF的值修改DI中的地址,即DF=0 ,地址加1 ;DF=1 ,地址減 1。
SCASW∶ 指令助記符——字串掃描(搜索)。 用AX寄存器中的內(nèi)容與由ES段DI 指定的一個字數(shù)據(jù)進行比較(減),若相等(結(jié)果為0) ,ZF=1 。并依方向標志DF的值修改DI中的地址,即DF=0 ,地址加2 ;DF=1 ,地址減 2。
SEG∶ 數(shù)值返回運算符。其加在一個變量名或標號前面,返回的數(shù)值是該變量名或標號所在的段基址(段寄存器的內(nèi)容)。
SEGMENT∶ 段定義偽指令 。格式為 段名 SEGMENT [定位方式][組合方式]['類別']。在定義段的時候,還可以在SEGMENT 語句中給出該段的類別,類別名是一個用單括號括起來的字符串。進行連接處理時,LINK程序把類別名相同的所有段放在連續(xù)的存儲區(qū)域內(nèi)。同類的各個段在連接時,先出現(xiàn)的在前,后出現(xiàn)的在后。
SF∶Sign Flag, 符號標志,在標志寄存器的第7字節(jié).記錄運算結(jié)果的符號,結(jié)果為負時置1。
SHL∶ 一、算術(shù)運算符——左移(移1位相當于乘以2)。 二、指令助記符——無符號數(shù)的邏輯左移。經(jīng)常用來乘以2。 當移位次數(shù)大于1 時,則移位次數(shù)應預先置于CL寄存器中,寫成“SHL OPD CL”。 ┌─┐ ┌───────────────┐ │CF│←| ←───────────── │← 0 └─┘ └───────────────┘
SHORT∶ 屬性運算符(操作符)。用來指定JMP 指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向(目標)地址與本指令地址的字節(jié)距離在-128到+127之間。
SHR∶ 一、算術(shù)運算符——右移(移1位相當于除以2)。 二、指令助記符——無符號數(shù)的邏輯右移。經(jīng)常用來除以2。 當移位次數(shù)大于 1時,則移位次數(shù)應預先置于CL寄存器中,寫成“SHR …,CL”。 ┌───────────────┐ ┌─┐ 0→ │ ─────────────→ │→│CF│ └───────────────┘ └─┘
SI∶Source Index,源變址寄存器。與DS聯(lián)用,用來確定數(shù)據(jù)段中某一存儲單元的偏移地址。在串處理指令中,SI指出源操作數(shù)的地址,隱含段為當前的數(shù)據(jù)段。
SIZE∶數(shù)值返回運算符。其加在一個變量前面,返回的是數(shù)組變量所占的總字節(jié)數(shù)(LENGTH和TYPE返回值的乘積)。 |
test屬于邏輯運算指令
功能: 執(zhí)行BIT與BIT之間的邏輯運算
測試(兩操作數(shù)作與運算,僅修改標志位,不回送結(jié)果).
Test對兩個參數(shù)(目標,源)執(zhí)行AND邏輯操作,并根據(jù)結(jié)果設置標志寄存器,結(jié)果本身不會保存。EST AX,BX 與 AND AX,BX 命令有相同效果
語法: TEST r/m,r/m/data
影響標志: C,O,P,Z,S(其中C與O兩個標志會被設為0)
運用舉例:
1.Test用來測試一個位,例如寄存器:
test eax, 100b; b后綴意為二進制
jnz ******; 如果eax右數(shù)第三個位為1,jnz將會跳轉(zhuǎn)
我是這樣想的,jnz跳轉(zhuǎn)的條件是ZF=0,ZF=0意味著ZF(零標志)沒被置位,即邏輯與結(jié)果為1.
2.Test的一個非常普遍的用法是用來測試一方寄存器是否為空:
test ecx, ecx
jz somewhere
如果ecx為零,設置ZF零標志為1,Jz跳轉(zhuǎn)
*******************************************************************************
CMP屬于算術(shù)運算指令
功能: 比較兩個值(寄存器,內(nèi)存,直接數(shù)值)
語法: CMP r/m,r/m/data
標志位: C,P,A,Z,O
CMP比較.(兩操作數(shù)作減法,僅修改標志位,不回送結(jié)果).
cmp實際上是只設置標志不保存結(jié)構(gòu)的減法,并設置Z-flag(零標志).
零標志很像carry,也是內(nèi)部標志寄存器的一位.
例如:
Cmp eax, 2; 如果eax-2=0即eax=2就設置零標志為1
Jz ****; 如果設置了零標志就跳轉(zhuǎn)
*******************************************************************************
我得出的結(jié)論
test邏輯與運算結(jié)果為零,就把ZF(零標志)置1;
cmp 算術(shù)減法運算結(jié)果為零,就把ZF(零標志)置1.
?