0
嗨我在做彙編8086 DES,我有很多數組,我也需要一些程序,但我不知道如何發送數組到一個過程。我試着用堆棧,但它沒有奏效。你能幫我一下嗎?我使用的是TASM如何將數組發送到過程
嗨我在做彙編8086 DES,我有很多數組,我也需要一些程序,但我不知道如何發送數組到一個過程。我試着用堆棧,但它沒有奏效。你能幫我一下嗎?我使用的是TASM如何將數組發送到過程
假設你有一個定義爲字的數組:
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的值。我該怎麼做?我只是發現了這樣的東西 – 2012-04-15 21:58:08
@AlvaroFallas:我建議你找一個好的彙編語言教程。彙編語言藝術受到好評。 http://www.planetpdf.com/codecuts/pdfs/aoa.pdf – 2012-04-15 22:11:49
對不起,因爲我說我做了這樣的事情,以便從不同的位置得到一個值mov ax,byte ptr DS:[[bp + 6 ] +(bx * 2)] bp + 6是我需要bx的數組地址* 2是我的位置。但是,獲取錯誤消息「Ilegal索引模式」 – 2012-04-15 22:13:45