Ввод двух чисел, вывод результата деления первого на второе - Assembler
Формулировка задачи:
тут есть проблема с выводом числа
постоянно выдаёт 0
помогите, люди добрые
.model small
.stack 200h
.data
AXPROC dw 200
STRING_ONE DB ' INPUT 1-ST NUMBER: $'
STRING_TWO DB ' INPUT 2-ND NUMBER: $'
STRING_RES DB ' RESULT: $'
STRING_ESC DB 10, 13,'AGAIN:' , '$'
STRING_BSP DB 10, 13, '$'
INONE DW 0
INTWO DW 0
RESDIV DW 0
TEN DW 10
FDCOUNTER DW 0
LIMIT DW 65535
.code
start:
MOV AX, @DATA
MOV DS, AX
;MAIN CODE
LEA DX,STRING_ONE
MOV AH,09H ;STRING OUT
INT 21H
CALL INPROC
MOV INONE,AX ;ONE IN
LEA DX,STRING_TWO
MOV AH,09H ;STRING OUT
INT 21H
CALL INPROC
MOV INTWO,AX ;TWO IN
LEA DX,STRING_RES
MOV AH,09H ;STRING OUT
INT 21H
CALL COMPUTE
CALL OUTPROC
MOV AH,4CH
INT 21H
OUTPROC PROC
push cx
push dx
push bx
push ax
mov bx, TEN
xor cx, cx
oi1:
xor dx,dx
div bx
push dx
inc cx ; счётчик цикла
cmp ax, ax
jnz oi1
mov ah, 02h
oi2:
pop dx
add dl, '0'
int 21h
loop oi2
pop ax
pop bx
pop dx
pop cx
RET
OUTPROC ENDP
INPROC PROC
PUSH BX ;SAVE ALL REGISTERS
PUSH CX
PUSH DX
PUSH DI ;MAGIC REGISTER DI MUST BE SAVED
XOR DI,DI ;AND SHOULD BE NULL
STARTIN:
MOV AH,08H ;EXACTLY INPUT TO THE AX REGISTER
INT 21H
CMP AL,13 ;AL STORE LAST SYMBOL. 13 - IS FOR ENTER
JZ SAVING ;IF ENTER PRESSED STARTING SAVING TO THE REGISTER
CMP AL,8 ;AL STORE LAST SYMBOL. 8 - IS FOR BACKSPACE
JZ DELETE ;IF BACKSPACE PRESSED DELETING LAST SYMBOL
CMP AL,27 ;AL STORE LAST SYMBOL. 27 - IS FOR ESCAPE
JZ DELALL ;IF ESCAPE PRESSED DELETING ALL NUMBER
;NOT-TO-INPUT STRING CHECKING
CMP AL, '9'
JA STARTIN ;IF AL SYMBOL MORE THAN '9' STARTING TO ENTER SYMBOL AGAIN
CMP AL, '0'
JB STARTIN ;IF AL SYMBOL LESS THAN '0' STARTING TO ENTER SYMBOL AGAIN
MOV AH,02H ;OUTPUT CHECKED SYMBOL
MOV DL,AL ;DL STORE SYMBOL TO OUTPUT
INT 21H
SUB AX, 30H ;CONVERT SYMBOL TO THE DIGIT
PUSH AX ;SAVE DIGIT
MOV AX, DI ;MOVE LAST VALUE TO AX REGISTER TO PREPARE CHECKING
MOV BX, TEN ;CHECKING TO THE OVERLIMIT
MUL BX
JC DELALL ;IF OVERLIMIT GOTO ESCAPE
POP DI
ADD AX, DI ;SUM A HOLE NUMBER(AX) * 10 + CURRENT DIGIT(DI)
MOV DI,AX ;SAVING NUMBER
JMP STARTIN ;ADDING NEW DIGIT
DELALL:
XOR AX,AX ;CLEAR AX REGISTER
XOR DI,DI ;CLEAR DI(SAVED NUMBER) REGISTER
LEA DX,STRING_ESC
MOV AH,09H ;STRING OUT
INT 21H
JMP STARTIN ;START INPUT AGAIN
DELETE:
;BACKSPACE
SAVING:
LEA DX,STRING_BSP
MOV AH,09H ;STRING OUT
INT 21H
MOV AX,DI ;MOVEING NUMBER TO AX REGISTER
POP DI ;RESTORE REGISTERS
POP DX
POP CX
POP BX
RET
INPROC ENDP
COMPUTE PROC
MOV AX, INONE ;INONE/INTWO
DIV INTWO
;DIV TWO DIGITS
RET
COMPUTE ENDP
END STARTРешение задачи: «Ввод двух чисел, вывод результата деления первого на второе»
textual
Листинг программы
POP DI JC DELALL