Win32ASM學習[11]:邏輯運算

? ---------------------------------------------------------------------------------------------------------------------------?

一.邏輯與運算指令 AND

?格式: AND OPRD1,OPRD2其中目的操作數OPRD1為任一通用寄存器或存儲器操作數.源操作數OPRD2為立即數、任一通用寄存器或存儲器操作數.

?功能: 對兩個操作數實現按位邏輯與運算,結果送至目的操作數.本指令可以進行字節或字
?的‘與’運算.OPRD1<--OPRD1 and OPRD2.

?說明: 1. 例如: AND AL,0FH?????????? ; (AL)<--(AL) AND 0FH?
?????????????????????AND AX,BX??????????? ; (AX)<--(AX) AND (BX)?
?????????????????????AND DX,BUFFER[SI+BX]?
?????????????????????AND BETA[BX],00FFH

?????? 2. 本指令影響標志位PF、SF、ZF,使CF=0、OF=0.
?????????? 例如,在同一個通用寄存器自身相與時,操作數雖不變,但使CF置零.本指令主要用于修改操作數或置某些位為零.

?????? 3. 上例中的每一條指令,將使AL寄存器的高4位置成零保持AL低4位值不變.

?????? 4. 兩數相與,有一個數假則值為假

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

and小寫轉換大寫

.data
??? szText db 'Delphi', 0
.code
main
proc
??????? ?lea esi
, szText
???????? mov ecx, lengthof szText - 1
@@:? and byte ptr [esi], 11011111b?? ;大寫字母和小寫字母只有第五位不同
?????????inc esi
???????? loop
@B
???????? PrintString szText ;DELPHI
???????? ret
main
endp
end
main

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

邏輯或指令 OR

?格式: OR OPRD1,OPRD2

?功能: 其中OPRD1、OPRD2含義與AND指令相同, 對標志位的影響也與AND指令相同.唯一不同的地方是,OR指令完成對兩個操作數按位的‘或’運算,結果送至目的操作數中,?本指令可以進行字節或字的‘或’運算.
?????? OPRD1<--OPRD1 OR OPRD2.

;該指令會置 CF=OF=0; 其結果影響 SF、ZF、PF
;指令格式:
OR r/m, r/m/i

說明: 兩數相或,有一個數為真則值為真

?

or 轉小寫

.data
??? szText db'Delphi', 0
.code
main
proc
????????? lea? esi
, szText??

??????? ?movecx,lengthof szText - 1
@@:? or byte ptr [esi], 00100000b??? ;大寫字母和小寫字母只有第五位不同
???????? inc? esi
???????? loop
@B
???????? PrintString szText ;delphi
???????? ret
main
endp
end
main

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

邏輯異或運算指令 XOR

格式: XOR OPRD1,OPRD2
功能: 其在OPRD1、OPRD2的含義與AND指令相同,對標志位的影響與與AND指令相同.本指令的功能是實現兩個操作數按位‘異或’運算,結果送至目的操作數中.它可以進行字節或字的‘異或’運算.OPRD1<--OPRD1 XOR OPRD2

;該指令會置 CF=OF=0; 其結果影響 SF、ZF、PF
;指令格式:
XOR r/m, r/m/i

兩次和一個相同的數 XOR 恢復到原來的數

.data
??? szText db 'Hello World!', 0
.code
main proc
?????? ?;加密
????????lea???? esi, szText
????? ? mov? ecx, lengthof szText - 1
@@: xor byte? ptr [esi], 123 ;使用 123 做密碼
?????? ?inc?? esi
??????? loop
@B
??????? PrintString szText???? ;顯示亂碼
???
?????? ;解密
?????? ?lea esi, szText
????????mov? ecx, lengthof szText - 1

@@: xor byte? ptr [esi], 123
??????? inc? esi
??????? loop
@B
??????? PrintString szText???? ;Hello World!
??????? ret
main
endp
end
main

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

not

;該指令不影響 EFlags
;指令格式:
NOT r/m

.data
??? szText db 'Hello World!', 0
.code
main proc
??????? ;加密
??????? lea esi, szText
??????? mov ecx, lengthof szText - 1
@@: not? byte? ptr [esi]
???????
inc? esi
??????? loop
@B
??????? PrintString szText ;顯示亂碼
???
??????? ;解密
??????? leaesi, szText
??????? mov? ecx, lengthof szText - 1
@@: notbyte ptr [esi]
?????? ?
inc esi
?????? ?loop
@B
????? ? PrintString szText ;Hello World!
????? ? ret
main
endp
end
main
-----------------------------------------------------------------------------------------------------------------

測試指令 TEST

格式: TEST OPRD1,OPRD2?
功能: 其中OPRD1、OPRD2的含義同AND指令一樣,也是對兩個操作數進行按位的‘與’運算? ,唯一不同之處是不將‘與’的結果送目的操作數,即本指令對兩個操作數的內容均不進行修改,僅是在邏輯與操作后,對標志位重新置位.

說明: TEST與AND指令的關系,有點類似于CMP與SUB指令之間的關系.

?

;判斷字母 A 二進制(01000001)的其最后一位是否是 0, 如果是 0 那么 ZF=1
??? mov? al, 'A'

??? test al
, 00000001b
??? lahf

??? PrintHex ah ;02 - 00000010b (ZF=0)

;判斷 ecx 是否為空
??? mov ecx, 1

??? test ecx
,ecx
??? lahf

? PrintHex ah ;06 - 00000010b (ZF=0, 不為空)

??? xor? ecx,ecx
??? test ecx
,
ecx
??? lahf

??? PrintHex ah ;06 - 01000110b (ZF=1, 為空)

------------------------------------------------------------------------------
判斷字符串中每個字符的二進制位的最后一位是 1 還是 0

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

.data
??? szText db 'Delphi', 0
.code
main proc
?? ;清空兩個寄存器用于計數
??? xor? eax,
eax
??? xor? edx
,
edx
???
?? ? lea esi
, szText??? ??? ??? ??? ;字符串地址
??? ?mov? ecx, lengthof szText - 1?? ;字符串長度
L1: test byte ptr [esi], 00000001b ;循環測試每個字符的最后一位是 1 還是 0
????? jz L2?? ;如果是 0 則跳到 L2 給 edx+1
??? ? inc eax ;反之給 eax+1
???? ?jmp L3
L2: inc?? edx
L3:
inc?? esi
??????loop
L1
???
???? PrintDec eax ;2 - 這是最后一位是 1 的字符的個數: e、i
???? PrintDec edx ;4 - 這是最后一位是 0 的字符的個數: D、l、p、h
??? ?ret
main endp

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

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

相關文章

JavaScript消息框

1.警告框 function myTest(){alert("這里的內容會彈出");} 2.確認框 其返回的值是 true 或 false 。 function myTest(){confirm("這里的內容會彈出");} 3.提示框 prompt prompt(參數1&#xff0c;參數2)&#xff1a;其參數1 是顯示提示要輸入的信息&…

.Net 事務

在分布式應用程序中&#xff0c;不可避免地會經常使用到事務控制。事務有一個開頭和一個結尾&#xff0c;它們指定了事務的邊界&#xff0c;事務在其邊界之內可以跨越進程和計算機。事務邊界內的所有資源都參與同一個事務。要維護事務邊界內資源間的一致性&#xff0c;事務必須…

Win32ASM學習[12]:位測試指令位掃描指令

----------------------------------------------------------------------------------------------------------------------- 一.BT 指令 格式: BT OPD,OPS 功能: 目的操作數OPD中由源操作數OPS指定的位送CF標志 說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器…

Android WifiDisplay分析一:相關Service的啟動

網址&#xff1a;http://www.2cto.com/kf/201404/290996.html 最近在學習Android 4.4上面的WifiDisplay(Miracast)相關的模塊&#xff0c;這里先從WifiDisplay用到的各個Service講起&#xff0c;然后再從WifiDisplaySettings里面講解打開wfd的流程。首先看下面的主要幾個Servic…

mvc controller跳轉頁面方法

1、直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); // return Redirect("/User/Edit"); return RedirectToAction("about","Home"); Response.Redirect("/User/Edit"); 2、直接r…

Win32ASM學習[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

一. SHL、SHR、SAL、SAR: 移位指令 ---------------------------------------------------------------------------------------------------- ;SHL(Shift Left): 邏輯左移 ;SHR(Shift Right): 邏輯右移 ;SAL(Shift Arithmetic Left): 算術左移 ;SAR(Shift Ari…

angular中的表單驗證

angular中的表單驗證很強大&#xff0c; 一共有5中驗證信息&#xff0c;$valid,$invalid,$pristine,$dirty,$error. $valid-----當驗證通過的時候&#xff0c;為true,不通過的時候為false $invalid----當驗證不通過的時候&#xff0c;為true&#xff0c;通過的時候為true $pris…

Cortex-A15 Memory Hierarchy

ARM 平臺為實現速度和成本的平衡&#xff0c;使用多個層次的內存架構。對于多核 CPU 組成的 SOC&#xff0c;每個CPU 內部都有一組高速緩存&#xff0c;包含&#xff1a;ICache、DCache 和 TLB。多個 CPU 共享一個更大的 L2 緩存。L2緩存再和 CPU 外部的DDR3 內存交互。ICache …

Win32ASM學習[14]:符號擴展指令: CBW,CWDE,CDQ,CWD

----------------------------------------------------------------------------------------------------------------------------------------------------------------- ;CBW(Convert Byte to Word): 將 AL 擴展為 AX ;CWDE(Convert Word to Extended Double): 將 …

Win32ASM學習[15]:加減指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;INC(Increment): 加一 ;DEC(Decrement): 減一 ;NEG(Negate): 求補(求反) ;ADD(Add): 加 ;A…

UINavigationController的簡單使用

UINavigationController的使用步驟初始化UINavigationController設置UIWindow的rootViewController為UINavigationController根據具體情況&#xff0c;通過push方法添加對應個數的子控制器UINavigationController的子控制器UINavigationController以棧的形式保存子控制器proper…

Android 圖片的縮略圖

<1>簡介 之前往往是通過Bitmap、Drawable和Canvas配合完成&#xff0c;需要寫一系列繁雜的邏輯去縮小原有圖片&#xff0c;從而得到縮略圖。 現在我給大家介紹一種比較簡單的方法&#xff1a;&#xff08;網上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一個T…

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

---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一. 無符號數乘法指令 MUL(MULtiply) 格式: MUL OPRD 功能: 乘法操作. 說明: 1. OPRD為通用…

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.…