Другие языки программирования и технологии

как переводить из 16-ную в 10-чную из 10-чную в 16-чную систему счисления на ассемблере без калькулятора

и из 2-чную в 10-ную из 10-чной в 2-чную из 2-чной в 16-чной и из 16-чной в 2-чной
см. описание используемого процессора и Ассемблера
Заур Махмудов
Заур Махмудов
8 697
Лучший ответ
перевод из 5 в 13

.model small
.stack 100h

.data

zapros db 'Enter : $'
result db 'Result :$'
caret db 0Ah,0Dh,'$'
error db 'Symbol not correct!$'

.code

osnin equ 5 ; исходная система счисления
osnout equ 13 ; конечная система счисления

; ввод символов
input PROC

mov dx,offset zapros
mov ah,9
int 21h

nextnum:

mov ah,01h;вводим новый символ
int 21h

cmp al,2fh ; если нажали enter то это конец числа
jl outp
cmp al,30h ; если введен неверный символ <0
jl er
cmp al,35h ; если введен неверный символ >5
ja er

sub al,30h ;делаем из введенного символа число
xor ah,ah
xchg ax,bx
mov dx,osnin
mul dx; умножаем на основание исходной системы счисления

add bx,ax;и прибавляем новое = сумма
jmp nextnum

er:

mov dx,offset caret
mov ah,9
int 21h

mov dx,offset error
mov ah,9
int 21h

mov dx,offset caret
mov ah,9
int 21h

jmp nextnum

outp:

ret
ENDP

start:

mov ax, @data
mov ds, ax
mov es, ax

call input

outchin:

mov dx,offset caret
mov ah,9
int 21h

mov dx,offset result
mov ah,9
int 21h

mov dl,20h ; пробел
mov ah,2
int 21h

mov cx,bx
xor dx,dx

l1:
cmp cx,osnout*osnout*osnout*osnout ; если число больше
jb l2
sub cx,osnout*osnout*osnout*osnout; то вычитаем
inc dx ;и увеличиваем счетчик
cmp dl,10
jnz l1
add dx,10
jmp l1

l2:
add dl,30h; теперь в dl разряд числа, чтобы он стал символом добавляем 30h
mov ah,2
int 21h ;выводим его
xor dx,dx

l3:
cmp cx,osnout*osnout*osnout
jb l4
sub cx,osnout*osnout*osnout
inc dx
cmp dl,10
jnz l3
add dx,7
jmp l3
l4:
add dl,30h
mov ah,2
int 21h
xor dx,dx

l5:
cmp cx,osnout*osnout
jb l6
sub cx,osnout*osnout
inc dx
cmp dl,10
jnz l5
add dx,7
jmp l5
l6:
add dl,30h
mov ah,2
int 21h
xor dx,dx

l7:
cmp cx,osnout
jb l8
sub cx,osnout
inc dl
cmp dl,10
jnz l7
add dl,7
jmp l7
l8:

add dl,30h
mov ah,2
int 21h
mov dl,cl
cmp dl,9
jl l9
add dl,7

l9:
add dl,30h
mov ah,2
int 21h

mov ax,4c00h
int 21h

end start