PRINT_UNSIGNED PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX XOR CX,CX MOV BX,10 _CALC_DIGS: XOR DX,DX DIV BX PUSH DX INC CX CMP AX,0 JNE _CALC_DIGS _PRINT_DIGS: POP DX MOV AH,02H ADD DL,'0' INT 21H LOOP _PRINT_DIGS POP DX POP CX POP BX POP AX RET PRINT_UNSIGNED ENDP PRINT_SIGNED PROC NEAR PUSH DX PUSH AX CMP AX,0 JGE _PS_PRINT PUSH AX MOV AH,02H MOV DL,'-' INT 21H POP AX NEG AX _PS_PRINT: CALL PRINT_UNSIGNED POP AX POP DX RET PRINT_SIGNED ENDP READ_UNSIGNED PROC NEAR PUSH BX PUSH CX PUSH DX MOV BX,10 XOR AX,AX _RU_READ_CHAR: PUSH AX MOV AH,01H INT 21H CMP AL,0DH JE _RU_DONE SUB AL,'0' XOR CH,CH MOV CL,AL POP AX MUL BX ;TIMES 10 ADD AX,CX JMP _RU_READ_CHAR _RU_DONE: POP AX POP DX POP CX POP BX RET READ_UNSIGNED ENDP READ_SIGNED PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI XOR SI,SI MOV BX,10 XOR AX,AX PUSH AX _FIRST_CHAR: MOV AH,01H INT 21H CMP AL,0DH JE _DONE _MINUS: CMP AL,'-' JNE _PLUS MOV SI,1 POP AX JMP _READ_CHAR _PLUS: CMP AL,'+' JNE _SPACE POP AX JMP _READ_CHAR _SPACE: CMP AL,' ' JE _FIRST_CHAR SUB AL,'0' XOR CH,CH MOV CL,AL POP AX MUL BX ;TIMES 10 ADD AX,CX _READ_CHAR: PUSH AX MOV AH,01H INT 21H CMP AL,0DH JE _DONE SUB AL,'0' XOR CH,CH MOV CL,AL POP AX MUL BX ;TIMES 10 ADD AX,CX JMP _READ_CHAR _DONE: POP AX CMP SI,1 JNE _RESTORE NEG AX _RESTORE: POP SI POP DX POP CX POP BX RET READ_SIGNED ENDP