Приведем текст файла SERVIS.ASM, содержащий помимо процедур ввода и вывода многозначных чисел дополнительно процедуры очистки экрана, установки курсора, вывода строки текста на экран.

    Текст этого файла:

	PUBLIC Vvod,Vyvod,Clear,Write_Str,Cursor

StackSg SEGMENT  PARA Stack 'Stack'
DW      132   DUP (?)
StackSg ENDS

CodeSg  SEGMENT PARA PUBLIC
        Assume CS:CodeSg, SS:StackSg
Vvod    PROC  FAR   ;Процедура ввода числа.
                    ;Число помещается в регистр BX. 
;------------------ Сохранение регистров --------------
        PUSH AX
        PUSH CX
        PUSH DX
;------------------ Ввод с клавиатуры -----------------
        MOV BX,0000 ;Введенное число.
        MOV CX,0000 ;Количество помещений в стек.
        MOV DX,1    ;Множитель.
@V1:    MOV AH,01
        INT 21H
        CMP AL,0DH  ;Это клавиша Enter?
        JE @V2      ;Переход на обработку числа.
        CMP AL,'-'  ;Это знак '-'?
        JE @V3      ;Ничего вычитать не надо.  
        SUB AL,30H
@V3:    MOV AH,0
        PUSH AX     ;Поместить цифру в стек.
        INC CX      ;Увеличить счетчик на 1.
        JMP @V1     ;Переход на ввод новой цифры.
;------------------ Получение числа --------------------
@V2:    POP AX      ;Достать цифру из стека.
        CMP AL,'-'  ;Это '-'?
        JNE @V4     ;Нет - перейти на обработку.
        NEG BX      ;Да - сменить знак числа.
        JMP @V5     ;Выход из процедуры.
@V4:    MUL DL      ;Умножить ее на множитель.
        ADD BX,AX   ;Прибавить произведение к результату.
                    ;Получить очередной множитель.
        MOV AX,DX
        MOV DX,000AH
        MUL DL
        MOV DX,AX   ;Поместить множитель в DX.
        LOOP @V2    ;Извлечь очередную цифру.         
;-- Выход из процедуры. Восстановление регистров --------
@V5:
        POP DX
        POP CX
        POP AX
        RET
Vvod    ENDP

Vyvod   PROC  FAR   ;Процедура вывода числа на экран.
                    ;Число находится в регистре BX. 
;------------------ Сохранение регистров --------------
        PUSH AX
        PUSH CX
        PUSH DX
;------------------ Проверяем знак числа --------------
        CMP BX,0
        JGE @K1     ;Да - число неотрицательное.
        MOV AH,02   ;Выводим на экран символ '-'.
        MOV DL,'-'
        INT 21H
        NEG BX      ;Меняем знак.
;------------------ Получаем цифры числа ---------------
@K1:    MOV AX,BX
        MOV BX,0000
        MOV DX,000AH;Делитель.
        MOV CX,0000 ;Количество помещений в стек.
@K2:    DIV DL     
        MOV BL,AH   ;Остаток от деления - в стек.
        PUSH BX
        MOV AH,0
        INC CX      ;Увеличить счетчик на 1.
        CMP AX,0    
        JNE @K2     ;Получение следующей цифры.
;------------------ Вывод цифр на экран -----------------
        MOV AH,02
@K3:    POP DX
        ADD DL,30H
	INT 21H
        LOOP @K3
;-- Выход из процедуры. Восстановление регистров --------
        POP DX
        POP CX
        POP AX
        RET
Vyvod   ENDP

Clear   PROC  FAR   ;Процедура очистки экрана.
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        MOV   AX,0600H   ;Запрос на очистку экрана.
        MOV   BH,07      ;Нормальный атрибут (черно/белый).
        MOV   CX,0000    ;Верхняя левая позиция.
        MOV   DX,184FH   ;Нижняя правая позиция.
        INT   10H        ;Передача управления в BIOS.
        POP DX
        POP CX
        POP BX
        POP AX
        RET
Clear   ENDP 

Write_Str PROC  FAR   ;Процедура вывода строки на экран.
          PUSH AX

          MOV  AH,09      ;Запрос вывода на экран.
          INT  21H        ;Вызов DOS-прерывания.

          POP AX
          RET
Write_Str ENDP 
    
Cursor  PROC  FAR  ;Процедура установки курсора.
        PUSH AX
        PUSH BX

        MOV   AH,2      ;Запрос на установку курсора.
        MOV   BH,0      ;Экран 0.
        INT   10H       ;Передача управления в BIOS.

        POP  BX
        POP  AX
        RET
Cursor  ENDP
CodeSg  ENDS
        END
Текст этого модуля можно взять здесь.