2016-04-10 3 views
1

Первая попытка: я уже вводил предопределенные данные. Мой другой код не будет работать, когда есть пользовательский ввод.Поместить пользовательский ввод в CX

.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 

Вот один с входом пользователя:

.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 

Это просто дает мне неправильный ответ:/я очень новой для TASM, и это убивает меня

В принципе, я не знаю, как положить USER INPUT в cx. Мне просто нужно использовать mov,ah 01h, что означает, что пользователь может ввести только 1 цифру.

ПЛЮС. У меня возникла еще одна проблема, если FINAL ANSWER - это 3-значный номер #.

Пример, 2 x 2 x 16 = 64 (сейф, 2 цифры только)

Но с 5 x 3 x 9 = 135 (Когда я запускаю программу, дает мне только 5) я не получаю логику 3 цифр ответа.

ответ

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

Поскольку функция ввода дал вам характер вам все еще нужно, чтобы преобразовать его в работоспособное числа путем вычитания 48.
Кроме того, необходимо поставить ноль в CH регистре потому что вы будете использовать все CX в качестве счетчика.

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

О логике для 3-значного ответа на:

Вы должны заменить again3 построить с последовательностью 2 таких конструкций. Первый будет многократно вычитать , а второй будет вычитать из вычитания . Между вами сохраняются результаты с отдельными регистрами или переменными.

+0

ах спасибо большое, но .. theres что-то не так после того, как я беру ввод, потому что он не дает мне правильный ответ:/я не понимаю, что неправильно – Exu

+0

позвольте мне снова проверить xD – Exu

Смежные вопросы