1
.條件測試語句
操作符和邏輯運算 操 作 用 途 ==
等於變數和運算元之間的比較 !=
不等於變數和運算元之間的比較
> 大於
變數和運算元之間的比較
>=
大於等於
變數和運算元之間的比較
< 小於
變數和運算元之間的比較
<=
小於等於
變數和運算元之間的比較 &
位測試將變數和運算元做「與」操作 !
邏輯取反
對變數取反或對表示式的結果取反 &&
邏輯與對兩個表示式的結果進行邏輯「與」操作 ||
邏輯或對兩個表示式的結果進行邏輯「或」操作
x==3
eax!=3
(y>=3)&&ebx
(z&1)||!eax
masm 的條件測試採用的是和 c 語言相同的語法。 對於不含比較符的單個變數或暫存器, masm 也將所有非零值認為是「真」,零值認為是「假」
masm的條件測試語句有幾個限制:
( 1 )表示式的左邊只能是變數或暫存器,不能為常數;
( 2 )表示式的兩邊不能同時為變數,但可以同時是暫存器。
這些限制來自於 80x86 的指令,因為條件測試偽操作符只是簡單地把每個表示式翻譯成 cmp 或 test 指令, 80x86 的指令集中沒有 cmp 0,eax 之類的指令,同時也不允許直接操作兩個記憶體中的數。
標誌位的狀態條件測試:
carry? 表示 carry 位是否置位
overflow? 表示 overflow 位是否置位
parity? 表示 parity 位是否置位
sign? 表示 sign 位是否置位
zero? 表示 zero 位是否置位
2
.分支語句、只能用於無符號數
3
.迴圈語句
.while 條件測試表示式
指令 [.break [.if 退出條件 ]]
[.continue]
.endw 或
.repeat
指令 [.break [.if 退出條件 ]]
[.continue]
.until 條件測試表示式 (或 .untilcxz [ 條件測試表示式 ]
.while eax > 1
mov esi,1
.break .if ebx
.continue
mov esi,2
.endw
loop 指令可以自動遞減 ecx 的值來控制迴圈,不使用 loop 將會在迴圈體內多設定一條引數遞減的指令,但不用 loop 指令的好處是帶來更多的靈活性。
Win32彙編基礎
常用指令 mov 目標運算元,源運算元 mov eax,0x0 進行資料傳遞 movzx mov zero x 以0填充高位,用法同上,push poppushad 所有暫存器壓棧 8個 popad 所有暫存器出棧 8個 lea 取位址指令,類似c語言中的 call 呼叫函式指令 add 加 sub...
Win32彙編 實數
386 選擇的處理器 model flat,stdcall option casemap none 指明識別符號大小寫敏感 include kernel32.inc 要引用的標頭檔案 includelib kernel32.lib 要引用的庫檔案 includelib msvcrt.lib 引用c庫...
開始學習win32彙編
前段時間對於csdn的部落格系統徹底失望,在我現在寫的東西都還不知道能不能正常發出去,鬱悶,加上過年有這麼久沒有來了。這段時間開始學習彙編,說到彙編,大學開過兩門相關課程,微機原理和微控制器都是學這方面的,不過那都是8086,51級別的彙編,感覺根本跟不上時代,那時候學的還不錯 現在想學習學習win...