汇编语言8086:计数器问题

3
我希望输出一个字符串,但不使用美元符号。无论我是否正确,我都需要计算我的字符串的字符数,并将该值放入cx寄存器中。 我尝试过这样做,但程序只是将整个缓冲区打印出来,而不是我需要的字符串。 顺便说一下,这是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
1个回答

3
  • 在使用CX寄存器作为计数器之前,您忘记了清除它。
  • 当您将大写字母转换为小写字母时,您只增加计数器,但在将其他字符存储在缓冲区时,您忘记了增加计数器。
  • 您应该始终将ASCII码的比较视为无符号。最好将jl/jg更改为jb/ja
  • 在标签print处,您用NULL终止了缓冲区。但由于您想要使用计数器来量化内容,这不是必要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接