2015-10-18 75 views
3

我想输出一个字符串而不使用$符号。无论我是否正确,我需要计算我的字符串的字符并将值存入cx寄存器。 我试图这样做,但程序只是打印出整个缓冲区而不是我需要的字符串。程序集8086:计数器问题

这是Turbo汇编程序,顺便说一句。

.model small 
    .stack 200h    
    .data 
       text1 db 0ah, 0dh, 'Your text : $'  
       text2 db 0ah, 0dh, 'Text in lowercase: $' 
       string db 255 dup(?) 
    .code 

    begin:  
      mov ax, @data 
      mov ds, ax 

      lea dx, text1 
      mov ah, 09h  
      int 21h 

      lea si, string 
      mov ah, 01h  

    read:  
      int 21h 

      cmp al, 0dh  
      je print 

      cmp al, 'A'  
      jl not_upper  

      cmp al, 'Z'  
      jg not_upper  

      add al, 20h  
      mov [si], al 
      inc si   

      ;**************************** 
      inc cx 
      ;**************************** 

      jmp read   

    not_upper: 
      mov [si], al  
      inc si 
      jmp read   

    print: 
      mov al, 00h 
      mov [si], al 

      lea dx, text2 
      mov ah, 09h 
      int 21h 

      ;**************************** 
      lea dx, string 
      mov ah, 40h 
      mov bx, 1 
      int 21h 
      ;**************************** 

      mov ah, 4ch  
      int 21h 

     .exit 

    end begin 

回答

3
  • 你忘了清除CX寄存器使用它作为一个柜台前。
  • 当您将大写字母转换为小写字母时,您只会递增计数器,但在将其他字符存储在缓冲区中时,您忘记增加计数。
  • 您应该始终将ASCII码的比较视为无符号。将jl/jg更改为jb/ja
  • 在标签打印您用NULL终止缓冲区。这是不需要的,因为你想使用计数器来量化内容。
+0

谢谢你!你拯救了我的一天。它现在就像一种魅力! – beingas