Win32匯編學習[7]: 定義符號常量(=、EQU、TEXTEQU)

?

關于符號常量 =的例子

.386
.model flat,
stdcall

include
?? windows.inc

include
?? kernel32.inc
include
?? masm32.inc
include
?? debug.inc
includelib
kernel32.lib
includelib
masm32.lib
includelib
debug.lib
???
.data
??? n = 1??????; = 偽指令只能定義整數或整數表達式
??? n = n + 1; 可重復定義
.code


main proc
??? PrintDec n? ?;2
???ret
main
endp
end?
main
-------------------------------------------------------------------------------------------------------------------------------------------

Equ的一個例子

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

; Test13_2.asm
.386
.model flat,
stdcall

include
?? windows.inc

include
?? kernel32.inc
include
?? masm32.inc
include
?? debug.inc
includelib
kernel32.lib
includelib
masm32.lib
includelib
debug.lib
???
.data
??? num1 equ 2??? ??? ; equ 可以定義整數和整數表達式
??? num2 equ 3??? ??? ; 它不能像 = 一樣重復定義
??? num3 equ num1+num2 ; (我嘗試了重復定義, 竟然有時也可以, 只是偶爾)
???
??? txt?equ <'Asm'>? ; 可用 equ 定義字符串, 應使用 <>
???
??? szTxt db txt, 0?? ; 使用 equ 定義的常量
.code
main proc
??? PrintDec num3??? ;5
??? PrintString szTxt ;Asm
???ret
main
endp
end
main

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

Equ函數宏定義

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

.386
.model flat,
stdcall

include
?? windows.inc

include
?? kernel32.inc
includelib
kernel32.lib
include
?? user32.inc
includelib
user32.lib

; 用 equ 給函數重命名Msg?equMessageBox
Exit equ <ExitProcess> ;尖括號可保證字符串的完整、并避免和關鍵字沖突
; 甚至代替整個表達式
ShowMsg equ <invoke MessageBox, NULL,addr szMsg,addr szCaption, MB_OK>

.data
??? szMsg????? db???'Hello World!', 0
??? szCaption db?? 'Hi', 0
.code
main proc
???invoke
Msg, NULL,addr szMsg,addr szCaption, MB_OK
???ShowMsg
???invoke Exit, NULL
main
endp
end
main

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

textequ

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

; Test13_4.asm
.386
.modelflat,
stdcall

include
?? windows.inc

include
?? kernel32.inc
includelib
kernel32.lib
include
?? user32.inc
includelib
user32.lib

Msg?textequ MessageBox
Exit textequ <ExitProcess>
ShowMsg textequ <invoke MessageBox, NULL,addr szMsg,addr szCaption, MB_OK>

.data
??? szMsg????db? 'Hello World!', 0
??? szCaption db ?'Hi', 0
.code
main proc
???invoke
Msg, NULL,addr szMsg,addr szCaption, MB_OK
??? ShowMsg
???invoke Exit, NULL
main
endp
end
main

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

.386
.model? flat,
stdcall

include
?? windows.inc

include
?? kernel32.inc
include
?? masm32.inc
include
?? debug.inc
includelib
kernel32.lib
includelib
masm32.lib
includelib
debug.lib
???
.data
??? num1 equ 2??? ??? ????? ; 這里的 equ 換做 textequ 不行
??? num2 textequ <3>??? ??? ; 如果用 textequ 定義整數或表達式也要放在 <> 中
??? num3 textequ <num1+num2> ; 這曾是 num3 equ num1+num2
???
??? txt?textequ <'Asm'>??? ;
??? txt?textequ <'Delphi'> ; textequ 可重復定義
???
??? szTxt db txt, 0
.code
main proc
??? PrintDec num3??? ;5
??? PrintString szTxt ;Delphi
???ret
main
endp
end
main
------------------------------------------------------------------------------------------------------

?

哈哈? 強大的宏替換吧???

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

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

相關文章

oracle 刪除表中重復記錄,并保留一條

1、查找表中多余的重復記錄&#xff0c;重復記錄是根據單個字段&#xff08;Id&#xff09;來判斷 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、刪除表中多余的重復記錄&#xff0c;重復記錄是根據單個字段&#xff08;Id&#x…

透過WinDBG的視角看String

摘要 : 最近在博客園里面看到有人在討論 C# String的一些特性. 大部分情況下是從CODING的角度來討論String. 本人覺得非常好奇, 在運行時態, String是如何與這些特性聯系上的. 本文將側重在通過WinDBG來觀察String在進程內的布局, 以此來解釋C# String的一些特性. 問題 C# Stri…

Win32ASM學習[8]: 進制轉換的庫函數

在 masm32.inc 中有這樣幾個函數的聲明: byt2bin_ex PROTO :BYTE, :DWORD wrd2bin_ex PROTO :WORD, :DWORD dw2bin_ex PROTO :DWORD, :DWORD dw2hex_ex PROTO :DWORD, :DWORD bin2byte_ex PROTO :DWORD -------------------------------------------------------------…

SOJ 2800_三角形

真的是O不是0【看了discuss才發現。。。。。一個大寫的蠢 【題意】多個黑白三角形組成的倒三角&#xff0c;求白三角形組成的最大倒三角的面積 【分析】由于問的是倒三角個數&#xff0c;所以只需看與行數奇偶性相同的白色倒三角形&#xff0c;設v[i][j]為以第i行第j列的倒三角…

ueditor富文本編輯器 修改框寬度和高度的方法

在使用ueditor的時候&#xff0c;用的textarea <textarea name"content" id"myEditor">這里寫這條規則的回復內容</textarea> 給它加style"width:300" 屬性的時候&#xff0c;發現不起作用。 正確的方法應該是&#xff1a; <scri…

Win32ASM學習[9]: 標志寄存器

TF(Trap Flag)——位8&#xff0c;跟蹤標志。置1 則開啟單步執行調試模式&#xff0c;置0 則關閉。在單步執行模式下&#xff0c;處理器在每條指令后產生一個調試異常&#xff0c;這樣在每條指令執行后都可以查看執行程序的狀態。如果程序用POPF、POPFD 或者ET 指令設置TF 標志…

TCP多進程并發服務端 Linux socket編程入門(2)

這里很簡單的使用了fork()函數&#xff0c;在執行了fork()以后的所有代碼都會由子進程和父進程同時執行。 他們同時擁有相同的資源&#xff08;兩份拷貝&#xff09;&#xff0c;所以在子進程執行的過程中&#xff0c;子進程需要先close掉listenfd&#xff08;監聽套接字&#…

ArcEngine 打開shape文件

IWorkspaceFactory wsf new ShapefileWorkspaceFactory(); IWorkspace pWorkspace wsf.Open(filePath, 0) ;//filePath為shapefile所在的文件夾 IFeatureWorkspace pFeatureWorkspace pWorkspace ; IFeatureClass pFeatureClass pFeatureWorkspace.OpenFeatureClass(&quo…

Win32ASM學習[10]:傳送指令

匯編指令的一般性要求: 1、兩個操作數的尺寸必須一致; 2、操作數不能同為內存. --------------------------------------------------------------------------------------------------------------- ;mov ;該指令不影響 EFlags ;指令格式: (其中的 r、m、i 分別表示: 寄存器、…

SQL Server 中關于 @@error 的一個小誤區

SQL Server 中關于 error 的一個小誤區 原文:SQL Server 中關于 error 的一個小誤區在SQL Server中&#xff0c;我常常會看到有些前輩這樣寫&#xff1a; if(error<>0)ROLLBACK TRANSACTION T elseCOMMIT TRANSACTION T 一開始&#xff0c;我看見別人這么寫&#xff0c;我…

Win32ASM學習[11]:邏輯運算

--------------------------------------------------------------------------------------------------------------------------- 一.邏輯與運算指令 AND 格式: AND OPRD1,OPRD2其中目的操作數OPRD1為任一通用寄存器或存儲器操作數.源操作數OPRD2為立即數、任一通用寄存器…

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): 將 …