簡體   English   中英

你好,我有一個問題,我需要從用戶那里得到輸入,輸入是一個數字和一個又一個數字,這個數字可以是一個雙字

[英]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 乘以 10

mov  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中的 dword

mov  ah, ah
add  si, ax
adc  di, 0
jc   Overflow

循環直到用戶按下Enter

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.

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