反向

2011-01-18 74 views
0

假設SI迪複製錯誤我們擁有數321 SI點,以抵消 和臨時的偏移量是反向

mov di,offset temp 

現在,我們想從SI複製到迪這個命令:

mov cx,3 
reverse: 
mov dl,byte ptr [si] 
mov byte ptr[di],dl 
inc di 
dec si 
loop reverse 
mov byte ptr[di],'$' 

但輸出我不113 123,這意味着整數2將被刪除。

回答

1

如果初始條件確實如您所描述的那樣,我認爲您的temp存儲區域必須與原始輸入重疊:否則,您的循環將不會導致重複的「1」。

具體來說,我猜0123OO指向原始輸入開始後立即的字節(作爲一個真正的猜測:也許是在數據部分保留「321」的緩衝區,並且已被意外聲明爲只有一個字節,temp之後立即聲明)。

即最初:

buffer for original number 
    | 
    | temp (== di) actually points here 
    | | 
    v v 
---+---+---+---+---+--- 
    | 3 | 2 | 1 | | 
---+---+---+---+---+--- 
      ^
      | 
     initial si 

在第一次迭代之後,將 「1」 重寫的 「2」:

 temp 
     | 
     v di 
---+---+---+---+---+--- 
    | 3 | 1 | 1 | | 
---+---+---+---+---+--- 
     si 

在第二次迭代之後,將 「1」(這原本是一個「2」)複製到原始「1」上:

 temp 
     | 
     v  di 
---+---+---+---+---+--- 
    | 3 | 1 | 1 | | 
---+---+---+---+---+--- 
    si 

第三次迭代之後,將複製「3」:

 temp 
     | 
     v   di 
---+---+---+---+---+--- 
    | 3 | 1 | 1 | 3 | 
---+---+---+---+---+--- 
si 

...最後與$的結尾:

 temp 
     | 
     v   di 
---+---+---+---+---+--- 
    | 3 | 1 | 1 | 3 | $ 
---+---+---+---+---+--- 
si 

...所以temp現在指向 「113」。

+0

是的,你是對的。我已經改變了數據段中的溫度偏移,並且每件事情都變得最好。 – 2011-01-19 04:54:14

2

對我來說看起來沒問題 - 在調試器中逐步查看它發生錯誤的位置。

+0

另一個答案是更多的勺子餵養,但ASM程序員應該知道如何使用調試器來找到自己的錯誤。所以,+1 :) – Jester 2011-01-19 01:13:46