Win32ASM學習[16] :乘除指令: MUL、IMUL、DIV、IDIV

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

一.?無符號數乘法指令 MUL(MULtiply)?

?格式: MUL OPRD??
?功能: 乘法操作.

?

?說明: 1. OPRD為通用寄存器或存儲器操作數.
?????????? 2. OPRD為源操作數,即作乘數.目的操作數是隱含的,即被乘數總是指定為累加器AX?或AL的內容.

????????? ?3. 16位乘法時,AX中為被乘數.8位乘法時,AL為被乘數.當16位乘法時,32位的乘積存于DX及AX中;8位乘法的16位乘積存于AX中.

?????????? 4. 操作過程: 字節相乘:(AX)<--(AL)*OPRD,當結果的高位字節(AH)不等于0時,則CF=1、OF=1.字相乘: (DX)(AX)<--(AX)*OPRD,當(DX)不等0時,則CF=1、OF=1

?????????? 5. 示例 1: MUL BETA[BX]
??????????????????????????? ? MUL DI
??????????????????????????? ? MUL BYTE PTR ALFA?
??????????????????
?????????????? 示例 2: 設在W1和W2字單元中各有一個16位數,若求其乘積并存于W3開始的字單元中,可用以下指令組實現:
???????????????????????????? ?MOV AX,W1
??????????????????????????? ? MUL W2
????????????????????????????? MOV W3,AX?
???????????????????????????? ?MOV W3+2,DX

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

.data
??? val dd 8
.code
main proc
??? ;8 位
??? mov al, 0FFh
??? mul byte ptr val
??? PrintHex ax? ;07F8
???
??? ;16 位
??? mov ax, 0FFFFh
??? mul word ptr val
??? PrintHex dx ;0007
??? PrintHex ax ;FFF8
???
??? ;32 位
??? mov eax, 0FFFFFFFFh
??? mul val
??? PrintHex edx ;00000007
??? PrintHex eax ;FFFFFFF8
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

二.?帶符號數乘法指令 IMUL(Integer MULtiply)

?格式: IMUL OPRD?
?功能: 完成兩個帶符號數的相乘

?

?說明: 1. 其中OPRD為任一通用寄存器或存儲器操作數.
??? ?????? 2. MUL指令對帶符號相乘時,不能得到正確的結果.
????????? 例如: (AL)=255
??????????????? (CL)=255

???????????????? MUL CL
??????????????? (AX)=65025
????????? 注意: 這對無符號數講,結果是正確的,但對帶符號數講,相當于(-1)*(-1)結果應為+1,而65025對應的帶符號數為-511,顯然是不正確的.

???????? ?3. 8088/8086指令系統提供了專用的帶符號數乘法和除法指令.IMUL即為帶符號乘法指令,它能保證得到正確的帶符號數的乘積.?

操作過程:字節相乘:(AX)<--(AL)*OPRD?
???????????????????? 字相乘:?(DX)(AX)<--(AX)*OPRD

????????? 4. 本指令影響標志位CF、OF.

?

;影響 OF、CF 標志位;第一種指令格式:

;IMUL r/m ;單操作數;如果參數是 r8/m8, 將把 AL 做乘數, 結果放在 AX

;如果參數是 r16/m16, 將把 AX 做乘數, 結果放在 EAX

;如果參數是 r32/m32, 將把 EAX 做乘數, 結果放在 EDX:EAX

;以上這些都是和 MUL 一樣的, 只是運算結果有時一樣、有時不一樣.

;IMUL 還有另外兩種指令格式:

;IMUL r16/r32, r16/r32/m16/m32/i

;雙操作數, (1)*(2) -> (1)

;IMUL r16/r32, r16/r32/m16/m32, i

;三操作數, (2)*(3) -> (1)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

.data
??? val dd 8
.code
main proc
??? ;8 位
??? mov al, 0FFh
??? PrintDec al
??? imul byte ptr val
??? PrintHex ax? ;FFF8
??? PrintDec ax? ;-8
;-------------------------???
??? mov al,-8 ;F8
??? mul byte ptr val
??? PrintDec ax ;1984
??? PrintHex ax ;07C0
;-------------------------???
??? ;16 位
??? mov ax, 0FFFFh
??? imul word ptr val
??? PrintHex dx ;FFFF
??? PrintHex ax ;FFF8
???
??? ;32 位
??? mov eax, 0FFFFFFFFh
??? imul val
??? PrintHex edx ;FFFFFFFF
??? PrintHex eax ;FFFFFFF8
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

.data
??? val dd 8
.code
main proc
??? ;IMUL 兩個操作數
??? mov eax, 7
??? imul eax, val
??? PrintDec eax ;56
???
??? ;IMUL 三個操作數
??? imul eax, val, 9
??? PrintDec eax ;72
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

DIV、IDIV: 無符號除、有符號除

?

;它們沒有定義對 EFLAGS 的影響
;它們的指令格式:
;DIV r/m? ;參數是除數

;如果參數是 r8/m8,?? 將把 AX????? 做被除數; 商 -> AL,? 余數 -> AH
;如果參數是 r16/m16, 將把 DX:AX?? 做被除數; 商 -> AX,? 余數 -> DX
;如果參數是 r32/m32, 將把 EDX:EAX 做被除數; 商 -> EAX, 余數 -> EDX

?

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

.code
main proc
??? ;除數是 8 位
??? mov ax, 17?? ;被除數
??? mov cl, 3??? ;除數
??? div cl
??? PrintDec al? ;5 - 商
??? PrintDec ah? ;2 - 余數
???
??? ;除數是 16 位
??? mov dx, 0??? ;
??? mov ax, 17?? ;dx:ax 是被除數
??? mov cx, 3??? ;cx??? 是除數
??? div cx
??? PrintDec ax? ;5 - 商
??? PrintDec dx? ;2 - 余數
???
??? ;除數是 32 位
??? mov edx, 0?? ;
??? mov eax, 17? ;edx:eax 是被除數
??? mov ecx, 3?? ;ecx???? 是除數
??? div ecx
??? PrintDec eax ;5 - 商
??? PrintDec edx ;2 - 余數
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

.code
main proc
??? ;除數是 8 位
??? mov al, -17??
??? cbw????????? ;ax 是被除數
??? mov cl, 3??? ;除數
??? idiv cl
??? PrintDec al? ;-5 - 商
??? PrintDec ah? ;-2 - 余數
???
??? ;除數是 16 位
??? mov ax, -17??
??? cwd????????? ;dx:ax 是被除數
??? mov cx, 3??? ;cx??? 是除數
??? idiv cx
??? PrintDec ax? ;-5 - 商
??? PrintDec dx? ;-2 - 余數
???
??? ;除數是 32 位
??? mov eax, -17?
??? cdq????????? ;edx:eax 是被除數
??? mov ecx, 3?? ;ecx???? 是除數
??? idiv ecx
??? PrintDec eax ;-5 - 商
??? PrintDec edx ;-2 - 余數
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375350.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux命令之man

一、引言 一直聽別人說linux下有個男人很厲害&#xff0c;遇到不會的不懂的都可以問他&#xff0c;自己也會幾個man命令&#xff0c;但是一直不知道到底man命令是怎么用的&#xff0c;比如查詢不同類的幫助該在man后跟數字幾&#xff0c;man后的數字有什么具體的意思&#xff0…

《JavaScript權威指南》學習筆記 第二天 下好一盤大棋

前段學習js的時候總是零零散散的&#xff0c;以至于很多東西都模棱兩可。時間稍微一久&#xff0c;就容易忘記。最主要的原因是這些東西&#xff0c;原來學的時候就不是太懂&#xff0c;以至于和其他知識無法形成記憶鏈&#xff0c;所以孤零零的知識特別容易忘記。重溫犀牛書&a…

Win32ASM學習[17]:條件跳轉

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳轉相關的標志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函數

system()函數的聲明和說明如下&#xff1a; 注意它的描述那里&#xff0c;system()執行一個由command參數定義的命令&#xff0c;通過調用/bin/sh -c命令來實現這個功能。也就是說它的邏輯是這樣的&#xff01; 進程調用system函數&#xff0c;system函數調用fork創建一個子進程…

史上最全的maven pom.xml文件教程詳解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父項目的坐標。如果項目中沒有規定某個元素的值&am…

Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

-------------------------------------------------------------------------------------------------------------------------------------------------------- 一.字符串傳送指令 MOVSB/MOVSW/MOVSD 格式: MOVS OPD,OPS 功能: OPD<--OPS. 說明: 1. 其中OPS為源串符…

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…

Birt使用總結

把report放到其他服務器要重新建立Data Source ,這是配置&#xff0c;拷貝項目時不會同時拷貝 (1)在EXTJs中利用Report實現報表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

Win32ASM學習[20]:子程序

關于函數調用約定 :函數調用約定 這是以前的一個求和函數的例子 ---------------------------------------------------------------------------------------------------------------- .386 .model flat, stdcall include windows.inc include kernel32.inc include …

Mac聯網恢復系統重新安裝Lion

Mac的Lion系統&#xff0c;雖然不像Windows那樣需要經常重裝&#xff0c;但也難免會有要重置的時候&#xff0c;比如更換硬盤。本文介紹如何利用Mac的聯網恢復系統進行Lion系統的在線恢復。Mac的在線恢復系統只在近幾年的機型上才有&#xff0c;在進行系統恢復前&#xff0c;請…

【線性代數公開課MIT Linear Algebra】 第二十三課 微分方程與exp(At)

本系列筆記為方便日后自己查閱而寫&#xff0c;更多的是個人見解&#xff0c;也算一種學習的復習與總結&#xff0c;望善始善終吧~ 一階常系數微分方程 Aududt 將一階常系數微分方程轉換為線性代數問題的關鍵在于常系數微分方程的解一定是指數形式的。那么我們的需要求解的東西…

Win32ASM學習[21]:宏匯編(1)

-------------------------------------------------------------------------------------------------------------------- 嗯 上個星期到現在 把Win32ASM基礎匯編復習了下 在網上找到了 這個不錯系列 于是就轉載過來了 其中 根據我自己的水平 刪減了一些內容 或…

ubunu安裝軟件的一個錯誤

http://tonychiu.blog.51cto.com/656605/654776/ 由于ubuntu/debian軟件庫中有時候不同的庫更新速度不一致&#xff0c;apt-get 出出現如下的錯誤提示 Some packages could not be installed. This may mean that you have requested an impossible situation or if you are us…

常用的基本Windows數據類型

常用的基本Windows數據類型 --------------------------------------------------------------------------------------------------------------------------------------------------------- 類 型 …

刪除空文件夾 清除CS擴展名文件 bat

刪除空文件夾。刪的干凈。刪的徹底。 將下列代碼復制到txt中保存。并把后綴.txt命成.bat。然后運行即可。 方案&#xff11;.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 刪除指定目錄及其子目錄下的空文件夾.bat 代碼&#xff1a;…

ios 坐標轉換

// 將像素point由point所在視圖轉換到目標視圖view中&#xff0c;返回在目標視圖view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; // 將像素point從view中轉換到當前視圖中&#xff0c;返回在當前視圖中的像素值 - (CGPoint)convertPoint:(C…

80X86偽指令

8086 偽指令表 一、數據定義偽操作 偽 指 令 名 稱 語 句 格 式 功 能 定義字節類型的數據存儲區 [變量名] DB 表達式[&#xff0c;…] 定義一個以變量名為首址的字節類型數據存儲區&#xff0c;所含數據元素的個數由其后表達式的個數所決定&#xff0c;數據存儲單元…