2015-05-26 3 views
0

Могу ли я сделать массив структур общедоступным, так что я могу сделать функцию в другом файле .asm доступ к ней и изменить ее.Могу ли я создать массив структуры?

.data 

NODE STRUCT 
key dword ? 
value dword ? 
ends 

THREE 10 DUP (0,0) NODE 

И в другом файле .asm иметь функцию, которая будет иметь доступ к массиву (THREE [0] .key) и изменить его.

Я попытался, но я достиг стены с другой функцией, не зная, что такое NODE. И я не могу найти, как сделать NODE typedef STRUCT.

+0

http://www.oopweb.com/Assembly /Documents/ArtOfAssembly/Volume/Chapter_8/CH08-10.html#HEADING10-41 –

+0

, в частности, директивы 'public' и' extern'. –

ответ

3

Вы можете использовать директиву PUBLIC, чтобы сделать символ THREE доступным из других .ASM-файлов. Кроме того, необходимо правильно определить три:

.data 

NODE STRUCT 
    key dword ? 
    value dword ? 
NODE ENDS 

    PUBLIC THREE 
THREE NODE 10 DUP ({0,0}) 

Чтобы получить доступ к символу THREE вам нужно использовать EXTERN директивы:

NODE STRUCT 
    key dword ? 
    value dword ? 
NODE ENDS 

    EXTERN THREE:NODE 

    .code 
    mov THREE[0].KEY, 1 

Обратите внимание, что это требует повторение определения УЗЛА STRUCT дважды, один раз в каждом. ASM-файл. Чтобы этого избежать, вы можете переместить его в отдельный файл и включить его в оба .ASM-файла. Например, вы можете поместить следующее в файл с именем node.inc:

NODE STRUCT 
    key dword ? 
    value dword ? 
NODE ENDS 

и включить его модифицированную версию моего второго примера выше, как это:

INCLUDE node.inc 

    EXTERN THREE:NODE 

    .code 
    mov THREE[0].KEY, 1 
+0

Даже с EXTENRNDEF в моем .inc файле я все равно получаю сообщение об ошибке как из основного, так и из asm-файла функции. Main имеет нерешенную функцию, а функция имеет нерешенное значение THREE. Я пытаюсь создать функцию, которая извлекает данные из стека, а в главном im вызывает ее после нажатия вызова. И в функции asm я дефинировал ее как процесс GetVal. GetVal endp. Моя ошибка где-то там? – stefansixx1

+1

Похоже, вы связываете файлы отдельно, а не вместе. Вероятно, вы хотите сделать что-то вроде 'ml main.asm function.asm'. –

+0

Я думаю, что ты прав. Но в моих материалах или в Интернете я не могу найти ссылки на файлы, как в c. Можете ли вы указать мне, как искать ссылки на файлы в masm32? Или как создать файл makeit.bat? Английский - это не мой родной язык, поэтому, возможно, именно поэтому я его не хватает. – stefansixx1