Assembly 组件8086:计数器的问题

Assembly 组件8086:计数器的问题,assembly,x86-16,tasm,Assembly,X86 16,Tasm,我想不使用$符号输出字符串。无论是否正确,我都需要计算字符串的字符数并将值放入cx寄存器。 我试图这样做,但程序只是打印出整个缓冲区,而不是我需要的字符串 这是涡轮汇编,顺便说一下 .model small .stack 200h .data text1 db 0ah, 0dh, 'Your text : $' text2 db 0ah, 0dh, 'Text in

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

这是涡轮汇编,顺便说一下

.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
  • 在将CX寄存器用作计数器之前,您忘记清除它
  • 只在将大写字母转换为小写字母时递增计数器,但在缓冲区中存储其他字符时忘记递增计数器
  • 您应该始终将ASCII代码的比较视为无符号比较。最好将
    jl
    /
    jg
    更改为
    jb
    /
    ja
  • 在标签打印时,缓冲区终止为空。这是不需要的,因为您希望使用计数器来量化内容