您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)匯編語言中x86匯編指令有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
積少成多,持續(xù)更新。(這將會是一個極其漫長的過程)
表格中各條指令的順序根據(jù)筆者所認為的重要或常用程度進行排序,僅供參考。
本表格中所涉及的F是指狀態(tài)寄存器,CF指進位標志位,其它以此類推。
這一部分記錄匯編語言程序設(shè)計當中使用頻率最高的一部分指令。
這一部分記錄匯編語言程序設(shè)計當中使用頻率最高的一部分指令。
指令 | 作用 | 注意事項 | 示例 |
---|---|---|---|
mov dest, src | 傳送指令 | 1.dest和src不能同時為存儲器操作數(shù) 2.CS不能作為dest 3.段寄存器之間不能互相傳送 4.立即數(shù)不能送入段寄存器 | mov ax,word ptr[bx+si+2] |
add dest,src | 加法指令 | dest,src不能同時為存儲器操作數(shù)或段寄存器 | add ax,cx |
adc dest,src | 帶進位加法指令 | dest=dest+src+CF,常用于多字節(jié)加法 | |
inc dest | 加一指令 | 1.此操作不影響CF的狀態(tài) | inc byte ptr[si] |
sub dest,src | 減法指令 | 1.dest,src的要求與add相同 2.觸發(fā)OF:異號相減且結(jié)果的符號為與被減數(shù)不同 | sub ax,cx |
sbb dest,src | 帶進位減法 | 常用于多字節(jié)減法 | |
dec dest | 減一指令 | 不影響CF的狀態(tài),但其他幾個標志位都會受到影響 | dec ax |
mul dest | 無符號乘法指 | 1.dest為字節(jié)數(shù)據(jù),則與AL相乘,結(jié)果放入AX 2.dest為字數(shù)據(jù),與AX相乘結(jié)果低16位放入AX,高16位放入DX 3.dest不能是立即數(shù) | mul ax |
imul dest | 有符號乘法 | 細節(jié)與mul完全相同,對最高位的解釋不同 | imul ax |
div dest | 無符號除法 | 1.dest為字節(jié)數(shù)據(jù),用AX除以dest,商放在AL,余數(shù)放在AH 2.dest為字數(shù)據(jù),用低16位為AX,高16位為DX的雙字數(shù)據(jù)除以dest,商放在AX,余數(shù)放在DX | |
idiv dest | 帶符號除法 | 與無符號完全相同。除法溢出時結(jié)果無效 | idiv ax |
cbw | 擴展AL為AX字數(shù)據(jù) | 1.僅用于擴展帶符號數(shù),無符號直接清零即可 2.不帶操作數(shù) | cbw |
cwd | 擴展AX字為DX,AX雙字數(shù)據(jù) | 要求與cbw相同 | cwd |
seg | 取標號或變量的段地址 | mov di,seg label | |
lea | 取偏移地址 | 1.與offset作用類似 2.load efficient address的簡寫 | lea ax,label |
offset | 取偏移地址 | 1.作用與lea相同 2.速度比lea快 | mov ax,offset label |
org | 設(shè)定程序段起始地址(偏移) | 1.是origin的縮寫 2.若無org默認程序從cs:0開始存放指令代碼 3.兩個org指令之間空余的空間用0填充 | org offsetVal |
xlat | 轉(zhuǎn)換表指令 | 1.BX存放表的首地址,AL存放當前表中元素的偏移量 2.不影響F的狀態(tài) | xlat ;無需操作數(shù) |
循環(huán)移位指令非常容易混淆,但是卻十分重要,因此需要牢牢記住并時常查閱此表。
指令 | 作用 | 注意事項 | 示例 |
---|---|---|---|
SHL | 邏輯左移指令 | 1.最高位進入CF中 2.最低位直接用0填充 | SHL AH,1 |
SHR | 邏輯右移指令 | 1.最低位進入CF中 2.最高位直接用0填充 | SHR BX,1 |
SAL | 算術(shù)左移指令 | 行為與SHL沒有差別 | SAL BL,CL |
SAR | 算術(shù)右移指令 | 1.最低位進入到CF中 2.最高位右移后填充最高位(即用最高位填充最高位) | SAR CL,BX |
ROL | 循環(huán)左移指令 | 最高位進入到CF中并填充最低位 | 同上 |
ROR | 循環(huán)右移指令 | 最低位進入到CF中并填充最高位 | 同上 |
RCL | 帶進位循環(huán)左移指令 | 1.最低位由CF填充 2.最高位進入CF | 同上 |
RCR | 帶進位循環(huán)右移指令 | 1.最高位由CF填充 2.最低位進入CF | 同上 |
重復(fù)前綴指令與數(shù)據(jù)串操作指令連用常常能起到事半功倍的效果,注意使用了大大提升匯編程序的簡潔性。
指令 | 作用 | 注意事項 | 示例 |
---|---|---|---|
lods/lodsw/lodsb | 載入數(shù)據(jù)串指令 | 1.具體操作:從ds:si讀取一個字節(jié)/字/雙字到AL,AX,EAX中,SI根據(jù)DF的值進行增減對應(yīng)的數(shù)值 | lodsw ;無需操作數(shù) |
stos/stosw/stosb | 存數(shù)據(jù)串指令 | 1.AX/AL的內(nèi)容存放到ES:DI中 2.指針修改是自動且隱式的 | stos/stosw/stosb ;無需操作數(shù) |
cmps/cmpsb/cmpsw | 數(shù)據(jù)串比較指令 | cmps需要兩個操作數(shù)(數(shù)據(jù)串首地址),后兩個無需操作數(shù),字符串的比較由DI和SI完成 | ;NULL |
movs/movsb/movsw | 數(shù)據(jù)串傳送指令 | 注意事項參照上方的cmps等的用法 | ;NULL |
rep/repz/repnz | 重復(fù)前綴指令 | 1.當cx的內(nèi)容不為0時執(zhí)行操作(先判斷) 2.用CLD,STD控制增、減量修改 3.與數(shù)據(jù)串操作指令結(jié)合使用,實現(xiàn)內(nèi)存拷貝、比較等功能 | 不需要操作數(shù) |
這一部分指令是以我的理解進行劃分,所以可能不太精準,有意見歡迎在評論區(qū)提出。
指令 | 作用 | 注意事項 | 示例 |
---|---|---|---|
cmp dest,src | 1.比較指令 | 1.用dest減去src,但不保存結(jié)果 2.相減的結(jié)果影響F | cmp ax,cx |
test dest,src | 1.將dest與src相與 | 可用來測試是否為零等,結(jié)果不保存 2.影響F | test ax,ax |
neg dest | 取補指令,得到相反數(shù) | 影響F | neg ax |
not dest | 取反指令 | 1.將操作數(shù)每一位按位取反 2.不影響F | not AX |
在使用了cmp,sub,subb等指令后通常使用如下這些指令銜接以便進行下一步的操作,令程序十分簡潔。需要注意的是,根據(jù)有符號和無符號數(shù)需要選擇不同的指令進行基于大小關(guān)系的跳轉(zhuǎn)。
無符號數(shù) | |
---|---|
指令 | 作用 |
JA label | 大于時跳轉(zhuǎn) |
JAE label | 大于等于時跳轉(zhuǎn) |
JB label | 小于時跳轉(zhuǎn) |
JBE label | 小于等于時跳轉(zhuǎn) |
帶符號數(shù) | |
---|---|
指令 | 作用 |
JG label | 大于時跳轉(zhuǎn) |
JGE label | 大于等于時跳轉(zhuǎn) |
JL label | 小于時跳轉(zhuǎn) |
JEL label | 小于等于時跳轉(zhuǎn) |
無符號、帶符號通用 | |
---|---|
JE label | 等于時跳轉(zhuǎn) |
JNE label | 不等于時跳轉(zhuǎn) |
根據(jù)標志寄存器F中標志位的狀態(tài)決定是否進行跳轉(zhuǎn),通常在進行運算后結(jié)合這些指令進行跳轉(zhuǎn)。
指令 | 作用 |
---|---|
JC label | CF=1時跳轉(zhuǎn) |
JNC label | CF=0時跳轉(zhuǎn) |
JZ label | ZF=1時跳轉(zhuǎn) |
JNZ label | ZF=0時跳轉(zhuǎn) |
JO label | OF=1時跳轉(zhuǎn) |
JNO label | OF=0時跳轉(zhuǎn) |
JS label | SF=1時跳轉(zhuǎn) |
JNS label | SF=0時跳轉(zhuǎn) |
JP label | SF=1時跳轉(zhuǎn) |
JNP label | PF=0時跳轉(zhuǎn) |
關(guān)于“匯編語言中x86匯編指令有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。