Ввод двух чисел, вывод результата деления первого на второе - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы