簡體   English   中英

如何在匯編中從用戶輸入多位數字?

[英]How to input from a user multi digit number in assembly?

我需要找到一個可以從用戶那里接收超過 1 位數字的中斷。 ;代碼

mov [0],0
mov si,0
lop:    
    mov ah,1
    int 21h
    cmp al,'q'
    je finishedInput
    xor ah,ah 
    add [word ptr si], ax
    jmp lop

finishedInput:

我已經嘗試做一個無限循環,每次都使用

mov ah,1 
int 21h 

組合。 當用戶按下“q”時,無限循環停止。 然而,我幾乎確信我已經看到了一個用中斷來做同樣事情的代碼。

我想停止使用這個塊並使用可以更好地工作的短中斷

在大多數情況下,如果將輸入作為字符串接收然后轉換為整數,這會容易得多。 int 21h/ah=0ah可以將緩沖的輸入讀入指向DS:DX的字符串。

一旦你有了它,你就可以把那個字符串轉換成一個整數。 這聽起來像是一個家庭作業問題,所以這里沒有給你代碼,而是一個高級算法,用於將包含以 10 為基數的數字的 ASCII 字符串轉換為實際整數(偽代碼):

accum = 0
i = 0
while(string[i] != '\r')
    accum *= 10
    accum += (string[i] - '0')
    i++

健壯的代碼也會檢查溢出和無效字符。 你在這里很幸運,因為在 ASCII 中代表數字的字符('0'...'9')是連續存儲的,並且 x86 有一個FLAGS寄存器,您可以檢查是否溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM