2012-11-24 28 views
0

操作數組我有一個問題,即我不能弄清楚:在裝配

在彙編語言,寫,其接收一個指向整數的數組,該數組的大小的函數,並且通過改變所述陣列顛倒其元素而不將數組複製到堆棧。使用專用指令和寄存器來處理陣列(esiedi; lodsbstosb,cld,std)。

實施例:1 2 3 4 5 - > 5 4 3 2 1

任何人有任何建議?

+2

你試過了什麼? –

+0

我甚至不知道從哪裏開始...... – Squeazer

+2

從學習lodsb,stosb,cld和std的指示開始。然後弄清楚它們如何適合這項任務以及需要哪些其他說明。 –

回答

2

逆轉與lodsbstosb的陣列需要cldstd的每一個元素(因爲指針之一需要增加和其他需要遞減),或者,你可以忘記cldstd,只是取消了不正確通過在每個元素之後減去2(或加2)來增加(或減少)另一個指針。

無論如何,在這種情況下使用lodsbstosb會使事情變得不必要的複雜。我會用這樣的東西:

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: