【问题标题】:Assembly 8086: problems with counter程序集 8086:计数器问题
【发布时间】:2015-10-18 13:18:50
【问题描述】:

我想在不使用 $ 符号的情况下输出一个字符串。无论我做对了,我都需要计算我的字符串的字符并将值放入 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

【问题讨论】:

    标签: assembly x86-16 tasm


    【解决方案1】:
    • 在将 CX 寄存器用作计数器之前,您忘记清除它。
    • 您只在将大写字母转换为小写字母时递增计数器,但在将其他字符存储在缓冲区中时忘记递增计数器。
    • 您应该始终将 ASCII 代码的比较视为无符号。最好把jl/jg改成jb/ja
    • 在标签 print 处,您使用 NULL 终止缓冲区。这不是必需的,因为您想使用计数器来量化内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多