程序集中的结构或类

时间:2012-11-19 09:28:57

标签: class assembly macros masm

我在c ++中需要类似struct或class的东西

例如,我需要一个带有数组和两个属性(size和len)的类,以及一些像append和remove这样的函数。

如何在汇编中使用宏和过程实现它?

3 个答案:

答案 0 :(得分:6)

Tasm支持例如。

struc String  // note: without 't' at the end
   size   dw 100
   len    dw 10
   data   db 0 dup(100)
ends String

Gnu assembler也有.struct指令。

MASM的语法是:

String STRUCT
    size dw 100
    len dw 10
String ENDS

再次使用相同的MASM手册:

ASSUME eax:PTR String
mov ecx, [eax].size,
mov edx, [eax].len
ASSUME eax:nothing
.. or ..
 mov ecx, (String PTR [eax]).size   // One can 'cast' to struct pointer

还可以直接访问本地变量

mov eax, myStruct.len

答案 1 :(得分:3)

以下是我编写的HID接口例程中的MASM结构示例:

SP_DEVICE_INTERFACE_DATA struct
    CbSize      DWORD   ?
    ClassGuid   GUID    <>
    Flags       DWORD   ?
    Reserved    ULONG   ?
SP_DEVICE_INTERFACE_DATA ends

答案 2 :(得分:1)

8086 MASM中的结构

语法

struct_name STRUC
var_name type ?
...
struct_name ENDS

规则

1)无法初始化(如果初始化会导致垃圾值)

2)应使用“直接寻址模式”进行访问(如果未导致“立即寻址模式”)

添加两个数字的程序

DATA SEGMENT
FOO STRUC
A DB ?
B DB ?       
SUM DW ?
FOO ENDS

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX

      XOR AX,AX
      MOV DS:[FOO.A],0FFH  
      MOV DS:[FOO.B],0FFH

      MOV AL,DS:[FOO.A]   ;al=ff
      ADD AL,DS:[FOO.B]   ;al=al+ff
      ADC AH,00H          ;ah=ah+carry_flag(1/0)+00
      MOV DS:[FOO.SUM],AX ;sum=ax
      HLT                 ;stop

CODE ENDS
END START