2013-07-05 66 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偏移