匯編語言-010(循環移位ROL,ROR 、進位循環進位RCL,RCR 、有符號數溢出 、雙精度移位SHLD,SHRD、SHL和ADD計算 、位運算應用)

1 :循環移位ROL,ROR,帶進位循環進位RCL,RCR

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;循環左移mov al,40h  ;AL = 010000000brol al,1    ;AL = 100000000b ,CF = 0rol al,1    ;AL = 000000001b ,CF = 1rol al,1    ;AL = 000000010b ,CF = 0mov al,00100000brol al,3    ;CF = 1,AL = 00000001b;位組交換,向任意方向循環4位就可以高低字節交換mov al,26h  rol al,4  ;AL = 62h;循環右移mov al,01h   ;AL = 00000001bror al,1     ;AL = 10000000b ,CF = 1ror al,1     ;AL = 01000000b ,CF = 0mov al,00000100bror al,3     ;AL = 10000000b,CF = 1;帶進位循環左移clc   ;清除進位標志位 CF = 0mov bl,88h ;CF = 0, BL = 10001000brcl bl,1   ;CF = 1, BL = 00010000brcl bl,1   ;CF = 0, BL = 00100001b;從進位標志位恢復位shr bl,1 ;將最低位移入進位標志位rcl bl,1 ;恢復該數原值;帶進位循環右移stc ;將進位標志位置為1 CF = 1mov ah,10h   ;AH = 00010000b ,CF =1rcr ah,1     ;AH = 10001000b ,CF =0INVOKE ExitProcess,0
main ENDP
END main

2 :有符號數溢出

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;如果有符號數循環移動一位生成的結果超過了目的操作數的有符號范圍;溢出就為1,換句話說:即該數的符號位取反了mov al,+127  ;AL = 01111111brol al,1  ;OF = 1,AL = 11111110bmov al,-128   ;10000000Bshr al,1      ;OF = 1,AL = 01000000b;如果循環移動次數大于1,則溢出標志無定義mov al,-128   ;10000000Bshr al,1      ;OF = 0,AL = 00100000bINVOKE ExitProcess,0
main ENDP
END main

3:雙精度移位SHLD,SHRD

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
wval WORD 9BA6h.code
main PROC;雙精度左移,將AX的高4位復制到wval的低4位mov ax,0AC36hshld wval,ax,4  ;wval = BA6Ah  ,ax = AX36h;雙精度右移,將dx的低4位復制到ax的高4位mov ax,234Bhmov dx,7654hshrd ax,dx,4    ;ax = 4234INVOKE ExitProcess,0
main ENDP
END main

4 : 雙精度移位例子,將一個雙字數組右移4位

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
array DWORD 648B2165h,8C943A29h,6DFA4B86h,91F76C04h,8BAF9857h.code
main PROCmov bl,4    ;移動次數mov esi,OFFSET array ;數組偏移量mov ecx,(LENGTHOF array) -1 ;數組元素個數
L1:push ecxmov eax,[esi + TYPE DWORD]mov cl,bl   ;移動次數shrd [esi],eax,cl  ;EAX移入[ESI]的高位add esi,TYPE DWORD ;指向下一對雙字pop ecxloop L1shr DWORD PTR[esi],4  ;最后一個雙字進行移位INVOKE ExitProcess,0
main ENDP
END main

5 :不用使用SHRD指令將AX的最低移入BX的最高位,再使用SHRD指令移入

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;不使用SHRD指令,將AX的最低位移入BX的最高位mov ax,1111111111111111bmov bx,0011111111111111bmov si,axshr si,1rcr bx,1;使用SHRD指令,將AX的最低位移入BX的最高位mov ax,1111111111111111bmov bx,0011111111111111bshrd bx,ax,1INVOKE ExitProcess,0
main ENDP
END main

6:利用循環將EAX的每一位移入進位標志位,計算進位標志位置的1次數,計算32位數奇偶性

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov ebx,0mov ecx,32mov eax,89ABCDEFh
L1:ror eax,1jnc L2inc ebx
L2:loop L1and ebx,1jz L3mov edx,0  ;奇數jmp quit
L3:mov edx,1  ;偶數quit:INVOKE ExitProcess,0
main ENDP
END main

7:使用shr與rcr 將 字節數組右移一位

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
ArraySize = 3
array BYTE ArraySize DUP(99h)  ;每半個字節都是1001.code
main PROCmov esi,0shr array[esi+2],1  ;高字節rcr array[esi+1],1  ;中間字節,包括進位標志位rcr array[esi],1    ;低字節,包含進位標志位INVOKE ExitProcess,0
main ENDP
END main

8:將無符號整數乘法,轉換成使用SHL和ADD計算

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;123 * 36 可以使用以下位運算替換;36 = 00100100;乘數36的位2和位5都是1,所以下面123左移5位和2位相加mov eax,123mov ebx,eaxshl eax,5   ;shl ebx,2add eax,ebx ;乘積相加INVOKE ExitProcess,0
main ENDP
END main

9:將32位二進制整數轉換為ASCII碼的二進制形式

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCINVOKE ExitProcess,0
main ENDP;32位二進制整數轉換為ASCII碼的二進制形式
;接收:EAX = 二進制整數,ESI 為緩沖區指針
;返回包含ASCII碼二進制數字的緩沖區
BinToAsc PROCpush ecxpush esimov ecx,32  ;EAX中的位數
L1:shl eax,1   ;最高位移入進位標志位mov BYTE PTR[esi],'0'  ;選擇0作為默認數字jnc L2                 ;如果進位標志位為0,就跳到L2mov BYTE PTR[esi],'1'  ;否則將1送往緩沖區
L2:inc esiloop L1pop esipop ecxret
BinToAsc ENDPEND main

10:位運算應用,在實地址模式下取文件日期

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
day BYTE ?
month BYTE ?
year WORD ?.code
main PROC;在實地址模式下,MS_DOS函數57h 用DX返回文件的日期戳,(該文件最后被修改的日期);0到位4表示是131內的日期,位5到位8表示是月份,位9到位15表示年份mov dx,0010011001101010b;取日期mov al,dl  ;復制DLand al,00011111b;清除位5到位7mov day,al;取月份mov ax,dxshr ax,5     ;右移5位and al,00001111b  ;清除位4到位7mov month,al   ;取年份mov al,dhshr al,1mov ah,0add ax,1980 ;年份以1980為基點mov year,axINVOKE ExitProcess,0
main ENDP
END main

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

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

相關文章

[Z]POJ 計算幾何入門題目推薦[轉PKKJ]

http://www.cnblogs.com/eric-blog/archive/2011/05/31/2064785.html http://hi.baidu.com/novosbirsk/blog/item/723a9727a9ab8804918f9dca.html其實也談不上推薦,只是自己做過的題目而已,甚至有的題目尚未AC,讓在掙扎中。之所以推薦計算幾何…

2013年 833c語言程序 江南大學 (A卷)

1.編寫程序實現求兩個整數最大公約數和最小公倍數. 方法一:輾轉相除法 算法思路:兩個整數a,b,其中a>b,求其最大公約數和最小公倍數 步驟① a%bc,其中c為余數 步驟② 若余數c為0,即a可以把b給整除,也就是說這里的b就是其最大公…

二十幾歲失敗的原因

1.缺乏人生目標。在研究過的人們中,9.98%的人沒有"人生目標",這恐怕是人們失敗的最大原因。  2.自學能力不足。歷史上所謂掌握最高教育的人,幾乎都是"自學型"的。所謂"有教育"的人,不能只看成是有…

C程序生成一定范圍內的隨機數

Random numbers just numbers that lie within a range and any of the numbers can occur. 隨機數只是在一個范圍內的數字,任何數字都可能出現。 In programming, we come through a lot of scenarios where we need to generate random numbers. Like for dice g…

提示丟失libgcc_s_dw2-1.dll問題

QT使用MinGW編譯器編譯中的的執行文件,執行問題 將qt中安裝的mingw編碼器的路徑添加到環境變量path (D:\Qt\Qt5.10.1\5.10.1\mingw53_32\bin)

第1章 數據庫系統概述

第1章 數據庫系統概述 1.1 數據庫系統簡介 數據庫技術的發展歷史 人工管理階段文件系統階段數據庫系統階段

淺談多線程和異步

最近很忙,因此拿出時間來寫博客也算是忙里偷閑了,繼承前面的一貫風格,繼續淺談胡侃。  最近在項目中遇到了Socket異步網絡傳輸的問題,所以沉下心來整理下。于是,先問了下度娘,結果找到了園友志良的一篇文…

查看Sql Server的log文件大小

SELECT DB_NAME(database_id) AS DatabaseName,Name AS Logical_Name,Physical_Name, (size*8)/1024 SizeMBFROM sys.master_filesWHERE DB_NAME(database_id) AdventureWorksGO 轉載于:https://www.cnblogs.com/top5/archive/2010/03/02/1676776.html

python調用帶參函數_Python | 帶有示例的函數調用類型

python調用帶參函數There are following types of function calls in python: python中有以下類型的函數調用: Call by value 按價值致電 Call by reference 通過參考電話 1)按價值致電 (1) Call by value ) When, we call a function with the values i.e. pass …

ffmpeg 命令添加文字水印

使用ffplay 預覽一下效果: ffplay -i cctvhttp.flv -vf “drawtextfontsize100:fontfileArial.ttf:tex t‘hello world’:x20:y20:fontcolorblue:alpha0.5” -x 640 -y 480 使用ffmpeg保存為文件 : ffmpeg -i cctvhttp.flv -vf “drawtextfontsize10…

jquery彈出層

這是一個彈出層的插件&#xff0c;有時候做東西的&#xff0c;經常會用到了&#xff0c;所以在次發一下&#xff0c;和大家分享一下&#xff01; [task]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/x…

MUL與IMUL區別(微機原理與接口技術 第2版)課后習題3.14、P123

MUL與IMUL的詳細區別 乘數位數隱含的被乘數乘積的存放位置舉例8位ALAX中MUL BL16位AXDX與AX中&#xff08;DX存放高16位、AX存放低16位&#xff09;MUL BX 課本P97例題 一&#xff09;、將以下指令中的立即數看作是無符號數實現相乘: MOV AL,0B4H ;ALB4H180 解釋以下&…

SDL_main導致main找不到入口

SDL main的錯誤 引用SDL.h就會報這個錯誤 因為SDL 將main 宏定義為 SDL_main,所以會找不到main入口 可以使用#undef main取消這個宏定義

Java MathContext類| hashCode()方法與示例

MathContext類的hashCode()方法 (MathContext Class hashCode() method) hashCode() method is available in java.math package. hashCode()方法在java.math包中可用。 hashCode() method is used to get the hash code value of this MathContext. hashCode()方法用于獲取此M…

實驗8 SQL Server 的存儲過程

實驗8 SQL Server 的存儲過程一、實驗目的 1.掌握使用T-SQL編程的方法 2.掌握使用T-SQL語句創建一個存儲過程并驗證 3.掌握創建和執行帶參數的存儲過程 4.熟練使用系統存儲過程、系統函數 二、實驗要求 1.創建一個不帶參數的存儲過程。 2.創建一個帶參數的存儲過程p_count。 三…

Oracle ——如何確定性能差的 SQL

http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/TSQ7/Default.aspx 本文主要說明在應用程序內書寫和調優 SQL 語句。假設&#xff0c;你已經知道你應用程序中的哪些 SQL 語句需要注意。事實上&#xff0c;這不太容易。那么&#xff0c;我們如何…

C#中的委托和事件(續)

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 歡迎瀏覽本文的后續文章&#xff1a; C#中的委托和事件(續)PDF 瀏覽&#xff1a;http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代碼在VS2005下通過&#xff0c;由于VS2003(.Ne…

Java LocalDate類| minusYears()方法與示例

LocalDate類minusYears()方法 (LocalDate Class minusYears() method) minusYears() method is available in java.time package. minusYears()方法在java.time包中可用。 minusYears() method is used to subtract the given years from this LocalDate and return the LocalD…

ffmpeg 命令添加圖片水印

使用ffplay預覽一下&#xff1a; ffplay -i cctvhttp.flv -vf “moviewatermark.png[watermark];[in][watermark]overlay x10:y10[out]” -x 640 -y 480 參數&#xff1a; 有兩個過濾器movie\overlay movie&#xff1a;讀取watermark.png輸出 [watermark]可以理解自定義的的變…

實驗9 SQL Server 的觸發器

實驗9 SQL Server 的觸發器一、實驗目的 1.了解觸發器的觸發過程和類型 2.通過執行SQL腳本&#xff0c;掌握創建觸發器并測試觸發器 3.掌握通過使用觸發器維護數據完整性的方法。 二、實驗要求 1.按指定要求創建觸發器。 三、實驗步驟 1.創建一個名為tr_age的觸發器&#xff0…