2013-07-05 67 views
1

我需要反彙編語言中的字符串數組。以下是我的代碼。在彙編語言中反向打印數組

proc reverseAr 
    mov cl,count 
    mov si,offset Ar 
    mov si,3 
    write2: 

     mov dl,Ar[si] 
     mov ah,02h 
     int 21h 
     dec si 
    loop write2 
ret 
endp 

但是這並沒有給出答案。有誰能告訴我什麼是si的確切含義?它不是陣列位置的索引嗎?

+0

在分段內存模型(該程序似乎意在運行),'偏移AR'會在'Ar'所在的段內爲你提供'Ar'的16位偏移量。如果你從'[si]'中讀取,你將從'[ds:si]'讀取數據,即從'ds'指定的段中由'si'指定的偏移量。順便說一下,'loop'遞減'cx',而不僅僅是'cl'。所以你應該使用'movzx cx,byte ptr count'而不是'mov cl,count'。 – Michael

+0

有一個問題,就是在你將數組'Ar'的地址寫入'si'之後,你用'3'覆蓋了它。這可能不是你的意圖。加載數組的基地址後,您希望將數組的長度添加到'si'。在這種情況下,我假定一切都在'ds'指向的段中。如果不是,那麼它會變得稍微複雜一些。 – lurker

回答

1
proc reverseArray 
    mov cl,count 
    dec cl 
    dec si 
    printRevArr: 
     mov dl,arr[si] 
     add dl,48 
     mov ah,02h 
     int 21h 

     dec si 

    loop printRevArr 

    ret 
endp 

不要使用mov si,offset Ar它會重置數組索引。

1

si表示源索引寄存器。 它可以用作指針。 是偏移寄存器 語法爲:

SI來源指數:一般尋址,源字符串OPS偏移