鱼C论坛

 找回密码
 立即注册
查看: 5719|回复: 6

[技术交流] 高级语法 结构体 的使用

[复制链接]
发表于 2013-7-4 23:39:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
说明:汇编语言中的结构体和公用体与C语言中的基本类似。

汇编语言的结构体定义格式如下:
  1. 名字 struct
  2.         成员列表
  3. 名字 ends
复制代码


请仔细阅读以下两个实例,看看如何实现:

实例一:

  1. .386
  2.          .model flat, stdcall
  3.          option casemap :none
  4. include                windows.inc
  5. include                kernel32.inc
  6. includelib             kernel32.lib
  7. include                user32.inc
  8. includelib             user32.lib
  9. include                masm32.inc                  
  10. includelib             masm32.lib
  11.         .data
  12. ;COORD STRUCT        ;windows.inc 文件中有定义
  13. ;  x  WORD   ?
  14. ;  y  WORD   ?
  15. ;COORD ENDS

  16. buffer db        100 dup(0)
  17. szFmt  db        'stPos.x 的和 = %d, stPos.y 的和 = %d',0   
  18. stPos COORD 10 dup(<0,0>)        ;定义结构体数组
  19.          .code
  20. start:
  21.          mov ecx,10
  22.          mov edi,offset stPos        ;edi指向结构体变量
  23.          mov eax,1
  24.          mov ebx,11
  25. @@:
  26.          mov (COORD ptr[edi]).x, ax
  27.          mov (COORD ptr[edi]).y, bx
  28.          add edi,type COORD        ;指向下一个结构体
  29.          inc ax
  30.          inc bx
  31.          loop short @B
  32.          
  33.          xor eax,eax
  34.          xor ebx,ebx
  35.          mov ecx,10
  36.          mov edi,offset stPos        ;edi指向结构体变量
  37. @@:
  38.          add ax,(COORD ptr[edi]).x
  39.          add bx,(COORD ptr[edi]).y
  40.          add edi,type COORD        ;指向下一个结构体
  41.          loop short @B
  42.          
  43.          invoke  wsprintf,        ;格式化信息串
  44.                 addr buffer,        ;信息串格式化后的存放地
  45.                 addr szFmt,        ;信息串的格式
  46.                 eax,
  47.                 ebx
  48.                         
  49.         invoke ClearScreen          ;清屏
  50.         invoke locate,10,10          ;光标定位(x,y)        
  51.         invoke StdOut,addr buffer ;显示串
  52.         invoke ExitProcess,0          ;结束进程
  53.         end start
复制代码

实例二:

  1.     .386
  2.     .model flat, stdcall
  3.     option casemap:none
  4.    
  5. include        windows.inc
  6. include        kernel32.inc
  7. includelib     kernel32.lib
  8. include        user32.inc
  9. includelib     user32.lib

  10.     .data
  11. sysTime    SYSTEMTIME    <>        ; 定义结构体变量

  12. CapMsg    db    '系统当前时间', 0
  13. szFmt     db    '%d年%2d月%2d日', 0Dh, 0Ah, 0Dh, 0Ah
  14.           db    '%2d:%2d:%2d', 0
  15. buffer    db    80 dup(0)

  16.     .code
  17. start:
  18.     invoke    GetLocalTime, offset sysTime    ; 调用API函数获取系统时间(返回放在sysTime结构体)
  19.     movzx esi, sysTime.wYear
  20.     movzx edi, sysTime.wMonth
  21.     movzx edx, sysTime.wDay
  22.     movzx eax, sysTime.wHour
  23.     movzx ebx, sysTime.wMinute
  24.     movzx ecx, sysTime.wSecond
  25.    
  26.     invoke    wsprintf, addr buffer, addr szFmt, esi, edi, edx, eax, ebx, ecx
  27.     invoke    MessageBox, NULL, offset buffer, offset CapMsg, MB_ICONQUESTION
  28.     invoke    ExitProcess, 0
  29.    
  30.     end start
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-5 00:45:10 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-24 19:29:53 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-18 09:47:40 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 14:34:33 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 12:18:45 | 显示全部楼层
这是基础知识??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-9 20:23:29 From FishC Mobile | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表