WIN32彙編的高階語法

2021-05-24 07:58:20 字數 1693 閱讀 9590

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