2015-10-18 101 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