文章** 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...