當前位置:法律諮詢服務網 - 法律諮詢 - 匯編指令集

匯編指令集

壹、數據傳輸說明

1.通用數據傳輸指令。

MOV傳輸字或字節。

MOVSX在傳輸前進行符號擴展。

MOVZX先擴展到零,然後傳輸。

PUSH將字推到堆棧上。

將單詞從堆棧中彈出。

普莎依次將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,然後累加。(結果在第壹個操作數中)

字節查找表轉換。── BX指向壹個256字節表的起點,AL是表的索引值(0-255,即0-FFH);返回AL是查找表的結果。([BX+艾爾]-& gt;鋁)

2.輸入/輸出端口傳輸指令。

輸入/輸出端口輸入。(語法:在累加器中,{端口號│DX})

OUT I/O端口輸出。(語法:OUT {端口號│DX},累加器)當輸入/輸出端口由immediate mode指定時,其範圍為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迪,弦樂;將段地址:偏移地址保存到FS:DI。

LGS發送目標指針並將指針內容加載到GS中。例子:LGS迪,弦樂;將段地址:偏移地址保存到GS:DI。

LSS發送目標指針並將指針內容加載到SS中。例子:LSS迪,弦樂;將段地址:偏移地址保存到SS:DI。

4.簽署傳輸指令。

LAHF國旗註冊轉移,載入國旗成啊。

SAHF標誌寄存器傳輸,加載AH內容到標誌寄存器。

PUSHF標記堆棧。

POPF標記堆棧。

PUSHD 32位標誌被放入堆棧。

POPD 32位標誌不在堆棧中。

二、算術運算指令

───────────────────────────────────────

添加附加物

帶進位加法的ADC。

INC加1。

AAA加法的ASCII碼調整。

DAA加法的小數調整。

減法。

SBB用借位減法。

十二月減去1。

NEG求反(負0)

CMP比較。(兩個操作數相減,只修改標誌位,不發回結果)。

AAS減法的ASCII碼調整。

DAS減法的小數調整

MUL無符號乘法。

IMUL整數乘法。以上兩項,結果送回AH和AL(字節運算)或者DX和AX(字運算)。

AAM乘法的ASCII碼調整

無符號除法。

IDIV整數除法。以上兩項,返回結果:商返回給AL,余數返回給AH,(字節運算);Or商返回AX,余數返回DX,(字運算)。

AAD司ASCII碼調整。

將CBW字節轉換成單詞。(將AL中的字節符號擴展到AH)

將CWD單詞轉換成雙單詞。(將AX中單詞的符號擴展到DX)

將CWDE單詞轉換成雙單詞。(將AX中的單詞符號擴展到EAX)

CDQ雙字擴展。(這個詞在EAX的象征延伸到了EDX)

三、邏輯運算指令

與和運算。

還是操作。

異或XOR運算。

沒有什麽是逆轉。

測試測試。(兩個操作數分別是和,只修改標誌位,不發回結果)。

SHL邏輯向左移動。

薩爾算術向左移動。(=SHL)

SHR邏輯向右移動。

SAR算法向右移動。(=SHR)

ROL環路向左移動。

ROR循環向右移動。

在進位循環中,RCL向左移動。

RCR在進位循環中向右移動。

以上八條移位指令的移位次數可以達到255次。

移位壹次,可以直接用操作碼,比如SHL AX,1。

Shift >當1次時,移位次數由寄存器CL給出。

比如MOV CL,04

化學發光二極管

第四,字符串指令

源字符串段寄存器:源字符串索引。

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的逆過程。

CX/ecx時的代表

REPE/REPZ當ZF=1或者比較結果相等,而CX/ecx

當ZF=0或比較結果不相等時,以及CX/ecx

CF=1時的REPC和CX/ecx

CF=0和CX/ecx時的REPNC

動詞 (verb的縮寫)程序轉移指令

1。無條件分支指令(長分支)

JMP無條件轉移指令

調用過程調用

RET/RETF程序返回。

2。條件分支指令(短分支,在從-128到+127的距離內)

(當且僅當(SF XOR OF)=1,op1

JA/JNBE不小於或等於時轉移。

JAE/JNB大於或等於轉移。

JB/JNAE小於transfer。

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溢出並轉移。

當日元/JPE平價為偶數時轉移。

JS符號位為“1”時傳輸。

3。循環控制指令(短傳輸)

當它不為零時,CX循環。

LOOPE/LOOPZ CX不為零,標誌Z=1周期。

當LOOPNE/LOOPNZ CX不為零且標誌Z=0時循環。

當JCXZ·CX為零時轉移。

當JECXZ·ECX為零時轉移。

4。中斷程序

INT中斷指令

進入溢出中斷

IRET中斷返回

5。處理器控制指令

HLT處理器暫停,直到出現中斷或復位信號。

WAIT使CPU在芯片引線測試為高時進入等待狀態。

ESC切換到外部處理器。

鎖住,堵住巴士

NOP空操作。

STC設置進位標誌。

CLC清除進位標誌。

CMC進位標誌倒置。

STD設置方向標誌。

CLD明確的方向標誌。

STI設置中斷使能位。

CLI清除中斷使能位。

六、虛假說明

DW定義字(2字節)。

過程定義過程。例如:name proc var1,var2,var3。

ENDP進程結束。示例:名稱endp

段定義了壹個段。示例名稱段

假設建立段寄存器尋址。示例:假設cs:代碼,DS:數據,SS:堆棧。

端點線段端點。名稱結尾

END程序結束(也指出指令入口,即程序執行的第壹條指令)。

七、處理器控制指令:

標誌處理指令CLC(進位位置0指令)

進位位否定指令

STC(進位位置為1的指令)

CLD(方向標誌設置1指令)

STD(方向標誌位置1指令)

CLI(中斷標誌設置0指令)

STI(中斷標誌設置1指令)

無操作

關閉

等待(等待)

ESC(轉義碼)

LOCK ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ v ++++++ v ++++ v ++++

讓我先解釋以下說明:

St(i):代表浮點寄存器,前面提到的推棧和壓棧操作都會影響st(i)。

Src、dst、dest、op等。都是指指令的操作數,其中src代表源操作數,dst/dest代表目標操作數。

Mem8、mem16、mem32、mem64、mem80等。表示內存操作數,以下值表示操作數的內存位數(8位為壹個字節)。

x & lt-y表示將y的值放入x,例如st (0)

1.常數的數據傳輸和操作說明

指令格式

指令含義

執行的操作

FLD src

將實數載入st(0)

ST(0)& lt;- src (mem32/mem64/mem80)

現場服務中心

將整數加載到st(0)

ST(0)& lt;- src (mem16/mem32/mem64)

FBLD src

加載BCD並計數到st(0)

ST(0)& lt;- src (mem80)

FLDZ

將0.0載入st(0)

ST(0)& lt;- 0.0

FLD1

將1.0載入st(0)

ST(0)& lt;- 1.0

FLDPI

將pi加載到st(0)中

ST(0)& lt;- ?(即圓周率)

FLDL2T

將log2(10)加載到st(0)中

ST(0)& lt;-日誌2(10)

FLDL2E

將log2(e)加載到st(0)

ST(0)& lt;- log2(e)

FLDLG2

將log10(2)加載到st(0)中

ST(0)& lt;-日誌10(2)

FLDLN2

將loge(2)加載到st(0)中

ST(0)& lt;-日誌(2)

FST目的地

將實數st(0)保存到dest。

dest & lt- st(0) (mem32/mem64)

FSTP目的地

dest & lt-ST(0)(mem 32/mem 64/mem 80);然後再次執行堆棧操作。

第壹目的地

將st(0)作為整數保存到dest。

dest & lt- st(0) (mem32/mem64)

FISTP目的地

dest & lt-ST(0)(mem 16/mem 32/mem 64);然後再次執行堆棧操作。

FBST目的地

將st(0)保存到BCD中的dest。

dest & lt- st(0) (mem80)

FBSTP目標

dest & lt-ST(0)(mem 80);然後再次執行堆棧操作。

2.比較說明

指令格式

指令含義

執行的操作

FCOM

實數比較

將標誌位設置為st(0)-st(1)的結果標誌位

FCOM op

實數比較

將標誌位設置為st(0)-op (mem32/mem64)的結果標誌位。

FICOM op

與整數比較

將標誌值設置為st(0)-op op (mem16/mem32)的結果。

FICOMP op

與整數比較

st(0)與op (MEM16/MEM32)對比後;再次執行堆棧操作。

FTST

零檢測

比較st(0)和0.0。

富康街(壹)

比較st(0)和st(i) [486]

富康街(壹)

比較st(0)和st(i),並執行彈出操作。

富康普街(壹)

比較st(0)和st(i),並執行兩次堆棧彈出操作。

FXAM

檢查:眼球st(0)(設置條件代碼)

3.使用說明書

指令格式

指令含義

執行的操作

添加

FADD

添加實數

ST(0)& lt;-st(0) + st(1)

FADD src

ST(0)& lt;-st(0) + src (mem32/mem64)

聖FADD街

ST(I)& lt;- st(i) + st(0)

第壹街

ST(I)& lt;-ST(I)+ST(0);然後執行堆棧操作。

FIADD src

添加壹個整數

ST(0)& lt;-st(0) + src (mem16/mem32)

減法

FSUB

減去壹個實數

ST(0)& lt;- st(0) - st(1)

FSUB src

ST(0)& lt;-st(0) - src(寄存器/內存)

聖FSUB街

ST(I)& lt;-st(i) - st(0)

FSUBP st(i),st

ST(I)& lt;-st(i)-st(0),然後執行彈出操作。

第壹次世界大戰

減去壹個實數。

ST(0)& lt;- st(i) - st(0)

FSUBRP st(i),st

ST(0)& lt;-st(i)-st(0),然後執行彈出操作。

FISUB src

減去壹個整數

ST(0)& lt;- st(0) - src (mem16/mem32)

FISUBR src

減去壹個整數。

ST(0)& lt;- src - st(0) (mem16/mem32)

增加

FMUL

乘以壹個實數

ST(0)& lt;- st(0) * st(1)

FMUL st(i)

ST(0)& lt;- st(0) * st(i)

FMUL st(i),st

ST(I)& lt;- st(0) * st(i)

FMULP st(i),st

ST(I)& lt;-st(0) * st(i),然後執行彈出操作。

FIMUL src

乘以壹個整數。

ST(0)& lt;- st(0) * src (mem16/mem32)

分開

FDIV

除以壹個實數

ST(0)& lt;-st(0) /st(1)

第壹街

ST(0)& lt;- st(0) /t(i)

第壹街

ST(I)& lt;-st(0) /st(i)

FDIVP st(i),st

ST(I)& lt;-st(0) /st(i),然後執行彈出操作。

FIDIV src

除以壹個整數。

ST(0)& lt;- st(0) /src (mem16/mem32)

第壹街

除以實數

ST(0)& lt;- st(i) /st(0)

FDIVRP st(i),st

FDIVRP st(i),st

FIDIVR src

除以整數

ST(0)& lt;- src /st(0) (mem16/mem32)

FSQRT

平方根

ST(0)& lt;- sqrt st(0)

FSCALE

2的St(0)次方

ST(0)& lt;-^街2號(0)

FXTRACT

提取指數:

ST(0)& lt;-ST(0)的指數;被推了壹把

ST(0)& lt;-ST(0)的有效位

FPREM

取余數

ST(0)& lt;-st(0) MOD st(1)

FPREM1

取余數(IEEE),與FPREM相同,但使用IEEE標準[486]。

FRNDINT

圓形(圓形)

ST(0)& lt;-INT(ST(0));取決於RC標誌

絕對值

求絕對值

ST(0)& lt;-ABS(ST(0));移除標誌

FCHS

改變符號位(尋找負數)

ST(0)& lt;-st(0)

F2XM1

計算(2 x)-1

ST(0)& lt;-(^街2號(0)) - 1

FYL2X

計算Y * log2(X)

St(0)是y;St(1)是x;將st(0)和st(1)更改為st(0) * log2( st(1))的值。

FCOS

余弦函數Cos

ST(0)& lt;- COS( st(0))

FPTAN

正切函數tan

ST(0)& lt;-譚(st(0))

FPATAN

反正切函數

ST(0)& lt;- ATAN( st(0))

FSIN

正弦函數

ST(0)& lt;- SIN( st(0))

FSINCOS

正弦函數

ST(0)& lt;-SIN( st(0)),然後按st(1)

ST(0)& lt;- COS( st(0))

FYL2XP1

計算Y * log2(X+1)

St(0)是y;St(1)是x;將st(0)和st(1)更改為st(0) * log2( st(1)+1)的值。

處理器控制指令

FINIT

初始化FPU

FSTSW AX

將狀態字的值保存到AX。

AX & lt-都市固體廢物

FSTSW目標

將狀態字的值保存到dest。

dest & lt-MSW (mem16)

FLDCW src

從src加載FPU的控制字。

FPU CW & lt-src (mem16

FSTCW目標

將FPU的控制字保存到dest。

dest & lt- FPU CW

FCLEX

清除異常

FSTENV目的地

將環境保存到存儲地址dest,以保存狀態字、控制字、標誌字和異常指針的值。

FLDENV src

從內存地址src加載保存的環境。

f保存目的地

將FPU的狀態保存到dest,長度為94字節。

FRSTOR src

從src加載FSAVE保存的FPU狀態。

FINCSTP

增加FPU的堆棧指針值

ST(6)& lt;-ST(5);ST(5)& lt;-st(4),...,ST(0)& lt;-?

FDECSTP

減少FPU的堆棧指針值

ST(0)& lt;-ST(1);ST(1)& lt;-st(2),...,ST(7)& lt;-?

弗裏街(壹)

沒有使用標誌寄存器st(i)。

FNOP

空操作,相當於CPU的nop

ST(0)& lt;-st(0)

等待

FPU與CPU同步:停止CPU,直到FPU完成當前操作碼。

FXCH

交換指令,交換st(0)和st(1)的值。

ST(0)& lt;-st(1)

ST(1)& lt;-ST (0)++++++我的手好痛!!我檢查過了!+++++++++++++++

  • 上一篇:回溯起訴程序
  • 下一篇:2023年社區工作計劃範文
  • copyright 2024法律諮詢服務網