2015-07-17 2 views
-1

У меня возникла проблема в сборке, в которой я не мог получить сумму и продукт из 2 введенных чисел. Я все еще работаю над получением суммы, но похоже, что я не смог ее получить. Я использую emu8086. Не могли бы вы помочь мне исправить эти коды ниже. Я также не мог получить их продукцию. Я новичок. Благодарю.сборка, получающая сумму входов

.MODEL SMALL 
.STACK 1000 
.DATA 
MSGA DB 13,10,"Input first number: ","$" 
MSGB DB 13,10,"Input second number:","$" 
MSGC DB 13,10,"The sum is: ","$" 
NUM1 db ? 
NUM2 db ? 
NUM3 db ? 
.CODE 
MAIN PROC NEAR 
MOV AX, @DATA 
MOV DS, AX 
LEA DX, MSGA 
MOV AH, 09h 
INT 21h 
MOV AH, 01 
INT 21H 
SUB AL, '0' 
MOV BL, AL 
MOV AH, 01 
INT 21H 
SUB AL, '0' 
MOV CL, AL 
LEA DX, MSGB 
MOV AH, 09h 
INT 21h 
MOV AH, 01 
INT 21H 
SUB AL, '0' 
MOV DL, AL 
MOV AH, 01 
INT 21H 
SUB AL, '0' 
MOV DH, AL 
MOV AL, CL 
MOV AH, BL 
ADD AL, DH 
AAA 
ADD AH, DL 
MOV NUM1, AL 
ADD NUM1, '0' 
CMP AH, 9 
JLE NOT_3DIGIT 
IS_3DIGIT: 
MOV AL, AH 
SUB AH, AH 
ADD AL, 0  
AAA   
ADD AH, 0  
MOV NUM2, AL 
MOV NUM3, AH 
ADD NUM2, '0' 
ADD NUM3, '0' 
LEA DX, MSGC 
MOV AH, 09h 
INT 21h 
MOV DL, NUM3 
MOV AH, 02H 
INT 21h 
MOV DL, NUM2 
MOV AH, 02H 
INT 21h 
JMP PRINT_LASTDIGIT 


NOT_3DIGIT: 
MOV NUM2, AH 
ADD NUM2, '0' 
LEA DX, MSGC 
MOV AH, 09h 
INT 21h 
MOV DL, NUM2 
MOV AH, 02H 
INT 21h 


PRINT_LASTDIGIT: 
MOV DL, NUM1 
MOV AH, 02H 
INT 21h 


EXIT: 
MOV AH, 4Ch 
INT 21h 
MAIN ENDP 
END MAIN 
+2

Комментировать код, особенно если вы хотите, чтобы другие помогли. Кроме того, более точно опишите проблему. Учитывая, что у вас есть emu8086, пройдите через свой код и посмотрите, где он идет не так. – Jester

ответ

-1

Вы принимаете 2 цифры входа, поэтому после умножения вы хотите преобразовать ответ обратно в исходном [десятичном] форме для отображения. Это можно сделать, разделив его на 10, а затем отображая коэффициент и Remainder соответственно. Вот код для умножения, который сначала берет двузначные числа, а затем умножает его на другое число с одной цифрой, Но это только для того, чтобы дать вам Идея:

.model small 
.stack 
.data 
msg1 db 10,13,'First Value:','$'; 
msg2 db 10,13,'Second Value:','$'; 
msg3 db 10,13,'multiplication:','$'; 
second db ? 
temp db ? 
num1 db ? 
num2 db ? 
a db 10 

.code 
main proc 
mov ax,@data 
mov ds,ax 
mov ah,09h 
lea dx,msg1 
int 21h 
mov ah,01h 
int 21h 
sub al,30h 
mul a 
mov temp,al 
mov ah,01h 
int 21h 
sub al,30h 
add temp,al 
mov [bx],al 
mov ah,09h 
lea dx,msg2 
int 21h 
mov ah,01h 
int 21h 
mov second,al 
sub second,30h 
mov ax,00h 
mov al,temp 
mul second 
div a 
mov num1,al 
mov num2,ah 
add num1,30h 
add num2,30h 
mov ah,09h 
lea dx,msg3 
int 21h 
mov ah,02h 
mov dl,num1 
int 21h 
mov ah,02h 
mov dl,num2 
int 21h 
mov al,0 
inc bx 
dec cx 
mov ah,4ch 
int 21h 
main endp 
end main 

Надеюсь, это поможет!

+0

В вашем коде не хватает комментариев, поэтому продолжайте надеяться, что это поможет! У этого есть несогласованности и очень очевидная ошибка. Пожалуйста, переработайте свой ответ. – Fifoernik

+0

То, что я действительно хочу появиться в окне, выглядит так: вы вводите 2 десятичных числа, и сумма и произведение этих двух чисел будут показаны. – sierrecodd