【问题标题】:Reversing the Input String in Assembly在汇编中反转输入字符串
【发布时间】:2015-11-02 11:44:26
【问题描述】:

下面的汇编代码应该反转输入字符串,但它没有,它只是打印字符串数据。

.model small
.data
    str1 db 13,10,'-Enter String: $'
    str2 db 13,10,'-your reverse string: $'
    t db ? 
    str3 db 100 dup('$')
    str4 db 13,10,'-Your string: $'
.code
main proc
    s:
    mov ax,@data
    mov ds,ax
 ;get string   
    mov ah,9
    lea dx,str1
    int 21h

    mov ah,0ah
    lea dx ,str3
    int 21h
  ;get lenght  
    mov bl,str3+1
    add bl,30h
    mov ah,02h
    mov dl,bl
    int 21h
    mov [di],bl
;print entered string
    mov ah,9
    lea dx,str4
    int 21h

    mov ah,9
    lea dx,str3+2
    int 21h
;print reverse string 
    mov ah,9
    lea dx,str2
    int 21h

    mov cx,0   
    lea si,str3+ [di]
    dec si
    mov cl,[si]
    l1:
    mov ah,02h 
    mov dl,[si]
    dec si
    int 21h
    jne l1
main endp
end

【问题讨论】:

  • 您在几个地方使用了di,但我没有看到您将di 初始化为任何东西。

标签: assembly x86 dos


【解决方案1】:
str3 db 100 dup('$')

您没有为 DOS 输入功能设置数据结构。现在它似乎起作用了,因为字符 $ 的值为 36。由于您将输入的长度显示为单个字符,因此我建议您编写:

str3 db 9,0,10 dup('$')

当你得到长度并显示它时,你应该真正将长度存储在 DI(而不是字符)中

 ;get length  
 mov  bl, str3+1
 mov  dl, bl
 add  dl, 30h
 mov  ah, 02h
 int  21h
 mov  bh, 0
 mov  di, bx

因为您输入的文本从 str3 + 2 开始,您需要更改 LEA。最好用 DI 作为循环计数器,它已经有长度了。

 lea  si, str3 + 2 + [di]
l1:
 dec  si
 mov  dl, [si]
 mov  ah, 02h 
 int  21h
 dec  di
 jne  l1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多