[英]hello , i got a question that i need to get input from user, the input is a number and digit after digit ,the number can be a doubleWord
我正在制作一個程序,我想在其中使用最多 10 位數字
(4,294,967,296) 逐位來自用戶並存儲所有數字並制作
EAX 中的其中一個。
例如:輸入 = 1 2 3 4,EAX = 1234
我試着用 2 位數字開始,但我遇到了一些問題,我不知道怎么做
從這里繼續。 非常感謝您的幫助,在此先感謝!!
.model small
.STACK 100h
.data
num dd ?
ten DB 10
.code
.386
start:
MOV AX, @DATA
MOV DS, AX
MOV AH,1
INT 21H
SUB AL,30H
MOV BH,AL
MOV AH,1
INT 21H
SUB AL,30H
MOV CH,AL
MOV AL,BL
MUL ten
ADD AL,CH
push eax
call printNum
MOV AX, 4c00h
INT 21h
END start
MOV AL,BL MUL ten ADD AL,CH
如果您使用了正確的寄存器,以上將產生您的 2 位數字的值。 您已將第一個數字存儲在BH
中,但您在這里使用的是BL
!
.386 push eax
你在emu8086。 忘記使用 32 位寄存器。 如果要使用 32 位數字,則必須將它們存儲在幾個 16 位寄存器中。 例如DX:AX
,其中DX
保存最高有效位字, AX
保存最低有效位字。
為了解決您構建高達 4GB-1 的 10 位數字的任務,下一個 codez 將很有用:
DI:SI
中的 dword 乘以 10mov ax, 10
mul si ; LSW * 10 -> DX:AX
mov si, ax
xchg di, dx
mov ax, 10
mul dx ; MSW * 10 -> DX:AX
jc Overflow
add di, ax
jc Overflow
AL=[0,9]
添加到DI:SI
中的 dwordmov ah, ah
add si, ax
adc di, 0
jc Overflow
Input:
mov ah, 01h ; DOS.GetKeyWithEcho
int 21h ; -> AL
cmp al, 13 ; Is it <ENTER> ?
je Done
sub al, '0' ; From character to digit
cmp al, 9
ja Invalid
...
jmp Input
Done:
決定如何處理無效的用戶輸入以及如何處理產生大於 4GB-1 的數字的輸入非常重要。 許多程序都忽略了這一點,然后在某些時候神秘地失敗了......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.