我在c ++中需要类似struct或class的东西
例如,我需要一个带有数组和两个属性(size和len)的类,以及一些像append和remove这样的函数。
如何在汇编中使用宏和过程实现它?
答案 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