Сообщение от
Gina
это вывод восмеричного числа
Проще и лучше всего (на мой взгляд) использовать вывод числа без MUL/DIV.
Следующий код позволяет выводить числа с любым основанием, указанием числа позиций вывода и символа-заполнителя незанятых позиций.
Код:
;
; DIGIT.MAC - Вывод числа с любым основанием, указанием числа позиций вывода
; и символа-заполнителя незанятых позиций.
;
.MCall .Print, .Exit
START:
Mov #60, FILL ; Символ-заполнитель
Mov #Buf,R0 ; Адрес буфера для вывода
Mov #77, R1 ; Число для вывода
Call DIGIT
.Byte 8.,3. ; Основание и количество позиций вывода
.Print #Buf
.Exit
; ================================
;
; R0 = адрес буфера строки
; R1 = число для вывода
;
DIGIT::
MOVB @(SP),OSN ;
INC (SP) ;
MOVB @(SP),NDIG ;
INC (SP) ;
BIC #^C17,NDIG ;
BIC #^C77,OSN ;
MOV #SYMR,ADDS ;
BIT #40,OSN ;
BNE 1$ ;
ADD #SYMD-SYMR,ADDS ;
1$: CALL DIG ;
RETURN ;
DIG: MOV R1, -(SP) ;
MOV #-1, R1 ;
1$: INC R1 ;
SUB OSN, (SP) ;
BCC 1$ ;
ADD (PC)+, (SP) ;
OSN: .WORD 0 ;
DEC NDIG ;
TST R1 ;
BEQ L2$ ;
CALL DIG ;
L2$: TSTB (PC)+ ;
NDIG: .WORD 0 ;
BEQ L3$ ;
BMI L3$ ;
MOVB (PC)+, (R0)+ ;
FILL:: .WORD 40 ;
DECB NDIG ;
BR L2$ ;
L3$: ADD (PC)+,@SP ;
ADDS: .WORD SYMR ;
MOVB @(SP)+, (R0)+ ;
RETURN ;
;
SYMR: .ASCII ! ABCDEFGHIJKLMNOPQRSTUVWXYZ$./! ;
SYMD: .ASCII !0123456789ABCDEF! ;
.EVEN
;
; ================================
Buf: .BlkB 80.
.END START
;
Результат запуска в эмуляторе: