彙編基礎學習26

2021-05-02 03:51:18 字數 1302 閱讀 6070

文章** http://www.mcany.cn/article/301.htm

博主 沒落的殘陽

這節課中我們來深入的學習下乘法指令。乘法指令有兩種,一種是有符號整數乘法另一種是無符號整數乘法,今天我們來學習無符號整數乘法。

mul是進行無符號乘法的指令。mul(無符號乘法)指令有三種格式:第一種是將8位的運算元於al相乘。第二種是將16位的運算元與ax相乘; 第三種是將32位的運算元與eax進行相乘

乘數和被乘數大小必須相同,乘積的尺寸是乘數/被乘數大小的兩倍。 三種格式都既接受暫存器運算元,也接受記憶體運算元。但是不接受立即運算元(這點大家注意下)。

例如:

你想將al暫存器中的值乘上2,那麼此時你需要將立即數2存放到乙個暫存器中,然後通過mul指令相乘,或者將立即數放到乙個記憶體位址中,然後通過記憶體單元的形式來進行相乘。

舉例:

mov bl, 2

mul bl           ;此刻將bl暫存器中的值乘上al暫存器中的值

指令中唯一的乙個運算元是乘數。

也就是當我們的乘數是8位的時候,則與al相乘,如果我們的乘數是16位則與ax相乘,如果我們的乘數是32位則與eax暫存器相乘。

那麼下面我給出mul乘法的相關運算元的例項

被乘數                乘數               積

al                  8位運算元                ax

ax                  16位運算元         dx:ax

eax                 32位運算元              edx:eax

因為如果我們的乘數是乙個8位運算元的話,我們的結果存在在ax暫存器中。 如果是16位運算元的話,我們的結果存放在dx:ax中。如果dx不為0,則進製標誌置位。

在執行完mul指令後,我們一般要檢查下進製標誌。因為我們需要知道乘積的高半部分是否可以安全的忽略。

例如:

mov al, 6h

mov bl, 10h

mul bl  

此刻我們檢查進製標誌cf = 0, 那麼ah我們就可以將其忽略了,所以結果是60h。

那麼我們再來舉乙個例子:

例如:

mov ax, 6000

mov bx, 5000

mul bx

我們檢查進製標誌,此時cf = 1。 那麼我們的結果是dx:ax ,此時我們的dx = 1e00, ax = 0000 所以 最後我們的積 為 1e000000。

其實我們從乘積就可以算出來cf是否置位了。

彙編基礎學習5

文章 http www.mcany.cn article 280.htm 博主 沒落的殘陽 今天我給大家來講解下我們記憶體中資料的儲存以及訪問。這節課的基礎也是非常重要的。因為80386的資料位址線是32根,所以它一次可以傳送資料是4個位元組。所以我們記憶體單元是按照4個位元組來對齊的。用高階語言的...

彙編基礎學習7

博主 沒落的殘陽 這節來講解一下棧的延伸,堆疊 算是把昨天的整個理論基礎概念,給大家講解下。執行時棧 runtime stack 我們通常稱為 堆疊 這是由我們cpu硬體直接支援的,也是實現過程的呼叫和過程返回機制的基本組成部分。不知道大家是否知道rtl是什麼意思。如果學過程式的人都應該知道這個就是...

彙編基礎學習11

文章 http www.mcany.cn article 286.htm 博主 沒落的殘陽 這節來學習下loop迴圈指令。我們高階語言的堆疊分配初始化可是靠它了呵呵。首先我們來看下它的指令格式。loop 標號 ecx不為零時跳轉至標號迴圈.標號只是寫匯程式設計序時用來表示乙個記憶體位址的。例如 to...