匯編語言-011(無符號乘法指令MUL、有符號乘法指令IMUL、對比MUL乘法指令與SHL移位方式、符號位擴展指令,CBW,CWD,CDQ、DIV 無符號除法指令、IDIV 有符號除法指令)

1:無符號乘法指令MUL

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 WORD 2000h
val2 WORD 0100h
.code
main PROC;8位乘法mov al,5h  ;被乘數mov bl,10hmul bl     ;AX = 0050h ,CF,OF = 0;16位乘法mov ax,val1mul val2   ;DX:AX = 00200000h ,CF ,OF= 1 高部分不為零0了,CF,OF=1mov eax,12345hmov ebx,1000hmul ebx   ;EDX:EAX = 0000000012345000 ,CF,OF = 0INVOKE ExitProcess,0
main ENDP
END main

2:有符號乘法指令IMUL 單個操作數情況

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov al,48mov bl,4imul bl    ;AX = 00C0h ,OF=1   因為AH不是AL的符號擴展,因此OF =1mov al,-4mov bl,4imul bl  ;AX = FFF0h,OF =0 因為AH是AL的擴展,OF清零mov ax,48mov bx,4imul bx   ;DX:AX = 000000C0h,OF = 0 ;因為DX是AX的符號擴展,因此OF=0mov eax,+4823424mov ebx,-423imul ebx  ;EDX:EAX = FFFFFFFF86635D80h, OF = 0,因為EDX是EAX的符號擴展,OF = 0INVOKE ExitProcess,0
main ENDP
END main

3:有符號乘法指令IMUL 兩個操作數情況, 三個操作數情況

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
word1 SWORD 4
dword1 SDWORD 4.code
main PROCmov ax,-16     ;AX = -16mov bx,2       ;BX = 2imul bx,ax     ;BX = -32imul bx,2      ;BX = -64imul bx,word1  ;BX = -256mov eax,-16    ;EAX = -16mov ebx,2      ;EBX = 2imul ebx,eax   ;EBX = -32imul ebx,2     ;EBX = -64imul ebx,dword1;EBX = -256;因為雙操作數與三操作IMUL指令的目的操作數大小與乘積相同;因此會出現符號溢出mov ax,-32000imul ax,2     ;OF = 1 因為-64000不適合16位目的操作數,換成32就不會;三操作數imul bx,word1,-16  ;BX = word1 * -16imul ebx,dword1,-16 ;EBX = dword1 * -16imul ebx,dword1,-2000000000 ;符號溢出INVOKE ExitProcess,0
main ENDP
END main

4:對比MUL乘法指令與SHL移位方式的執行時間對比 (在現在大部分處理器執行時間都差不多了)

include Irvine32.inc.stack 4096
ExitProcee PROTO,dwExitCode:DWORDLOOP_COUNT = 0FFFFFFFFh
.data
intval DWORD 5
startTime DWORD ?.code
main PROCcall GetMseconds  ;獲取開始時間mov startTime,eaxmov eax,intvalcall mult_by_shiftingcall GetMsecondssub eax,startTimecall WriteDeccall Crlfcall GetMseconds  ;獲取開始時間mov startTime,eaxmov eax,intvalcall mult_by_MULcall GetMsecondssub eax,startTimecall WriteDecINVOKE ExitProcess,0
main ENDPmult_by_shifting PROCmov ecx, LOOP_COUNT
L1:push eax  ;保存原始EAXmov ebx,eaxshl eax,5shl ebx,2add eax,ebxpop eax  ;恢復EAXloop L1retmult_by_shifting ENDPmult_by_MUL PROCmov ecx,LOOP_COUNT
L1:push eax  ;保存原始EAXmov ebx,36mul ebxpop eax  ;恢復EAXloop L1ret
mult_by_MUL ENDPEND main

5:DIV 無符號除法指令

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dividend QWORD 0000000800300020h
divisor  DWORD 00000010h.code
main PROC;8位 AL商,AH余數mov ax,0083h  ;被除數mov bl,2      ;除數div bl        ;AL = 41h  ,AH =01h;16位,AX商,DX余數mov dx,0      ;清除被除數高16位mov ax,8003h  mov cx,100hdiv cx        ;AX=0080h  DX=0003h;32位 EAX商,EDX 余數mov edx,DWORD PTR dividend +4  ;高雙字mov eax,DWORD PTR dividend     ;低雙字div divisor       ;EAX = 08003000h  EDX = 00000020hINVOKE ExitProcess,0
main ENDP
END main

6:符號位擴展指令,CBW,CWD,CDQ

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
byteVal SBYTE -101
wordVal SWORD -101
dwordVal SDWORD -101.code
main PROCmov al,byteVal  ;AL = 9Bhcbw             ;AX = FF9Bhmov ax,wordVal  ;AX = FF9Bhcwd             ;DX:AX = FFFFFFF9Bhmov eax,dwordVal ;EAX = FFFFFF9Bhcdq              ;EDX:EAX = FFFFFFFFFFFFFF9BhINVOKE ExitProcess,0
main ENDP
END main

7:IDIV 有符號除法指令

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
byteVal SBYTE -48
wordVal SWORD -5000
dwordVal SDWORD +50000.code
main PROCmov al,byteVal  ;被除數低字節cbw             ;擴展到AHmov bl,+5idiv bl   ;AL = -9 ,AH =-3mov ax,wordVal  ;被除數低字cwd             ;擴展到DXmov bx,+256 idiv bx         ;商AX = -19  ,余DX = -136mov eax,dwordValcdqmov ebx,-256idiv ebx   ;EAX = -195  EDX = +80INVOKE ExitProcess,0
main ENDP
END main

8:進行除法時,檢查除數不能為0

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dividend WORD 0083h
divisor BYTE 2.code
main PROCmov ax,dividendmov bl,divisorcmp bl,0je NoDivideZero  ;為零就不進行除div blNoDivideZero:INVOKE ExitProcess,0
main ENDP
END main

9:計算算式 var4 = (var1 + var2)*var3

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
var1 DWORD 10
var2 DWORD 20
var3 DWORD 30
var4 DWORD ?.code
main PROC;var4 = (var1 + var2)*var3mov eax,var1add eax,var2mul var3jc tooBig   ;判斷EAX是否放得下mov var4,eaxjmp next
tooBig:
next:INVOKE ExitProcess,0
main ENDP
END main

10:計算算式 var4 = (var1 * -5) / (-var2 % var3)

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
var1 DWORD 10
var2 DWORD 20
var3 DWORD 30
var4 DWORD ?.code
main PROC;var4 = (var1 * -5) / (-var2 % var3)mov eax,var2neg eaxcdqidiv var3  ;EDX=余數mov ebx,edx mov eax,-5imul var1  ;EDX:EAX = 左邊表達式結果idiv ebxmov var4,eaxINVOKE ExitProcess,0
main ENDP
END main

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

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

相關文章

編寫一個程序,實現將存放在AX和DX中的32位數據循環右移二進制數的4位。(DX存放高字節內容,AX存放低字節內容)

編寫一個程序,實現將存放在AX和DX中的32位數據循環右移二進制數的4位。(DX存放高字節內容,AX存放低字節內容) P151 例4.9 匯編思路: AX右移四位后,使用BH接收AL的低四位數據,得到BH的八位數據…

[轉 scrum] 大型項目開發使用敏捷是否合適?不該問的問題

原文地址:http://www.scrumcn.com/agiledev/html/?167.html轉載于:https://www.cnblogs.com/cly84920/archive/2010/03/17/4426844.html

匯編語言-012(擴展加法指令ADC、帶借位減法指令SBB、執行加法后進行ASCII調整指令、AAS 、AAM、AAD 、DAA指令將和數轉成壓縮十進制格式)

1:ADC : 擴展加法指令ADC .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov dl,0mov al,0FFhadd al,0FFh ;ALFEhadc dl,0 ;DL:AL 01FEhmov edx,0mov eax,0FFFFFFFFhadd eax,0FFFFFFFFh ;EAX FFFFFFFEhadc edx,0 …

c#中textbox屬性_C#.Net中的TextBox.Visible屬性與示例

c#中textbox屬性Here we are demonstrating use of Visible property of TextBox Control. 在這里,我們演示了TextBox Control的Visible屬性的使用。 Visible property contains two values 可見屬性包含兩個值 True: Using this - textbox can be visible on par…

VS2010報表

http://technet.microsoft.com/zh-cn/library/dd220516.aspx轉載于:https://www.cnblogs.com/mingyongcheng/archive/2012/09/11/2679722.html

思維的領域特殊性

思維的領域特殊性 1971年,心理學家Danny Kahneman和Amos Tversky做了這樣一個實驗,他們問統計學教授一些不像統計學的統計學問題,其中一個大概如下:假設你生活的城市有兩家醫院,一家大一家小,某一天&#x…

匯編語言-013(DAS 、DAA與DAS、QWORD類型用SBB借位減法、編寫指令將AX符號擴展到EAX,不能使用CWD、用SHR和條件判斷指令將AL循環右移一位、SHLD、壓縮十進制轉換)

1:DAS : SUB或SBB在AL中生成二進制結果,DAS(減法后的十進制調整)轉壓縮十進制格式 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;計算85-48mov bl,48hmov al,85hsub al,bl ;AL3Dhd…

python程序執行時間_用于在Python中查找程序執行時間的程序

python程序執行時間The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we dont know how much. So, dont worry, in this tutorial we will learn it by using the…

公約數和公倍數

描述 小明被一個問題給難住了&#xff0c;現在需要你幫幫忙。問題是&#xff1a;給出兩個正整數&#xff0c;求出它們的最大公約數和最小公倍數。 輸入 第一行輸入一個整數n&#xff08;0< n<10000)&#xff0c;表示有n組測試數據; 隨后的n行輸入兩個整數i,j&#xff08;…

.net 筆記嘗試(二)

.NET筆試題集&#xff08;二&#xff09; 1.using關鍵字有什么用&#xff1f;什么是IDisposable&#xff1f; using可以聲明namespace的引入&#xff0c;還可以實現非托管資源的釋放&#xff0c;實現了IDisposiable的類在using中創建&#xff0c;using結束后會自動調用該對象的…

網上照片之博客照片與網店照片拍攝心得

本文選自《非常攝影手記&#xff1a;2天玩轉單反相機》一書 讓照片在博客上更熱的心得 1.有時美好的不僅是照片&#xff0c;還有拍攝照片的過程。盡量真實全面地記錄自己的攝影過程&#xff0c;展示最感人的自我。 2.不要急功近利&#xff0c;不想成“名博”的博主不是好博主&a…

string.length_C.中的String.Length屬性示例

string.lengthC&#xff03;String.Length屬性 (C# String.Length property) String.Length property is used to get the total number of characters in the string object (length of the string); it calls with this string and returns the total number of characters. …

匯編語言-014(編寫過程的應用、偽指令LEA、ENTER、LEAVE、LOCAL、遞歸函數、INVOKE、ADDR、PROC偽指令聲明過程)

1&#xff1a;編寫過程&#xff0c;僅用移位和加法&#xff0c;實現任意32位符號數與EAX相乘 include Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC mov eax,80mov ebx,53call BitwiseMultiplycall WriteDecINVOKE ExitProcess,0 main ENDP;EA…

從鍵盤輸入一個字符,判斷其是不是大寫字母,如果是則請輸出這個大寫字母,如果不是請輸出“這不是一個大寫字母”的英文信息(要求:能連續輸出直到輸出“#”結束)。

從鍵盤輸入一個字符&#xff0c;判斷其是不是大寫字母&#xff0c;如果是則請輸出這個大寫字母&#xff0c;如果不是請輸出“這不是一個大寫字母”的英文信息&#xff08;要求&#xff1a;能連續輸出直到輸出“#”結束&#xff09;。 P155 例4.13 DATA SEGMENT STR DB 0DH,0…

再談angularjs DI(Dependency Injection)

在前面已經介紹了關于angularjs&#xff0c;以及擴展了一些jQuery ui的一些組件為angularjs的directive。在這里應進口007 在上篇留言我們來看看在angularjs中的DI特性。 DI&#xff1a;依賴注入&#xff0c;是一種軟件設計模式&#xff0c;應DIP依賴倒置原則&#xff0c;描述組…

Access sql語句創建表及字段類型

Create TABLE 測試表 ( 文本255 VARCHAR NOT NULL, 文本20 VARCHAR(20) NOT NULL, 日期時間 DATETIME, 數字1 BYTE, 數字2 SMALLINT, 數字4 INTEGER, 布爾 BIT, 自動編號 COUNTER(10, 5) CONSTRAINT PK_TVIPLevel26 PRIMARY KEY, 小數 NUME…

c語言getc函數_C語言中的getc()函數與示例

c語言getc函數C語言中的getc()函數 (getc() function in C) Prototype: 原型&#xff1a; int getc(FILE *filename);Parameters: 參數&#xff1a; FILE *filenameReturn type: int 返回類型&#xff1a; int Use of function: 使用功能&#xff1a; In the file handling…

匯編語言-015(PROC偽指令定義參數方式、EXTERNDEF、INCLUDE 、EXTERN 、INVOKE、PROC、PROTO 、MOVSB 、MOVSD 、CMPSD )

1&#xff1a;使用PROC偽指令定義參數方式不通過寄存器傳參&#xff0c;計算數組之和 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data array DWORD 10000h,20000h,30000h,40000h,50000h theSum DWORD ?.code ArraySum PROC USES esi ecx,ptr…

編寫計算表達式(X-Y+25)/Z的值得程序,要求將其商和余數分別放在A、B單元中。(設X和Y是32位無符號數,A、B和Z是16位無符號數,不考慮溢出情況。)

編寫計算表達式&#xff08;X-Y25&#xff09;/Z的值得程序&#xff0c;要求將其商和余數分別放在A、B單元中。&#xff08;設X和Y是32位無符號數&#xff0c;A、B和Z是16位無符號數&#xff0c;不考慮溢出情況。&#xff09; P151 例4.8 匯編思路&#xff1a;首先在DATA段定…

《深入淺出WPF》筆記——綁定篇(一)

上一節&#xff0c;有記錄寫到&#xff1a;在WPF里&#xff0c;數據驅動UI&#xff0c;數據占核心地位&#xff0c;UI次之。怎么恢復數據的核心地位&#xff0c;那就要先了解一下Binding。 一、Binding 基礎 1.1WPF中Data Binding的帶來的方便 在設計架構的時間&#xff0c;大家…