首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

学 Win32 汇编[31] - 构造与联合

2012-09-09 
学 Win32 汇编[31] - 结构与联合结构和联合分别用 struct、union 定义, 都是 ends 结束定义.它们使用方法相

学 Win32 汇编[31] - 结构与联合

结构和联合分别用 struct、union 定义, 都是 ends 结束定义.
它们使用方法相同, 并可以互相嵌套; 主要区别是后者的各成员共用同一个地址.


结构示例:

; Test31_1.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib 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 {,}.codemain 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?   retmain endpend main


联合示例:

; Test31_2.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib;定义联合MyUnion union?   D dd ??   W dw ??   B db ?MyUnion ends.data?   u1 MyUnion <>?   u2 MyUnion {1122h} ;只能有一个初始值.codemain 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?   retmain endpend main


用寄存器引用结构变量:

; Test31_3.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.libMyPoint struct?   X dd ??   Y dd ?MyPoint ends.data?   pt1 MyPoint <11,22>.codemain proc?   lea ebx, pt1?   PrintDec (MyPoint ptr [ebx]).X ;11?   PrintDec (MyPoint ptr [ebx]).Y ;22?   retmain endpend main


定义时的数据初始化:

; Test31_4.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.libMyStruct struct?   FName db 12 dup(0)?   FAge  db 66MyStruct ends.data?   u1 MyStruct <>?   u2 MyStruct <'张三', 88>.codemain proc?   PrintString u1.FName ;?   PrintDec?   u1.FAge  ;66?   ?   PrintString u2.FName ;张三?   PrintDec?   u2.FAge  ;88?   retmain endpend main


使用 SYSTEMTIME 结构获取系统时间的例子:

; Test31_5.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib;SYSTEMTIME 结构定义在 windows.inc;GetLocalTime 函数声明在 kernel32.inc.data?   sysTime SYSTEMTIME <> .codemain proc?   invoke GetLocalTime, addr sysTime?   PrintDec sysTime.wYear  ;2010?   PrintDec sysTime.wMonth ;4?   PrintDec sysTime.wDay   ;22?   retmain endpend main


结构嵌套:

; Test31_6.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.libPt struct   X dd ?   Y dd ? Pt endsRect struct?   Left  Pt <>?   Right Pt <>Rect ends.data?   r1 Rect <>?   r2 Rect <<55,66>, <77,88>>.codemain 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?   retmain endpend main

热点排行