㈠ 幾個匯編的問題:1.8086匯編語言指令由幾部分組成各部分的作用是什麼
1.8086匯編語言指令由標號、操作碼、操作數和注釋組成,其中標號和注釋可以省略,操作碼指出指令要過盛的功能,操作數指出完成的對象.
2.變數和標號的區別是變數由偽指令定義,標號是指令前面的符號,變數也偽指令定義符之間由空格分隔,標號與指令助詞符之間由冒號分隔。
3.開發匯編語言源程序的主要步驟有分析問題、確定演算法、畫流程圖、寫代碼、調試。
4.匯編語言源程序的一般結構為:
;程序模板
SSEG
SEGMENT
PARA
STACK
'stack'
dw
100h
p(0)
;初始化堆棧大小為100
SSEG
ENDS
DSEG
SEGMENT
;數據段:在此處添加程序所需的數據
DSEG
ENDS
ESEG
SEGMENT
;附加段:在此處添加程序所需的數據
ESEG
ENDS
CSEG
SEGMENT
assume
cs:CSEG,
ds:DSEG,
es:ESEG,
ss:SSEG
MAIN
PROC
FAR
;主程序入口
mov
ax,
dseg
mov
ds,
ax
mov
ax,eseg
mov
es,
ax
;此處添加主程序代碼
;按任意鍵退出
mov
ah,1
int
21h
mov
ax,
4c00h
;程序結束,返回到操作系統系統
int
21h
MAIN
ENDP
CSEG
ENDS
END
MAIN
5.說明寫列語句所分配的存儲空間及初始化的數據值.
(1)BYTE_VAR
DB
'BYTE',21,-42H,3DUP(0,?,2DUP(2,3),?)
為變數BYTE_VAR分配了27個位元組空間,初始化的數據值依次為:
42H,59H,54H,45H,15H,BEH,00H,00H,02H,03H,02H,03H,00H,00H,00H,02H,03H,02H,03H,00H,00H,00H,02H,03H,02H,03H,00H
(2)WORD_VAR
DW
5DUP(4,2,0),?,-8,'BY','TE',256H
為變數WORD_VAR定義了20個字空間,初始化的數據值依次為:
04H,00H,02H,00H,00H,00H,04H,00H,02H,00H,00H,00H,04H,00H,02H,00H,00H,00H,00H,00H,F8H,FFH,59H,42H,45H,54H,56H,02H
㈡ 匯編語言中SAR和SHR指令的區別
1、方向不同
通過gdb動態調試得到每次循環的值進行比對,才發現出現錯誤的具體原因。sar在符號位為1時,右移時填充1,符號位為0時填充0。而python默認的右移運算為邏輯右移運算,右移時默認填充0,與符號位無關。
2、作用不同
匯編語言中SAR和SHR指令都是右移指令,SAR是算數右移指令(shift arithmetic right),而SHR是邏輯右移指令(shift logical right)。SAR右移時保留操作數的符號,即用符號位來補足,而SHR右移時總是用0來補足。例如10000000算數右移一位是11000000,而邏輯右移一位是01000000。
3、順序不同
SAR是算術右移,比較特殊。他的最高位一直是不變的。如1000 0000算術右移7位後就成了1111 1111。SAR右移的時候,最高位不變,最低位移入CF。
㈢ 匯編指令JMP是什麼意思
JMP跳轉指令 無條件的轉移到指令指定的地址去執行從該地址開始的命令。指令必須指定轉移的目標地址(或稱轉向地址)。 JMP指令不影響條件碼。 計算機匯編語言中的一種跳轉指令.當需要分支程序時,散轉程序有時可以幫我們實現。使用指令JMP @A+DPTR,可實現多分支轉移。它是根據某種輸入或運算的結果,分別轉向各個處理程序段取執行程序。 JMP $ 就是跳轉到當前的地址, 所以它是一個死循環,不繼續執行下面的程序了。 他的意思在於我要求的所有任務已經完成了,後面沒有任務了,那麼,就原地踏步吧! 我已經設置好中斷服務程序了,只要發生中斷就會進入中斷服務程序,所有的操作都在中斷服務程序處理。 編輯本段JMP系列軟體 SAS(全球最大的統計學軟體公司)推出的一種互動式可視化統計發現軟體系列,包括JMP,JMP Pro,JMP Clinical,JMP Genomics,SAS Simulation Studio for JMP等強大的產品線。主要用於實現統計分析。JMP的演算法源於SAS,特別強調以統計方法的實際應用為導向,交互性、可視化能力強,使用方便,尤其適合非統計專業背景的數據分析人員使用,在同類軟體中有較大的優勢。 目前JMP的最新版本是JMP9,其主要特點括: 1. 交互性:JMP可以幫助用戶很好地實現與數據之間的「互動」,包括圖形、數據表等之間都是實時交互的,這對實現探索性數據分析和提高分析效率比較有幫助。 2. 可視化:數據可視化能力一直是JMP值得稱道的特點之一。 3. 功能和性能:除了一般軟體能提供的常規統計分析功能外,JMP還具備時間序列、聚類等高級分析功能以及決策樹、神經網路等專業數據挖掘工具,功能頗為強大;另外,JMP還提供了非常完整的六西格瑪及質量管理統計方法,如試驗設計DOE,測量系統分析MSA等,可靠性分析(Reliability)等。其中,JMP的試驗設計方案堪稱一絕,靈活性和完整性都很突出。此外,JMP Pro還能提供更強大的計算能力以及更加先進的數據挖掘和預測功能;JMP Clinical是SAS公司推出的下一代生命科學分析平台;JMP Genomics是專業的基因數據分析軟體。 4. 可擴展性:JMP既可以單獨運行,也可以和SAS,R等分析系統結合使用;運用JMP編程語言JSL,可以開發個性化的分析程序或者數據分析的自動化模版等。 5.使用便利性:JMP採用圖形界面操作,其強大的交互性和可視化能力使得使用變得容易;JMP的菜單設置與一般統計軟體不同,它採用嵌套的形式,按照分析和解決問題的思路而設計,具備了較好的防錯能力。 JMP的應用領域包括業務可視化、探索性數據分析、六西格瑪及持續改善(可視化六西格瑪、質量管理、流程優化)、試驗設計、生存及可靠性、統計分析與建模、互動式數據挖掘、分析程序開發等。JMP是六西格瑪軟體的鼻祖,當年摩托羅拉開始推六西格瑪的時候,用的就是JMP軟體,目前有非常多的全球頂尖企業採用JMP作為六西格瑪軟體,包括陶氏化學、惠而浦、鐵姆肯、招商銀行、美國銀行、中國石化等等。 JMP的應用非常廣泛,全球用戶數已經超過三十萬,全球頂尖企業基本都是它的用戶,像英特爾、戴爾、蘋果、摩托羅拉、IBM、HP、Google、GE、NEC、Sony、阿斯利康、輝瑞制葯、禮來、羅氏、寶潔、聯合利華、陶氏化學、巴斯夫、鐵姆肯、霍尼韋爾、豐田汽車、匯豐銀行、美國銀行、招商銀行、蘇格蘭皇家銀行、中國石化、北京大學、人民大學、首都經貿大學、清華大學、上海交通大學、沃頓商學院、哈佛大學、MIT、耶魯大學、牛津大學…… 在醫葯領域,以嚴格和嚴謹著稱的美國食品與葯物管理局(FDA)對於葯企申報的新葯報告中的統計分析部分,只接受用SAS和JMP分析得出的統計結果。其40%以上的葯物評審員都是JMP用戶。
㈣ 關於王爽的匯編語言的加減乘除指令
匯編算術運算指令
8086的算術運算類指令能夠對二進制或十進制(BCD碼)數進行加、減、乘、除運算,操作數的數據形式可以是8位或16位的無符號數或帶符號數。對於單操作數指令,不允許使用立即數形式;對於雙操作數指令,只有源操作可以使用立即數,兩個操作數中必須有一個在寄存器中。
1. 加法指令指令格式: 加法 ADD DST, SRC; (DST)←(SRC)+(DST)
帶進位加法 ADC DST, SRC; (DST)←(SRC)+(DST)+CF
加1 INC OPR; (OPR)←(OPR)+1
注意: 這三條指令運算結果將影響狀態標志位,但是INC指令不影響標志CF。下面以8位數加法運算為例作簡要說明。 [例4.20]因為運算結果沒有超出單位元組無符號數范圍,所以CF=0;運算結果超出單位元組有符號數范圍,所以OF=1;其他標志 ZF=0,SF=1。 以上運算可以用兩條指令實現: MOV AH,01 ADD AH,7FH
ADC指令主要用於多位元組或多精度數據相加的運算。 例如進行二組四位元組(雙精度)數1122 3344H和5566 7788H的相加運算時,使用單位元組加法指令需要執行4次加法運算,運算過程中,通過ADC指令將低位元組運算產生的進位加到高位位元組,而使用字加法指令,只需要執行兩次加法運算,當然也必須通過ADC指令處理低字運算產生的進位。使用ADC指令,必須先將CF標志置0。2. 減法指令
指令格式:
減法 SUB DST,SRC ; (DST)←(DST)-(SRC)
帶進位減法 SBB DST,SRC ; (DST)←(DST)-(SRC)-CF
減1 DEC OPR ; (OPR)←(OPR)-1
求補 NEG OPR ; (OPR)←0FFFFH-(0PR)+1
比較 CMP OPR1, OPR2 ; (OPR1)-(OPR2)
SBB指令主要用於多位元組或多精度數據相減的運算;NEG指令對操作數進行取反加1的操作;CMP指令類似SUB指令執行減法操作,但不產生運算結果,對標志位影響見表4.3。 這幾條指令的運算結果都影響狀態標志位,只是DEC指令不影響標志CF。
[例4.22]
直接相減算式結果為: (4006AH)=520FH,SF=0,ZF=0,CF=0,OF=0
補碼加法算式結果為: (4006AH)=520FH,SF=0,ZF=0,CF=1,OF=0
算式中FECAH是(-0136H)的補碼。
可見,兩種算式中運算結果是相同的,但是對標志CF的影響不同,因為是減法運算,正確結果應是CF=0。用補碼加法得到運算結果CF=1,應求反後送入CF。 表4-3 CMP指令對狀態標志位的影響
3. 乘法指令 乘法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙操作數。兩個8位二進制數相乘,積為16位二進制數;兩個16位二進制數相乘,積為32位二進制數。指令格式:
無符號數乘法 MUL SRC;(AX)←(AL)×(SRC)8位數乘法
(DX,AX)←(AX)×(SRC)16位數乘法
帶符號數乘法 IMUL SRC; 操作同上,但是操作數為帶符號數
注意:
進行位元組運算時,目的操作數必須是累加器AL,乘積在寄存器AX中;進行字運算時,目的操作數必須是累加器AX,乘積在寄存器DX、AX中。源操作數不允許使用立即數定址方式。
乘法指令運算結果隻影響狀態標志CF、OF,對其他狀態標志位無影響(狀態不定)。
對於 MUL 指令,如果位元組型數據相乘之積(AH)=0或字數據相乘之積(DX)=0,則CF=OF=0,否則CF=OF=1;對於IMUL指令,如果位元組數據相乘之積AH或字數據相乘之積DX的內容是低一半的符號擴展,則CF=OF=0,否則CF=OF=1。
4. 除法指令 除法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙操作數。當除數是8位或16位二進制數時,要求被除數是16位或32位的二進制數。指令格式:
無符號數除法 DIV SRC;(AL)←(AX)/(SRC)8位二進制數除法的商
(AH)←(AX)/(SRC)8位二進制數除法的余數
或(AX)←(DX,AX)/(SRC) 16位二進制數除法的商
(DX)←(DX,AX)/(SRC) 16位二進制數除法的余數
帶符號數除法 IDIV SRC; 操作同上,但是操作數為帶符號數
注意:
當除數是位元組數據時,被除數必須放在AX中,當除數是字數據時,被除數必須放在DX,AX中。
除法指令運算結果對狀態標志無定義(狀態不定)。但是,若除數為0或帶符號數,則當除法運算結果超出規定的范圍時,將產生0號中斷,與溢出標志OF無關。
8086/8088 規定 IDIV 指令運算結果余數的符號與被除數相同。
帶符號數除法運算中,當被除數位數不夠時,則需將被除數擴展到所需的位數。8086/8088設有帶符號數擴展指令。
指令格式:
位元組擴展到字CBW;將寄存器AL中的符號位擴展到寄存器AH
字擴展到雙字CWD;將寄存器AX中的符號位擴展到寄存器DX
這兩條指令不影響標志位。
5. 十進制調整指令 BCD碼是一種用二進制編碼的十進制數,又稱為二—十進制數。8086/8088中BCD碼分為兩種形式: 其一是用四位二進制數表示一位十進制數,稱為壓縮的BCD碼;其二是用八位二進制數表示一位十進制數,稱為非壓縮的BCD碼,它的低四位是BCD碼,高四位沒有意義。由於BCD碼是四位二進制編碼,四位二進制數共有16個編碼,BCD碼只用其中的10個,其餘沒用的編碼稱為無效碼。BCD碼運算結果進入或跳過無效碼區時,都會出現錯誤。為了得到正確結果,必須進行調整。8086/8088針對壓縮BCD碼和非壓縮BCD碼,分別設有兩組十進制調整指令,其調整方法略有不同。
(1) 壓縮BCD碼十進制調整指令指令格式:
加法十進制調整DAA;(AL)←把AL中的和調整到壓縮BCD碼格式
減法十進制調整DAS;(AL)←把AL中的差調整到壓縮BCD碼格式
調整方法是:
累加器AL低4位大於9或輔助進位標志位AF=1,則累加器AL加06H修正。累加器AL高4位大於9或進位標志位CY=1,則累加器AL加60H修正。累加器AL高4位大於等於9,低4位大於9,則累加器AL進行加66H修正。
[例4.26]進行BCD碼加法運算59+68=127
此例中,BCD碼加法結果的低四位使AF=1,高四位大於9,所以加66H進行修正。
注意: 壓縮BCD碼加法或減法十進制調整指令必須用在ADD(ADC)或SUB(SBB)指令之後,調整結果對標志OF無影響,對其他狀態標志位均有影響。
減法十進制調整方法與加法十進制調整類同,只是將加6變為減6操作。
㈤ 匯編語言中,CBW指令有何功能
CBW 位元組轉換為字指令
執行的操作:AL的內容擴展到AH,形成AX中的字。
AL符號擴展為AX。在8086中CBW指令將AL的最高有效位D7擴展至AH,即:如果AL的最高有效位是0,則AH= 00,AL的最高有效位為1,則AH= FFH。AL不變。(即將AL的符號位移至AH)
CBW屬符號擴展指令,它可以把8位擴展到16位,擴展前後兩數的真值不變,主要用於數據類型不同時用符號擴展指令可以使得數據類型相同。
(5)匯編演算法指令擴展閱讀:
匯編語言中其他有關演算法指令:
1.PUSHA,PUSHAD,POPA,POPAD
作用:將所有16/32位通用寄存器進棧/出棧。
如:PUSHA ;將AX,CX,DX,BX,原SP,BP,SI,DI依次進棧。POPA出棧順序正好相反。
2.LAHFSAHF(標志寄存器傳送指令)
寫法:lahf
作用:AH=FLAGS的低8位
寫法:sahf
作用:FLAGS的低8位=AH。
3.符號擴展和零擴展指令。
CWD,AX符號擴展為32位數DX:AX
CWDE,AX符號擴展為EAX
CDQ:EAX符號擴展為64位數EDX:EAX。
MOVSX(符號擴展指令的一般形式)
寫法:MOVSX reg1632,reg8 eg16mem8mem16。
作用:用來將8位符號擴展到16位,或者16位符號擴展到32位
4.MOVZX(零擴展指令)
寫法:MOVZX reg1632,reg8 eg16mem8mem16。
零擴展,就是高位補0進行擴展。通常用在將數據復制到一個不同的寄存器中,如AL零擴展為EBX。相同寄存器的零擴展,可以使用MOV 高位, 0來實現。
㈥ 匯編語言中,助記符add表示算術運算中的什麼指令
add助記符表示匯編語言中的加法指令,對於算術運算中的」+「號,c語言的」+「運算符。助記符add所指代的具體指令要看具體匯編該條指令的機器的架構architecture,各架構上其機器碼不盡相同
㈦ jne的匯編指令是什麼
嘿嘿
俺來幫你解答哦
jne
rel
的匯編指令
是一條
條件轉移指令
轉移的條件是ne
即不相等
(等價於
不等於零)
該指令功能是:
當零標志
z=0
則跳轉;
否則
零標志
z=1
則順序執行下一條指令。
呵呵
滿意
就選滿意回答
㈧ 匯編語言指令
8086匯編指令手冊
一、數據傳輸指令
它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據.
1. 通用數據傳送指令.
MOV 傳送字或位元組.
MOVSX 先符號擴展,再傳送.
MOVZX 先零擴展,再傳送.
PUSH 把字壓入堆棧.
POP 把字彈出堆棧.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
BSWAP 交換32位寄存器里位元組的順序
XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數)
CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結果在第一個操作數里 )
XLAT 位元組查表轉換.
—— BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )
2. 輸入輸出埠傳送指令.
IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} )
OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 )
輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 傳送目標指針,把指針內容裝入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 傳送目標指針,把指針內容裝入ES.
例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 傳送目標指針,把指針內容裝入FS.
例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 傳送目標指針,把指針內容裝入GS.
例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 傳送目標指針,把指針內容裝入SS.
例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4. 標志傳送指令.
LAHF 標志寄存器傳送,把標志裝入AH.
SAHF 標志寄存器傳送,把AH內容裝入標志寄存器.
PUSHF 標志入棧.
POPF 標志出棧.
PUSHD 32位標志入棧.
POPD 32位標志出棧.
二、算術運算指令
———————————————————————————————————————
ADD 加法.
ADC 帶進位加法.
INC 加 1.
AAA 加法的ASCII碼調整.
DAA 加法的十進制調整.
SUB 減法.
SBB 帶借位減法.
DEC 減 1.
NEC 求反(以 0 減之).
CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果).
AAS 減法的ASCII碼調整.
DAS 減法的十進制調整.
MUL 無符號乘法.
IMUL 整數乘法.
以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
AAM 乘法的ASCII碼調整.
DIV 無符號除法.
IDIV 整數除法.
以上兩條,結果回送:
商回送AL,余數回送AH, (位元組運算);
或 商回送AX,余數回送DX, (字運算).
AAD 除法的ASCII碼調整.
CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去)
CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去)
CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去)
CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)
三、邏輯運算指令
———————————————————————————————————————
AND 與運算.
OR 或運算.
XOR 異或運算.
NOT 取反.
TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果).
SHL 邏輯左移.
SAL 算術左移.(=SHL)
SHR 邏輯右移.
SAR 算術右移.(=SHR)
ROL 循環左移.
ROR 循環右移.
RCL 通過進位的循環左移.
RCR 通過進位的循環右移.
以上八種移位指令,其移位次數可達255次.
移位一次時, 可直接用操作碼. 如 SHL AX,1.
移位>1次時, 則由寄存器CL給出移位次數.
如 MOV CL,04
SHL AX,CL
四、串指令
———————————————————————————————————————
DS:SI 源串段寄存器 :源串變址.
ES:DI 目標串段寄存器:目標串變址.
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時重復.
REPNC 當CF=0且CX/ECX<>0時重復.
五、程序轉移指令
———————————————————————————————————————
1>無條件轉移指令 (長轉移)
JMP 無條件轉移指令
CALL 過程調用
RET/RETF過程返回.
2>條件轉移指令 (短轉移,-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 奇偶性為偶數時轉移.
JS 符號位為 "1" 時轉移.
3>循環控制指令(短轉移)
LOOP CX不為零時循環.
LOOPE/LOOPZ CX不為零且標志Z=1時循環.
LOOPNE/LOOPNZ CX不為零且標志Z=0時循環.
JCXZ CX為零時轉移.
JECXZ ECX為零時轉移.
4>中斷指令
INT 中斷指令
INTO 溢出中斷
IRET 中斷返回
5>處理器控制指令
HLT 處理器暫停, 直到出現中斷或復位信號才繼續.
WAIT 當晶元引線TEST為高電平時使CPU進入等待狀態.
ESC 轉換到外處理器.
LOCK 封鎖匯流排.
NOP 空操作.
STC 置進位標志位.
CLC 清進位標志位.
CMC 進位標志取反.
STD 置方向標志位.
CLD 清方向標志位.
STI 置中斷允許位.
CLI 清中斷允許位.
六、偽指令
———————————————————————————————————————
DW 定義字(2位元組).
PROC 定義過程.
ENDP 過程結束.
SEGMENT 定義段.
ASSUME 建立段寄存器定址.
ENDS 段結束.
END 程序結束.
㈨ 求匯編語言的所有指令
數據傳送指令集
MOV
功能: 把源操作數送給目的操作數
語法: MOV 目的操作數,源操作數
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
功能: 交換兩個操作數的數據
語法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
功能: 把操作數壓入或取出堆棧
語法: PUSH 操作數 POP 操作數
格式: PUSH r PUSH M PUSH data POP r POP m
PUSHF,POPF,PUSHA,POPA
功能: 堆棧指令群
格式: PUSHF POPF PUSHA POPA
LEA,LDS,LES
功能: 取地址至寄存器
語法: LEA r,m LDS r,m LES r,m
XLAT(XLATB)
功能: 查表指令
語法: XLAT XLAT m
算數運算指令
ADD,ADC
功能: 加法指令
語法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影響標志: C,P,A,Z,S,O
SUB,SBB
功能:減法指令
語法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影響標志: C,P,A,Z,S,O
INC,DEC
功能: 把OP的值加一或減一
語法: INC OP DEC OP
格式: INC r/m DEC r/m
影響標志: P,A,Z,S,O
NEG
功能: 將OP的符號反相(取二進制補碼)
語法: NEG OP
格式: NEG r/m
影響標志: C,P,A,Z,S,O
MUL,IMUL
功能: 乘法指令
語法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影響標志: C,P,A,Z,S,O(僅IMUL會影響S標志)
DIV,IDIV
功能:除法指令
語法: DIV OP IDIV OP
格式: DIV r/m IDIV r/m
CBW,CWD
功能: 有符號數擴展指令
語法: CBW CWD
AAA,AAS,AAM,AAD
功能: 非壓BCD碼運算調整指令
語法: AAA AAS AAM AAD
影響標志: A,C(AAA,AAS) S,Z,P(AAM,AAD)
DAA,DAS
功能: 壓縮BCD碼調整指令
語法: DAA DAS
影響標志: C,P,A,Z,S
位運算指令集
AND,OR,XOR,NOT,TEST
功能: 執行BIT與BIT之間的邏輯運算
語法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m
影響標志: C,O,P,Z,S(其中C與O兩個標志會被設為0) NOT指令不影響任何標志位
SHR,SHL,SAR,SAL
功能: 移位指令
語法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影響標志: C,P,Z,S,O
ROR,ROL,RCR,RCL
功能: 循環移位指令
語法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影響標志: C,P,Z,S,O
程序流程式控制制指令集
CLC,STC,CMC
功能: 設定進位標志
語法: CLC STC CMC
標志位: C
CLD,STD
功能: 設定方向標志
語法: CLD STD
標志位: D
CLI,STI
功能: 設定中斷標志
語法: CLI STI
標志位: I
CMP
功能: 比較OP1與OP2的值
語法: CMP r/m,r/m/data
標志位: C,P,A,Z,O
JMP
功能: 跳往指定地址執行
語法: JMP 地址
JXX
功能: 當特定條件成立則跳往指定地址執行
語法: JXX 地址
注:
A: ABOVE,當C=0,Z=0時成立
B: BELOW,當C=1時成立
C: CARRY,當弁時成立 CXZ: CX寄存器的值為0(ZERO)時成立
E: EQUAL,當Z=1時成立
G: GREATER(大於),當Z=0且S=0時成立
L: LESS(小於),當S不為零時成立
N: NOT(相反條件),需和其它符號配合使用
O: OVERFLOW,O=1時成立
P: PARITY,P=1時成立
PE: PARITY EVEN,P=1時成立
PO: PARITY ODD,P=0時成立
S: SIGN,S=1時成立
Z: ZERO,Z=1時成立
LOOP
功能: 循環指令集
語法: LOOP 地址
LOOPE(Z)
地址 LOOPNE(Z) 地址
標志位: 無
CALL,RET
功能: 子程序調用,返回指令
語法: CALL 地址 RET RET n
標志位: 無
INT,IRET
功能: 中斷調用及返回指令
語法: INT n IRET
標志位: 在執行INT時,CPU會自動將標志寄存器的值入棧,在執行IRET時則會將堆棧中的標志值彈回寄存器
字元串操作指令集
MOVSB,MOVSW,MOVSD
功能: 字元串傳送指令
語法: MOVSB MOVSW MOVSD
標志位: 無
CMPSB,CMPSW,CMPSD
功能: 字元串比較指令
語法: CMPSB CMPSW CMPSD
標志位: C,P,Z,S,O
SCASB,SCASW
功能: 字元串搜索指令
語法: SCASB SCASW
標志位: C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能: 字元串載入或存貯指令
語法: LODSB LODSW STOSB STOSW
標志位: 無
REP,REPE,REPNE
功能: 重復前綴指令集
語法: REP 指令S REPE 指令S REPNE 指令S
標志位: 依指令S而定
對於IBM PC機它有它的指令系統,其中包括:數據傳送指令、串處理指令、算術指令、控制移動指令、邏輯指令、處理機控制指令。
這里將簡單介紹其指令類型及指令說明,如有要求給具體的指令格式及應用,請與amay聯系,amay加以更新。
1)數據傳送指令:負責把數據、地址或立即數傳送到寄存器或存儲單元中。
數據傳送指令類型 指 令 說 明
通用數據傳送指令 MOV(傳送)、PUSH(進棧)、POP(出棧)、XCHG(交換)
累加器專用傳送指令 IN(輸入指令) 、OUT(輸入指令)
地址傳送指令 LEA(有效地址送寄存器)、LDS(指針送寄存器和DS)、LES(指針送寄存器和ES)
標志寄存器傳送指令 LAHF(標志送AH)、SAHF(AH送標志寄存器)、PUSHF(標志進棧)、POPF(標志出棧)
2)算術指令:用來執行算術運算。
算術指令類型 指 令 說 明
加法指令 ADD(加法)、ADC(帶進位加法)、INC(加1)
減法指令 SUB(減法)、SBB(帶借位減法)、DEC(減1)、NEG(求補)、CMP(比較)
乘法指令 MUL(無符號數乘法)、IMUL(帶符號數乘法)
除法指令 DIV(無符號數除法)、IDIV(帶符號數除法)、CBW(位元組轉換為字)、CWD(字轉換為雙字)
3)邏輯指令:對字或位元組執行邏輯運算。
邏輯指令類型 指 令 說 明
邏輯運算指令 AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)、XOR(異或)、TEST(測試)
移動指令 SHL(邏輯左移)、SAL(算術左移)、SHR(邏輯右移)、SAR(算術右移)、ROL(循環左移)、ROR(循環右移)、RCL(帶進位循環左移)、RCR(帶進位右移)
4)串處理指令:處理存放存儲器里的數據串。
串處理指令類型 指 令 說 明
指 令 MOVS(串傳送)、CMPS(串比較)、SCAS(串掃描)、LODS(從串取)、STOS(存入串)
5)控制轉移指令:用來控製程序的執行流程。
控制轉移指令類型 指 令 說 明
無條件轉移指令 JMP(段間和段內轉移)
條件轉移指令 JZ(結果為0(或相等)則轉移)、JS(結果為負則轉移)、JNS(結果為正則轉移)、JO(溢出則轉移)、JNO(不溢出則轉移)、JP(奇偶位為1則轉移)、JNP(奇偶位為0則轉移)
循環指令 LOOP(循環指令)、LOOPPZ/LOOPE(當為0或相等時循環指令)、LOOPNZ/LOOPNE(當不為0或不相等時循環指令)
子程序指令 CALL(調用指令)、RET(返回指令)
中斷指令 INT(中斷)、INTO(如溢出則中斷)、RIET(從中斷返回)
6)處理機控制指令:
處理機控制指令類型 指 令 說 明
標志處理指令 CLC(進位位置0指令)、CMC(進位位求反指令)、STC(進位位置為1指令)、CLD(方向標志置1指令)、STD(方向標志位置1指令)、CLI(中斷標志置0指令)、STI(中斷標志置1指令)
其他處理機控制指令 NOP(無操作)、HLT(停機)、WAIT(等待)、ESC(換碼)、LOCK(封鎖)
參考:http://www.bilayu.com/
㈩ 匯編指令和匯編語言指令之間的區別是什麼
匯編指令,assembler directives,亦稱偽指令,用於指示匯編程序如何匯編源程序,不參與匯編代碼生成。
匯編語言指令,assembly language instructions,可供執行的程序代碼。
記住directives和instructions二者區別就明晰了。