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.mzph.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;不要整天一副不开心的样子。开…