|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
说明:汇编语言中的结构体和公用体与C语言中的基本类似。
汇编语言的结构体定义格式如下:
请仔细阅读以下两个实例,看看如何实现:
实例一:
- .386
- .model flat, stdcall
- option casemap :none
- include windows.inc
- include kernel32.inc
- includelib kernel32.lib
- include user32.inc
- includelib user32.lib
- include masm32.inc
- includelib masm32.lib
- .data
- ;COORD STRUCT ;windows.inc 文件中有定义
- ; x WORD ?
- ; y WORD ?
- ;COORD ENDS
- buffer db 100 dup(0)
- szFmt db 'stPos.x 的和 = %d, stPos.y 的和 = %d',0
- stPos COORD 10 dup(<0,0>) ;定义结构体数组
- .code
- start:
- mov ecx,10
- mov edi,offset stPos ;edi指向结构体变量
- mov eax,1
- mov ebx,11
- @@:
- mov (COORD ptr[edi]).x, ax
- mov (COORD ptr[edi]).y, bx
- add edi,type COORD ;指向下一个结构体
- inc ax
- inc bx
- loop short @B
-
- xor eax,eax
- xor ebx,ebx
- mov ecx,10
- mov edi,offset stPos ;edi指向结构体变量
- @@:
- add ax,(COORD ptr[edi]).x
- add bx,(COORD ptr[edi]).y
- add edi,type COORD ;指向下一个结构体
- loop short @B
-
- invoke wsprintf, ;格式化信息串
- addr buffer, ;信息串格式化后的存放地
- addr szFmt, ;信息串的格式
- eax,
- ebx
-
- invoke ClearScreen ;清屏
- invoke locate,10,10 ;光标定位(x,y)
- invoke StdOut,addr buffer ;显示串
- invoke ExitProcess,0 ;结束进程
- end start
复制代码
实例二:
- .386
- .model flat, stdcall
- option casemap:none
-
- include windows.inc
- include kernel32.inc
- includelib kernel32.lib
- include user32.inc
- includelib user32.lib
- .data
- sysTime SYSTEMTIME <> ; 定义结构体变量
- CapMsg db '系统当前时间', 0
- szFmt db '%d年%2d月%2d日', 0Dh, 0Ah, 0Dh, 0Ah
- db '%2d:%2d:%2d', 0
- buffer db 80 dup(0)
- .code
- start:
- invoke GetLocalTime, offset sysTime ; 调用API函数获取系统时间(返回放在sysTime结构体)
- movzx esi, sysTime.wYear
- movzx edi, sysTime.wMonth
- movzx edx, sysTime.wDay
- movzx eax, sysTime.wHour
- movzx ebx, sysTime.wMinute
- movzx ecx, sysTime.wSecond
-
- invoke wsprintf, addr buffer, addr szFmt, esi, edi, edx, eax, ebx, ecx
- invoke MessageBox, NULL, offset buffer, offset CapMsg, MB_ICONQUESTION
- invoke ExitProcess, 0
-
- end start
复制代码
|
|