3

我需要 c++ 中的结构或类之类的东西

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

如何使用宏和过程在汇编中实现这一点?

4

3 回答 3

6

Tasm 支持例如。

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

Gnu 汇编器也有一个.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
于 2012-11-19T09:59:02.327 回答
3

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

SP_DEVICE_INTERFACE_DATA struct
    CbSize      DWORD   ?
    ClassGuid   GUID    <>
    Flags       DWORD   ?
    Reserved    ULONG   ?
SP_DEVICE_INTERFACE_DATA ends
于 2012-11-19T15:01:09.190 回答
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
于 2019-11-13T13:12:39.507 回答