Win32ASM學習[19]:結構與聯合

?

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義.
它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

結構示例:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------?
.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

;定義結構
MyPoint struct
??? X dd ?
??? Y dd ?
MyPoint ends

.data
??? ;聲明結構, 使用 <>、{} 均可
??? pt1 MyPoint <>
??? pt2 MyPoint {}
??? pt3 MyPoint <33,44>
??? pt4 MyPoint {55,66}
??? pt5 MyPoint {77,}
??? pt6 MyPoint {,88}
??? pt7 MyPoint {,}
.code
main proc
??? mov pt1.X, 11
??? mov pt1.Y, 22
??? inc pt1.X
??? PrintDec pt1.X ;12
??? PrintDec pt1.Y ;22
??? ;
??? PrintDec pt2.X ;0
??? PrintDec pt2.Y ;0
??? ;
??? PrintDec pt3.X ;33
??? PrintDec pt3.Y ;44
??? ;
??? PrintDec pt4.X ;55
??? PrintDec pt4.Y ;66
??? ;
??? PrintDec pt5.X ;77
??? PrintDec pt5.Y ;0
??? ;
??? PrintDec pt6.X ;0
??? PrintDec pt6.Y ;88
??? ;
??? PrintDec pt7.X ;0
??? PrintDec pt7.Y ;0
??? ret
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

;定義聯合
MyUnion union
??? D dd ?
??? W dw ?
??? B db ?
MyUnion ends

.data
??? u1 MyUnion <>
??? u2 MyUnion {1122h} ;只能有一個初始值
.code
main proc
??? mov u1.D, 12345678h
??? PrintHex u1.D ;12345678
??? PrintHex u1.W ;5678
??? PrintHex u1.B ;78
??? ;
??? PrintHex u2.D ;00001122
??? PrintHex u2.W ;1122
??? PrintHex u2.B ;22
??? ret
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

MyPoint struct
??? X dd ?
??? Y dd ?
MyPoint ends

.data
??? pt1 MyPoint <11,22>
.code
main proc
??? lea ebx, pt1
??? PrintDec (MyPoint ptr [ebx]).X ;11
??? PrintDec (MyPoint ptr [ebx]).Y ;22
??? ret
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

MyStruct struct
??? FName db 12 dup(0)
??? FAge? db 66
MyStruct ends

.data
??? u1 MyStruct <>
??? u2 MyStruct <'張三', 88>
.code
main proc
??? PrintString u1.FName ;
??? PrintDec??? u1.FAge? ;66
???
??? PrintString u2.FName ;張三
??? PrintDec??? u2.FAge? ;88
??? ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用 SYSTEMTIME 結構獲取系統時間的例子:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------?
.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

;SYSTEMTIME 結構定義在 windows.inc
;GetLocalTime 函數聲明在 kernel32.inc
.data
??? sysTime SYSTEMTIME <>
.code
main proc
??? invoke GetLocalTime, addr sysTime
??? PrintDec sysTime.wYear? ;2010
??? PrintDec sysTime.wMonth ;4
??? PrintDec sysTime.wDay?? ;22
??? ret
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

Pt struct
?? X dd ?
?? Y dd ?
Pt ends

Rect struct
??? Left? Pt <>
??? Right Pt <>
Rect ends

.data
??? r1 Rect <>
??? r2 Rect <<55,66>, <77,88>>
.code
main proc
??? mov r1.Left.X, 11
??? mov r1.Left.Y, 22
??? mov r1.Right.X, 33
??? mov r1.Right.Y, 44
???
??? PrintDec r1.Left.X? ;11
??? PrintDec r1.Left.Y? ;22
??? PrintDec r1.Right.X ;33
??? PrintDec r1.Right.Y ;44
???
??? PrintDec r2.Left.X? ;55
??? PrintDec r2.Left.Y? ;66
??? PrintDec r2.Right.X ;77
??? PrintDec r2.Right.Y ;88
??? ret
main endp
end main

?

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

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

相關文章

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…

Birt使用總結

把report放到其他服務器要重新建立Data Source ,這是配置&#xff0c;拷貝項目時不會同時拷貝 (1)在EXTJs中利用Report實現報表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

Win32ASM學習[20]:子程序

關于函數調用約定 :函數調用約定 這是以前的一個求和函數的例子 ---------------------------------------------------------------------------------------------------------------- .386 .model flat, stdcall include windows.inc include kernel32.inc include …

Mac聯網恢復系統重新安裝Lion

Mac的Lion系統&#xff0c;雖然不像Windows那樣需要經常重裝&#xff0c;但也難免會有要重置的時候&#xff0c;比如更換硬盤。本文介紹如何利用Mac的聯網恢復系統進行Lion系統的在線恢復。Mac的在線恢復系統只在近幾年的機型上才有&#xff0c;在進行系統恢復前&#xff0c;請…

【線性代數公開課MIT Linear Algebra】 第二十三課 微分方程與exp(At)

本系列筆記為方便日后自己查閱而寫&#xff0c;更多的是個人見解&#xff0c;也算一種學習的復習與總結&#xff0c;望善始善終吧~ 一階常系數微分方程 Aududt 將一階常系數微分方程轉換為線性代數問題的關鍵在于常系數微分方程的解一定是指數形式的。那么我們的需要求解的東西…

Win32ASM學習[21]:宏匯編(1)

-------------------------------------------------------------------------------------------------------------------- 嗯 上個星期到現在 把Win32ASM基礎匯編復習了下 在網上找到了 這個不錯系列 于是就轉載過來了 其中 根據我自己的水平 刪減了一些內容 或…

ubunu安裝軟件的一個錯誤

http://tonychiu.blog.51cto.com/656605/654776/ 由于ubuntu/debian軟件庫中有時候不同的庫更新速度不一致&#xff0c;apt-get 出出現如下的錯誤提示 Some packages could not be installed. This may mean that you have requested an impossible situation or if you are us…

常用的基本Windows數據類型

常用的基本Windows數據類型 --------------------------------------------------------------------------------------------------------------------------------------------------------- 類 型 …

刪除空文件夾 清除CS擴展名文件 bat

刪除空文件夾。刪的干凈。刪的徹底。 將下列代碼復制到txt中保存。并把后綴.txt命成.bat。然后運行即可。 方案&#xff11;.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 刪除指定目錄及其子目錄下的空文件夾.bat 代碼&#xff1a;…

ios 坐標轉換

// 將像素point由point所在視圖轉換到目標視圖view中&#xff0c;返回在目標視圖view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; // 將像素point從view中轉換到當前視圖中&#xff0c;返回在當前視圖中的像素值 - (CGPoint)convertPoint:(C…

80X86偽指令

8086 偽指令表 一、數據定義偽操作 偽 指 令 名 稱 語 句 格 式 功 能 定義字節類型的數據存儲區 [變量名] DB 表達式[&#xff0c;…] 定義一個以變量名為首址的字節類型數據存儲區&#xff0c;所含數據元素的個數由其后表達式的個數所決定&#xff0c;數據存儲單元…

jQuery慢慢啃之選擇器(二)

1.$("#myDiv");ID匹配一個元素 <span id"foo[bar]"></span> $("#foo\\[bar\\]);//轉義 2.$("div");//元素標簽名匹配 3.$(".myClass"); css類名匹配 4.$("*") 匹配所有元素&#xff0c;多用于結合上下文…

iOS學習之基本概念

學習iOS最重要的是態度和興趣&#xff0c;如果你對于學習始終抱有不斷的熱情和端正的態度&#xff0c;那么&#xff0c;無論是什么&#xff0c;你總會成功的&#xff01; 有一句話與大家共勉&#xff1a;過程中跌倒多少次都沒有關系&#xff0c;重要的是&#xff0c;跌倒后你能…

Win32ASM代碼基本模塊

;-------------------------------------------------------------------------------- ;程序環境設置 .386 .model flat,stdcall option casemap:none ;-------------------------------------------------------------------------------- ;頭文件與庫文件導入 include windo…

ORA-16038: log 3 sequence# 103 cannot be archived

[sizelarge]今天在自己機器做了個實驗&#xff0c;插入10萬條&#xff0c;由于空間少&#xff0c;重啟數據庫時出現&#xff1a; [sizex-large]SQL> startup ORACLE instance started. Total System Global Area 188743680 bytes Fixed Size 1218460 byte…

Win32ASM學習[23]:RadASM快捷鍵

RadASM快鍵操作 一.書簽 SHIFTF8為所在行下書簽或刪除書簽(Crtl0-9能定義存于文件中的10個書簽)&#xff0c; 可通過編輯\書簽\開關書簽。&#xff08;CRTLF8為下一書簽&#xff0c;F8為上一書簽&#xff09; 二、列選擇&#xff1a; 拉框時用到&#xff0c;CRTLB為切換行…

SAP MM/FI 自動過賬實現 OBYC 接口執行

一. 自動過賬原理 在MM模塊的許多操作都能實現在FI模塊自動過賬&#xff0c;如PO收貨、發票驗證(LIV)、工單發料、向生產車間發料等等。不用說&#xff0c;一定需要在IMG中進行配置才可以實現自動處理。但SAP實現的這種自動配置的機制是怎樣的呢&#xff1f;其實也并不復雜&…

JAVA 字符處理

/** * 分割字符串 * * param str String 原始字符串 * param splitsign String 分隔符 * return String[] 分割后的字符串數組 */ SuppressWarnings("unchecked") public static String[] split(String str, String splitsign) { int index; if (str null || …

Win32ASM-進程學習【1】

關于一些進程的概念就不說了。。。 一創建進程GreateProcess (1).當一個進程被創建時: ①.系統為進程創建一個內核對象,并將這個對象的計數設置為1,進程對象只是一個比較小的數據結構,可以通過進程句柄來引用 ②.系統為進程創建一個虛擬地址空間,并將可執行文件裝載到這個地…

Object-C,NSArraySortTest,數組排序3種方式

晚上回來&#xff0c;繼續寫Object-C的例子&#xff0c;今天不打算寫iOS可視化界面的程序&#xff0c;太累了。剛剛dady又電話過來&#xff0c;老一套&#xff0c;煩死了。其實&#xff0c;我一直一個觀點&#xff0c;無論發生什么事情&#xff0c;不要整天一副不開心的樣子。開…