Скажем у вас есть массив слов, определенных как:
myArray dw 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
numItems dw 10
И вы хотите передать, что к процедуре:
push myArray ; the address of the array
mov ax, [numItems]
push ax ; the length of the array
call myProc
; if you want the caller to clean up ...
add sp, 4 ; adjust sp to get rid of params
Тогда MyProc будет:
myProc:
mov bp, sp ; save stack pointer
mov cx, [bp+4] ; cx gets the number of items
mov bx, [bp+6] ; bx gets the address of the array
; at this point, you can address the array through [bx]
mov ax, [bx+0} ; first element of the array
mov ax, [bx+2] ; second element of the array
ret 4 ; cleans up the stack, removing the two words you'd pushed onto it
; or, if you want the caller to clean up ...
ret
ОК, это полезно, спасибо. Но как насчет того, есть ли у меня два разных массива, и мне нужно, чтобы значения перемещения составляли один из них, и мне нужен другой индекс каждый раз, когда я перемещаю значение? Например, сначала переместите значение в положение 5, затем значение в позиции 20. Как я могу это сделать? Я просто нашел что-то вроде этого –
@AlvaroFallas: Я предлагаю вам найти хороший учебник по ассемблеру. Язык ассемблера хорошо изучен. http://www.planetpdf.com/codecuts/pdfs/aoa.pdf –
Мне жаль, что я сказал, что сделал что-то подобное, чтобы получить значение из разных позиций mov ax, byte ptr DS: [[bp + 6 ] + (bx * 2)] bp + 6 - адрес массива i need bx * 2 - это моя позиция. Но получите сообщение об ошибке «Режим Ilegal indexing» –