前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nasm 结构体定义

Nasm 结构体定义

作者头像
战神伽罗
发布2019-07-24 14:41:37
1.1K0
发布2019-07-24 14:41:37
举报

1. 结构体定义

在NASM内部,没有实际意义上的定义结构体类型的机制,NASM使用宏 STRUC 和 ENDSTRUC来定义一个结构体。STRUC有一个参数,它是结构体的名字。可以使用“RESB”类伪指令定义结构体的域,然后使用ENDSTRUC来结束定义。

如下,定义一个名为“mystruc"的结构体,包含一个long, 一个word, 一个byte和一个字符串。

[plain] view plain copy

  1. struc mytype
  2. mt_long: resd 1
  3. mt_word: resw 1
  4. mt_byte: resb 1
  5. mt_str: resb 32
  6. endstruc

在上面的代码中定义了,mt_long 在偏移地址0处,mt_word在4,mt_byte 在6,mt_str在7。

如果想要在多个结构体中使用具有同样名字的成员,可以把结构体定义成这样:

[cpp] view plain copy

  1. struc mytype
  2. .long: resd 1
  3. .word: resw 1
  4. .byte: resb 1
  5. .str: resb 32
  6. endstruc

2. 结构体声明

声明一个结构体使用”ISTRUC“、”AT“ 和 “IEND”宏。在程序中声明一个“mystruc"结构体,可以像如下代码一样:

使用定义一:

[cpp] view plain copy

  1. MYSTRUC:
  2. istruc
  3. at mt_long, dd 123456
  4. at mt_word, dw 7890
  5. at mt_byte, db 'a'
  6. at mt_str, db 'abcdefg',0
  7. iend

使用定义二:

[cpp] view plain copy

  1. MYSTRUC:
  2. istruc mytype
  3. at mytype.long, dd 123456
  4. at mytype.word, dw 7890
  5. at mytype.byte, db 'a'
  6. at mytype.str, db 'abcdefg',0
  7. iend

3. 示例一

[cpp] view plain copy

[cpp] view plain copy

  1. jmp start
  2. struc mytype
  3. .num: resd 1
  4. .str: resb 32
  5. endstruc
  6. MYDATA:
  7. istruc mytype
  8. at mytype.num, dd 32
  9. at mytype.str, db 'hello, world', 0
  10. iend
  11. start:
  12. mov ax, cs
  13. mov ds, ax
  14. mov ax, 0b800h
  15. mov es, ax
  16. xor edi,edi
  17. xor esi,esi
  18. mov ah, 0ch
  19. mov esi, MYDATA + mytype.str
  20. mov edi, (80 * 10 + 0)*2
  21. cld
  22. .1: lodsb
  23. test al, al
  24. jmp .2
  25. mov [es:edi], ax
  26. add di, 2
  27. jmp .1
  28. .2:
  29. mov ax, 4c00h
  30. int 21h
代码语言:javascript
复制
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 结构体定义
  • 2. 结构体声明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档