assembly 如何在x86 MASM汇编语言中为哈希表编写STRUCT?

gev0vcfq  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(125)
Include irvine32.inc

.data
    HTEntry STRUCT
    key BYTE PTR ?   ; Pointer to a null-terminated string  
    value BYTE PTR ?  ; Pointer to a null-terminated string  
    next BYTE PTR ?    ; Pointer to the next entry in the bucket  
    HTEntry ENDS  

    HashTable STRUCT  
    hashsize DWORD ?              ; Current size of the hash table  
    maxLoadFactor DWORD ?         ; Maximum load factor before resizing  
    buckets DWORD PTR : DWORD ? ; Array of bucket pointers  
    HashTable ENDS
I get the following errors:
(For reference line 5 starts with key)
    hash.asm(5): error A2009: syntax error in expression
    hash.asm(6): error A2009: syntax error in expression
    hash.asm(7): error A2009: syntax error in expression
    hash.asm(13): error A2009: syntax error in expression

我希望初始化一个哈希表的结构。我试着切换ptr和byte的位置,并尝试使用语法,但都无济于事。

gdx19jrr

gdx19jrr1#

就像@PeterCordes说的,数据部分并不真正理解byteworddwordqword等之外的类型,因为说实话,CPU也不理解。它实际上并不知道什么是指针,什么不是,这是程序员的工作,这就是为什么在汇编语言中,你可以尝试取消引用任何东西,就好像它是一个指针。这就是你应该如何写你的数据部分。

.data
    HTEntry STRUCT
    key DWORD ?   ; Pointer to a null-terminated string  
    value DWORD ?  ; Pointer to a null-terminated string  
    next DWORD ?    ; Pointer to the next entry in the bucket  
    HTEntry ENDS  

    HashTable STRUCT  
    hashsize DWORD ?              ; Current size of the hash table  
    maxLoadFactor DWORD ?         ; Maximum load factor before resizing  
    buckets DWORD ? ; Array of bucket pointers  
    HashTable ENDS

然后在你的代码段中,如果你想从内存中读取一些内容:

mov al, BYTE PTR [key] 
;I can't remember if the brackets go around "byte ptr" or not, please forgive me

相关问题