2016-04-10 10 views
1

最初の試行:既に定義済みのデータを入力しています。ユーザーの入力があると私の他のコードは動作しません。 /私はTASMに非常に新しいですし、それは私にユーザー入力をCXに入力

を殺している:それはちょうど私に間違った答えを与える

.model small 
.stack 
.data 
    message db 10,13,"The Answer is ..."," ","$" 
    space db 10,13,"$" 
.code 
    mov ax,@data 
    mov ds,ax 


    mov ah,01  ;user input 1 -> al -> cl****** 
    int 21h 
    mov cl,al 

;? x ? = [?]--------------- 
    mov cx,?    ;cx = ?, 0 
    mov bx,0    ;bx = 0, ?[+bx] 

     mov ah,01  ;user input 2 -> al -> bl****** 
     int 21h 
     mov bl,al 
again1: 
    add bx,?    ;bx = last count of bx 
     loop again1 
;[?] x ? = ??---------------  
    mov cx,bx    ;cx = ?, 0     
    mov bx,0    ;bx = 0, ?[+bx] 

    mov ah,01  ;user input 3 -> al -> bl****** 
    int 21h 
    mov cl,al 
again2: 
    add bx,?    ;bx = TOTAL# -> ax(ah,al) 
    loop again2 
    mov ax,bx 

;TOTAL# = Print "#1stDigit and #2ndDigit"------2x2x5=20 

    mov cx,65535   ;cx = 65,535 times (almost infinite # of loops) 
    mov bl,0    ;bl =  0,   1,  2,  3,  4,  5, 6  <-COUNT# 
         ;al = TOTAL#(-10),#(-10),#(-10),#(-10),#(-10),#(-10), ......FINAL# 
again3: 
    sub al,10 
    cmp al,10    ;al(FINAL#) is less than 10 
    jl next     ;go to "NEXT" 
     inc bl 
      loop again3 

next:      ;NEXT 
    mov ah,09 
    lea dx,message 
    int 21h 

    add al,30h    ;al = FINAL# + 30 = when printed is equals to "FINAL# real value" 
    mov cl,al 

    add bl,31h    ;bl = COUNT# + 30 = when printed is equals to "COUNT# real value" 
    mov dl,bl    ;print 1st digit 
    mov ah,02 
    int 21h 

    mov dl,cl    ;print 2nd digit 
    mov ah,02 
    int 21h 

    mov ah,09 
    lea dx,space 
    int 21h 

     ;2x2x16 =64 

    mov ah,4ch 
    int 21h 
end 

:ここ

.model small 
.stack 
.data 
    message db 10,13,"Multiply 2 x 2 x 16 ="," ","$" 
space db 10,13,"$" 
.code 
    mov ax,@data 
    mov ds,ax 



;2 x 2 = [4]--------------- 
    mov cx,2    ;cx = 2, 1, 0 
    mov bx,0    ;bx = 0, 2, 4 
again1: 
    add bx,2    ;bx = 4 
     loop again1 
;[4] x 16 = 64--------------- 
    mov cx,bx    ;cx = 4, 3, 2, 1, 0     
    mov bx,0    ;bx = 0,16,32,48,64 
again2: 
    add bx,16    ;bx = 64 -> ax(ah,al) 
     loop again2 
     mov ax,bx 

;64 = Print "6 and 4"------ 

    mov cx,65535   ;cx = 65,535 times (almost infinite # of loops) 
    mov bl,0    ;bl = 0,   1,  2,  3,  4,  5, 6 
          ;al = 64(-10),54(-10),44(-10),34(-10),24(-10),14(-10), 4 
again3: 
    sub al,10 
    cmp al,10    ;al(4) is less than 10 
    jl next     ;go to "NEXT" 
     inc bl 
      loop again3 

next:      ;NEXT 
    mov ah,09 
    lea dx,message 
    int 21h 

    add al,30h    ;al = 4 + 30 = "34" when printed is equals to "4" 
    mov cl,al 

    add bl,31h    ;bl = 6 + 30 = "36" when printed is equals to "6" 
    mov dl,bl    ;print 6 
    mov ah,02 
    int 21h 

    mov dl,cl    ;print 4 
    mov ah,02 
    int 21h 

    mov ah,09 
    lea dx,space 
    int 21h 

     ;2x2x16 =64 

    mov ah,4ch 
    int 21h 
end 

は、ユーザーの入力を有するものです

基本的に、私はcxにUSER INPUTを入れる方法を知らない。私はちょうどmov,ah 01hを使用する必要があります。つまり、ユーザーは1桁しか入力できません。

PLUS、FINAL ANSWERが3桁の数字の場合はもう1つ問題があります。

例、2 x 2 x 16 = 64(唯一の安全な、2桁)

しかし5 x 3 x 9 = 135と、私は3桁の答えのためのロジックを得ることはありません (私はプログラムを実行すると、私にだけ5を与えます)。

答えて

1
mov ah,01  ;user input 1 -> al -> cl****** 
int 21h 
mov cl,al 

入力機能を使用すると、文字を与えたのであなたはまだあなたがまたCHレジスタにゼロを配置する必要があり48
を減算することにより、使用可能なに変換する必要がありますあなたはCXの全体をカウンターとして使用するでしょうから。 3桁の答えのためのロジックについて

mov ah,01  ;user input 1 -> al -> cl****** 
int 21h 
sub al,48 
mov cl,al 
mov ch,0 

あなたは2ような構築物の連続で again3構造体を交換する必要があります。最初は、を繰り返し減算し、2回目は、を繰り返し減算します。その間に、別個のレジスタまたは変数に結果を保存します。

+0

ああ本当にありがとうございます..私は正しい答えを与えていないので、入力を取った後に何か間違っています:/私は何が間違って理解していません – Exu

+0

もう一度xDをチェックさせてください – Exu

関連する問題