2013-11-20 80 views
1

首先,是的,我知道它是21世紀的,但我正在學習DosBox和NASM的舊彙編。我必須從輸入中獲取數字並根據用戶定義打印多個星號(*)。例如:使用用戶的輸入作爲循環計數器

Enter the number (1-9): 5 
***** 

很簡單吧?但我不知道如何使用累加值作爲計數器。我當前的代碼:

org  100h 

mov dx, number_txt 
mov ah, 9 
int 0x21 

mov dx, buffer 
mov ah, 0Ah   
int 0x21     ; read number 

mov dx, br 
mov ah, 9 
int 0x21    ; enter 

mov dx, asterysk   ; will write "*" 
mov ah, 9 

mov cx, buffertxt   ; HERE IS THE PROBLEM 
myloop: 
    int 0x21   ; write * 
loop myloop 

mov ax, 0x4C00 
int 0x21    ; end 

number_txt: db "Enter the number (1-9): $" 
br: db 0Ah,0Dh,"$" 
asterysk: db "*$" 
buffer: db 5,0 
buffertxt: times 5 db "$" 

目前我得到4.5線*,不管我寫什麼號碼。我知道我必須將buffertxt轉換爲int/hex以在cx中用作計數器,但我不知道如何。

我在谷歌和這裏閱讀了很多,但我沒有找到答案。

回答

1

這條線:

mov cx, buffertxt   ; HERE IS THE PROBLEM 

應改爲:

mov cl, [buffertxt]  ; Read the first character of the user input 
sub cl,'0'    ; Convert from '0'..'9' to 0..9 
xor ch,ch    ; Clear the upper half of CX (the LOOP instruction 
         ; uses all of CX as the counter) 

順便說一句,你可以使用INT 21H/AH=2打印單個字符,而不是通過一個單字符字符串到INT 21H/AH=9

+0

很好,謝謝。我嘗試了一些與sub類似的東西,但我不知道如何處理ch。 – Radzikowski