Передать массив в качестве параметра в сборке макросов

#arrays #assembly #macros #parameters #x86-16

#массивы #сборка #макросы #параметры #x86-16

Вопрос:

Можно ли передать массив в качестве параметра в макросе в сборке? Например,

 setXY macro temp[0], temp[1]      ; temp is word-sized
   mov ax, temp[0]
   mov bx, temp[1]
 

и где — то в теле ты будешь звонить setXY coor[0], coor[1] .

Допустимо ли это?

Комментарии:

1. » setXY coor[0], coor[1] «. Вы не сказали нам, что coor это такое, но мне кажется, что вы хотите использовать элементы массива в качестве аргументов, а не сам массив. В любом случае, массив — это просто метка, указывающая адрес, с которого начинается массив, поэтому он ничем не отличается от любых других данных. Вы не упомянули, какой ассемблер вы используете, поэтому я не вижу, как можно ответить на этот вопрос прямо сейчас.

2. coor также является массивом размером с слово. Да, я хочу использовать элементы внутри массива. Я использую ассемблер TASM.

Ответ №1:

Если у вас есть следующий макрос:

 do_stuff MACRO x, y
  mov ax,[x]
  mov bx,[y]
  add ax,bx
ENDM
 

И множество слов:

 coor dw 1, 3, 5, 7
 

Вы могли бы сделать, например:

 ; Use the do_stuff macro with the first two elements of coor as
; the arguments

do_stuff coor, coor 2
 

Что дало бы вам ax == 1 3 == 4 .