Программа:
model small
stack 100h
.data
tekst db "Vvedite chislo ne bolee 4-x cifr:",'$' ;сообщение ввести число
string db 6 dup (0) ;массив, который будет содержать 4 цифры числа
len_string =$-string ;длина массива
delitel db 15 ;основание новой системы счисления
mas db 6 dup (0) ;массив из 4 эл-тов, содержащих число 10, который будет содержать цифры числа в новой СС
chislo1 db 0
chislo dw 0 ;число в 10-ной СС
ten db 10
tekst2 db "Chislo v 15-richnoi SS:",'$'
ost dw 0
sto db 100
tekst3 db "Oshibka!",'$'
smesh dw 0
segm dw 0
.code
my_proc proc
.code
pushf
push ds es ax di bx cx
mov ax, @data
mov ds, ax
;перевод в 15-ричную СС
mov si,0
cikl2:
mov ax,bx
div delitel ;делю число в 10-ной СС на 15
mov mas[si],ah
inc ost
mov ah,0
mov chislo,ax
inc si
cmp chislo,0
jne cikl2
;замена цифр остатков, если они от 10 до 14, на буквы
mov si,0
zamena:
cmp si,ost
jnb vivod
cmp mas[si],10
jb net
add mas[si],55
inc si
jmp zamena
net:
add mas[si],30h
inc si
jmp zamena
;вывод символов на экран
vivod:
mov ax,0B800h
mov es,ax
mov di,0C8Ah
mov si,ost
mov cx,ost
mov ah,02h
cikl3:
cmp mas[si],0
jne m2
dec si
jmp cikl3
m2:
mov al,mas[si]
mov es:[di],ax
dec si
loop cikl3
pop cx bx di ax es ds
popf
jmp dword ptr cs:[smesh]
iret
my_proc endp
start:
mov ax,@data
mov ds,ax
;выводим сообщение о вводе числа
mov ah,09h
mov dx,offset tekst
int 21h
;вводим с клавиатуры число
mov bx,0 ;номер страницы
mov cx, len_string ;записываем количество повторений ввода символа
lea dx,string ;записываем символы в массив string
mov ah,3fh ;номер функции
int 21h
jnc dal
mov ah,09h
mov dx,offset tekst3
int 21h
jmp exit
dal:
mov bx,ax
sub bx,2
;получаем из цифр число
mov si,0
mov ost,0
cikl1:
cmp bx,4
je n1
cmp bx,3
je n2
cmp bx,2
je n3
cmp bx,1
je n4
cmp bx,0
je n5
n1:
sub string[si],30h ;вычитаю из кода символа 48, чтобы получить цифру
mov al,string[si] ;записываю число в 10-ной СС в ах
mul ten
mul sto
add chislo,ax
jmp n5
n2:
sub string[si],30h ;вычитаю из кода символа 48, чтобы получить цифру
mov al,string[si] ;записываю число в 10-ной СС в ах
mul sto
add chislo,ax
jmp n5
n3:
sub string[si],30h ;вычитаю из кода символа 48, чтобы получить цифру
mov al,string[si] ;записываю число в 10-ной СС в ах
mul ten
add chislo,ax
jmp n5
n4:
sub string[si],30h ;вычитаю из кода символа 48, чтобы получить цифру
mov al,string[si]
add chislo,ax
n5:
dec bx
inc si
inc ost
cmp bx,0
jne cikl1
mov bx,chislo
mov ah,09h
mov dx,offset tekst2
int 21h
mov ah,35h
mov al,10h
int 21h
mov cs:[smesh],bx
mov cs:[segm],es
mov ah,25h
mov al,10h
mov dx,offset my_proc
push cs
pop ds
int 21h
int 10h
mov ah,25h
mov al,10h
mov dx,cs:[smesh]
mov ds,cs:[segm]
int 21h
exit:
mov ax,4c00h
int 21h
end start