0
操作數組我有一個問題,即我不能弄清楚:在裝配
在彙編語言,寫,其接收一個指向整數的數組,該數組的大小的函數,並且通過改變所述陣列顛倒其元素而不將數組複製到堆棧。使用專用指令和寄存器來處理陣列(esi
,edi
; lodsb
,stosb
,cld
,std
)。
實施例:1 2 3 4 5 - > 5 4 3 2 1
任何人有任何建議?
操作數組我有一個問題,即我不能弄清楚:在裝配
在彙編語言,寫,其接收一個指向整數的數組,該數組的大小的函數,並且通過改變所述陣列顛倒其元素而不將數組複製到堆棧。使用專用指令和寄存器來處理陣列(esi
,edi
; lodsb
,stosb
,cld
,std
)。
實施例:1 2 3 4 5 - > 5 4 3 2 1
任何人有任何建議?
逆轉與lodsb
和stosb
的陣列需要cld
和std
的每一個元素(因爲指針之一需要增加和其他需要遞減),或者,你可以忘記cld
和std
,只是取消了不正確通過在每個元素之後減去2(或加2)來增加(或減少)另一個指針。
無論如何,在這種情況下使用lodsb
和stosb
會使事情變得不必要的複雜。我會用這樣的東西:
mov esi,start_address
mov edi,end_address
mov ecx,edi
sub ecx,esi
x1: test ecx,ecx
jz @ready
mov al,[esi]
xchg al,[edi]
mov [esi],al
inc esi
dec edi
dec ecx
jmp x1
@ready:
你試過了什麼? –
我甚至不知道從哪裏開始...... – Squeazer
從學習lodsb,stosb,cld和std的指示開始。然後弄清楚它們如何適合這項任務以及需要哪些其他說明。 –