2015-10-18 3 views
3

Я хочу вывести строку, не используя знак $. Правильно ли это, мне нужно подсчитать символы моей строки и поместить значение в регистр cx. Я пытался это сделать, но программа просто печатает весь буфер, а не строку, в которой я нуждаюсь.Assembly 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