Другие языки программирования и технологии
как переводить из 16-ную в 10-чную из 10-чную в 16-чную систему счисления на ассемблере без калькулятора
и из 2-чную в 10-ную из 10-чной в 2-чную из 2-чной в 16-чной и из 16-чной в 2-чной
см. описание используемого процессора и Ассемблера
перевод из 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
.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
Похожие вопросы
- Помогите с паскалем. Помогите написать программу переводящую из 10-ой в 16-ую систему счисления на паскале
- как переводить числа в 2-чную, 8 и 16ричную системы счисления?
- помогите с составлением таблицы умножения в 12-чной системе счисления
- аскаль. Написать программу которая переводит число из одной системы счисления в другую
- Число 10 (в десятичной системе счисления) в двоичной системе счисления имеет вид???
- Как переводить из 16-ричной системы счисления в восьмеричную?
- На свете существует 10 типов людей: те кто понимают двоичную систему счисления...
- Системы счисления - тестирую тут! :)
- Как перевести периодичную дробь из 3 системы счисления в 10?
- Как перевести из 16-и ричной системы любое число в 2-ую, 8-ую и 10-ую системы счисления?