中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

匯編語言中x86匯編指令有哪些

發布時間:2021-10-08 09:30:34 來源:億速云 閱讀:98 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關匯編語言中x86匯編指令有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Part 1:instruction

積少成多,持續更新。(這將會是一個極其漫長的過程)
表格中各條指令的順序根據筆者所認為的重要或常用程度進行排序,僅供參考。

Part 2

本表格中所涉及的F是指狀態寄存器,CF指進位標志位,其它以此類推。

2.1 (邏輯)運算、移位等常用指令

這一部分記錄匯編語言程序設計當中使用頻率最高的一部分指令。

2.1 (邏輯)運算、移位等常用指令

這一部分記錄匯編語言程序設計當中使用頻率最高的一部分指令。

指令作用注意事項示例
mov dest, src傳送指令1.dest和src不能同時為存儲器操作數
2.CS不能作為dest
3.段寄存器之間不能互相傳送
4.立即數不能送入段寄存器
mov ax,word ptr[bx+si+2]
add dest,src加法指令dest,src不能同時為存儲器操作數或段寄存器
add ax,cx
adc dest,src帶進位加法指令dest=dest+src+CF,常用于多字節加法
inc dest加一指令1.此操作不影響CF的狀態inc byte ptr[si]
sub dest,src減法指令1.dest,src的要求與add相同
2.觸發OF:異號相減且結果的符號為與被減數不同
sub ax,cx
sbb dest,src帶進位減法常用于多字節減法
dec dest減一指令不影響CF的狀態,但其他幾個標志位都會受到影響dec ax
mul dest無符號乘法指1.dest為字節數據,則與AL相乘,結果放入AX
2.dest為字數據,與AX相乘結果低16位放入AX,高16位放入DX
3.dest不能是立即數
mul ax
imul dest有符號乘法細節與mul完全相同,對最高位的解釋不同imul ax
div dest無符號除法1.dest為字節數據,用AX除以dest,商放在AL,余數放在AH
2.dest為字數據,用低16位為AX,高16位為DX的雙字數據除以dest,商放在AX,余數放在DX

idiv dest帶符號除法與無符號完全相同。除法溢出時結果無效idiv ax
cbw擴展AL為AX字數據1.僅用于擴展帶符號數,無符號直接清零即可
2.不帶操作數
cbw
cwd擴展AX字為DX,AX雙字數據要求與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設定程序段起始地址(偏移)1.是origin的縮寫
2.若無org默認程序從cs:0開始存放指令代碼
3.兩個org指令之間空余的空間用0填充
org offsetVal
xlat轉換表指令1.BX存放表的首地址,AL存放當前表中元素的偏移量
2.不影響F的狀態
xlat ;無需操作數

2.2 循環移位指令

循環移位指令非常容易混淆,但是卻十分重要,因此需要牢牢記住并時常查閱此表。

指令作用注意事項示例
SHL邏輯左移指令1.最高位進入CF中
2.最低位直接用0填充
SHL AH,1
SHR邏輯右移指令1.最低位進入CF中
2.最高位直接用0填充
SHR BX,1
SAL算術左移指令行為與SHL沒有差別SAL BL,CL
SAR算術右移指令1.最低位進入到CF中
2.最高位右移后填充最高位(即用最高位填充最高位)
SAR CL,BX
ROL循環左移指令最高位進入到CF中并填充最低位同上
ROR循環右移指令最低位進入到CF中并填充最高位同上
RCL帶進位循環左移指令1.最低位由CF填充
2.最高位進入CF
同上
RCR帶進位循環右移指令1.最高位由CF填充
2.最低位進入CF
同上

2.3 數據串操作指令

重復前綴指令與數據串操作指令連用常常能起到事半功倍的效果,注意使用了大大提升匯編程序的簡潔性。

指令作用注意事項示例
lods/lodsw/lodsb載入數據串指令1.具體操作:從ds:si讀取一個字節/字/雙字到AL,AX,EAX中,SI根據DF的值進行增減對應的數值lodsw ;無需操作數
stos/stosw/stosb存數據串指令1.AX/AL的內容存放到ES:DI中
2.指針修改是自動且隱式的
stos/stosw/stosb ;無需操作數
cmps/cmpsb/cmpsw數據串比較指令cmps需要兩個操作數(數據串首地址),后兩個無需操作數,字符串的比較由DI和SI完成;NULL
movs/movsb/movsw數據串傳送指令注意事項參照上方的cmps等的用法;NULL
rep/repz/repnz重復前綴指令1.當cx的內容不為0時執行操作(先判斷)
2.用CLD,STD控制增、減量修改
3.與數據串操作指令結合使用,實現內存拷貝、比較等功能
不需要操作數

2.4 邏輯運算指令

這一部分指令是以我的理解進行劃分,所以可能不太精準,有意見歡迎在評論區提出。

指令作用注意事項示例
cmp dest,src1.比較指令1.用dest減去src,但不保存結果
2.相減的結果影響F
cmp ax,cx
test dest,src1.將dest與src相與可用來測試是否為零等,結果不保存
2.影響F
test ax,ax
neg dest取補指令,得到相反數影響Fneg ax
not dest取反指令1.將操作數每一位按位取反
2.不影響F
not AX

2.5 基于大小關系的跳轉指令

在使用了cmp,sub,subb等指令后通常使用如下這些指令銜接以便進行下一步的操作,令程序十分簡潔。需要注意的是,根據有符號和無符號數需要選擇不同的指令進行基于大小關系的跳轉。

無符號數
指令作用
JA label大于時跳轉
JAE label大于等于時跳轉
JB label小于時跳轉
JBE label小于等于時跳轉
帶符號數
指令作用
JG label大于時跳轉
JGE label大于等于時跳轉
JL label小于時跳轉
JEL label小于等于時跳轉
無符號、帶符號通用
JE label等于時跳轉
JNE label不等于時跳轉

2.6 基于單標志位的轉移指令

根據標志寄存器F中標志位的狀態決定是否進行跳轉,通常在進行運算后結合這些指令進行跳轉。

指令作用
JC labelCF=1時跳轉
JNC labelCF=0時跳轉
JZ labelZF=1時跳轉
JNZ labelZF=0時跳轉
JO labelOF=1時跳轉
JNO labelOF=0時跳轉
JS labelSF=1時跳轉
JNS labelSF=0時跳轉
JP labelSF=1時跳轉
JNP labelPF=0時跳轉

關于“匯編語言中x86匯編指令有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永修县| 旬邑县| 什邡市| 天峨县| 体育| 宜兰县| 华蓥市| 西林县| 望城县| 惠来县| 灯塔市| 昭平县| 留坝县| 余姚市| 岳普湖县| 台中县| 漠河县| 八宿县| 平安县| 莫力| 新沂市| 明水县| 五莲县| 钟祥市| 郸城县| 福州市| 五常市| 贵南县| 桑植县| 阿拉善左旗| 讷河市| 临夏市| 丰城市| 锦州市| 申扎县| 博爱县| 景宁| 五河县| 拉孜县| 井陉县| 从化市|