彙編語言中乘法指令詳解(IMUL:有符號乘指令,MUL:無符號乘指令)

1、有符號乘指令

(1)雙操作數的有符號乘指令

語句格式  :IMUL OPD ,OPS

功       能  :(OPD)*(OPS)---->OPD

其中OPD可爲16/32的寄存器,OPS可爲同類型的寄存器、存儲器操作數或立即數。

(2)3個操作數的有符號乘指令

語句格式  :IMUL OPD ,OPS, N

功       能  :(OPS*N)----->OPD

其中OPD可爲16/32的寄存器,OPS可爲同類型的寄存器、存儲器操作數,n爲立即數。

(3)單操作數的有符號乘指令 

語句格式   :IMUL OPS

功       能    :字節乘法:(AL)*(OPS)---->AX

                  字  乘   法:(AX)*(OPS)---->DX,AX

                   雙字乘法:(EAX)*(OPS)---->EDX,EAX

 

2、無符號乘指令

語句格式 :MUL OPS

功       能 :字節乘法:(AL)*(OPS)---->AX

                  字  乘   法:(AX)*(OPS)---->DX,AX

                   雙字乘法:(EAX)*(OPS)---->EDX,EAX

下列通過示例來講解單操作數有符號和無符號乘指令

求下列AX裏的值

例1:

mov al,10H

mov bl,-2

imul bl

該指令爲有符號乘指令,(AX) = (al)*(bl)=   -20H  =    0FFE0H,先算出結果,再將結果以16進制寫入,注意正負

例2:

mov al,10H

mov bl,-2

mul bl

該指令爲無符號乘指令,(bl)=   0FEH,(AX)=(al)*(bl)=   0FE0H,先將每個數以16進制寫入各個寄存器中,再進行乘法運算

例3:

mov al,-10H

mov bl,2

imul bl

該例和例1一樣的做法,(AX) = (al)*(bl)=   -20H  =  FFE0H,先算出結果,再將結果以16進制寫入,注意正負

例4:

mov al,-10H

mov bl,2

mul bl

該例和例2一樣的做法,(al)=   F0H =11110000B,(AX)=(al)*(bl)=   111100000B =01E0H,B表示二進制,H表示十六進制先將每個數以16進制寫入各個寄存器中,再進行乘法運算

總結套路:在進行有符號乘指令時,即考慮正負,就要先按照正常的算法算出結果,然後以十六進制寫入目的寄存器中,倘若是使用無符號乘指令,那就直接將各個數以十六進制寫入自己的寄存器中,讓後相乘,將結果寫入目的寄存器中

有幣的投幣,沒有的點贊關注收藏,以後還會持續更新彙編內容,奧利給!

 

 

 

發佈了5 篇原創文章 · 獲贊 6 · 訪問量 5386
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章