Class 程序集中的结构或类

Class 程序集中的结构或类,class,assembly,macros,masm,Class,Assembly,Macros,Masm,我需要像c中的struct或class这样的东西++ 例如,我需要一个具有数组和两个属性(size和len)的类,以及一些类似append和remove的函数 如何用宏和过程在汇编中实现这一点?Tasm支持例如 struc String // note: without 't' at the end size dw 100 len dw 10 data db 0 dup(100) ends String 还有一个.struct指令 的语法为: 再次使用同一MA

我需要像c中的struct或class这样的东西++

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

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

Tasm支持例如

struc String  // note: without 't' at the end
   size   dw 100
   len    dw 10
   data   db 0 dup(100)
ends String
还有一个
.struct
指令

的语法为:

再次使用同一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

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

SP_DEVICE_INTERFACE_DATA struct
    CbSize      DWORD   ?
    ClassGuid   GUID    <>
    Flags       DWORD   ?
    Reserved    ULONG   ?
SP_DEVICE_INTERFACE_DATA ends
SP\u设备\u接口\u数据结构
德沃德?
类GUID
德沃德?
乌龙?
SP_设备_接口_数据端
8086 MASM中的结构

语法

struct_name STRUC
var_name type ?
...
struct_name ENDS
规则

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
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

虽然
结构或类
不是汇编语言的概念!什么是GUID?在MASM中,我不能使用“”表示结构。GUID是一个结构(在别处定义),我在SP\U设备\U接口\U日期结构中拥有它。很少有人必须这样做。这只是如何构建结构的一个片段。它不是您可以使用的完整的独立应用程序。:-)你将不得不根据自己的用途调整这个概念。。。