高级语法 结构体 的使用
说明:汇编语言中的结构体和公用体与C语言中的基本类似。汇编语言的结构体定义格式如下:
名字 struct
成员列表
名字 ends
请仔细阅读以下两个实例,看看如何实现:
实例一:
.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 文件中有定义
;xWORD ?
;yWORD ?
;COORD ENDS
buffer db 100 dup(0)
szFmtdb '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).x, ax
mov (COORD ptr).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).x
add bx,(COORD ptr).y
add edi,type COORD ;指向下一个结构体
loop short @B
invokewsprintf, ;格式化信息串
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
无回帖,不论坛,这才是人道。 楼主加油,鱼C加油!我们都看好你哦! 楼主加油,鱼C加油!我们都看好你哦! 真是难得给力的帖子啊。 这是基础知识?? 学习了
页:
[1]