前面講解了一些簡單的基本指令的應用,(前期的廢話可以省略👀,當作沒有看見,小編跪求😭,,,,, 不當做沒有看見,也沒有關系,小編不在乎!😭😭)
文章目錄
- 特殊算數指令
- imull和mull
- cltd
- divl 和 idivl
- 進行位置控制的指令
- cmp S M
- test S M
- 訪問條件碼
- 跳轉指令編碼
- jmp Label 和*Operand
- 條件跳轉
特殊算數指令

imull和mull
這里不同正常乘法的雙目運算子
初看是一坨屎,看不懂去看書,看書像在看天書,講的是這個內容!
其實非常簡單,imull執行的是有符號的乘法,而mull執行的無符號的乘法,
imull S的意思就是讓S與%eax暫存器進行🈶?符號位乘的出的二進制位(64位的),高位放到暫存器%edx上面,地位放到%eax上面,
mull S的意思就是讓S與%eax暫存器進行無符號位乘的出的二進制位(64位的),不過不相同的是乘法不同種類,高位(32位)放到暫存器%edx上面,底位(32位)放到%eax上面,
cltd
簡單的將%eax暫存器的值符號擴展32位到%edx暫存器,
也就是說,如果%eax暫存器的二進制序列的最高位為0,
則cltd指令就把%edx置為32個0,相反,
如果%eax暫存器的二進制序列最高位為1,
則cltd指令將會自從填充%edx暫存器為32個1.

divl 和 idivl
都是讓%eax除以S,然后得到的商儲存在%eax中,余數儲存在%edx中,其中還有一個差別,一個是有符號的運算,一個是無符號的運算,
進行位置控制的指令

cmp S M
通過兩個條件的差值來設定條件碼,如果相同的為一(條件碼),如果其他的條件會有不同的條件碼,
關于條件碼,
我的另一篇文章上面有全部內容,
上面有關于條件碼的具體內容

test S M
兩數進行邏輯與的運算,得到結果,結果改變條件碼的值,(測驗不同具體的值)
訪問條件碼

方式:
1. 根據某一個組合,將條件碼設定為0或者1,
2. 用于條件的判斷,從而決定執行的位置資訊,
3. 進行資料的傳輸
具體的用法,判斷條件(條件碼)是否都正確,如果都正確讓8位暫存器都為1,否則為0,
例子
sete %al
如果條件暫存器的到的為ZF(表示0),讓%al暫存器全部都充滿1(及結果正確),
其他的set型別也是相同的方法,
跳轉指令編碼

jmp Label 和*Operand
直接跳轉到具體的下一個位置不需要具體的條件,
條件跳轉
滿足具體的條件碼的情況,跳轉到具體的位置(和if條件陳述句差不多)!
匯編語言到此為止結束了,如果以后我學習到了相關內容這里面沒有涉及的內容,以后我會不斷的更新在這一個板塊,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/392181.html
標籤:其他
