Ввод двух чисел, вывод результата деления первого на второе - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д