d segment
x db 3 dup(?)
d ends
с segment
.....
mov ax,0
lea bx,x
mov cx,3
mov si,10
L: mul si
mov dl,[bx]
pop cx
mov cl,4
shr dl,cl
push cx
mov dh,0
add ax,dx
mul si
mov dl,[bx]
and dl,0fh
mov dh,0
add ax,dx
inc bx
Loop L
....
c ends
Преобразование из двоично-десятичного кода
Нужно преобразовать число из двоично-десятичного кода в двоичную систему счисления
т.е. твое двоично десятичное число сохранено в массиве, а тебе надо преобразовать его обыкновенное числовое значение?
Да. Например в регистре si
задача легкая, но я могу в лучшем случае объяснить что делать, т.к. когда не используешь асм - он забывается, у меня по крайней мере.
Был бы признателен
берёшь группы по четыре цифры, каждая группа тебе даёт число от 0000 до 1001, т.е. 0-9, потом у тебя получается послдедовательность цифр, это и есть число в десятичной системе, а потом как обычно преобразовываешь его в двоичное
а не проще взять просто регистр АХ например, обнулить его, а затем создать цикл в котором умножаем АХ на 2(базис системы) и прибавляем по одной двоичной цифре начиная со старшего разряда.
Код:
правда мог напутать ) - как уже сказала Ольга асм забывается
тут я не учитывал возможного переполнения и в ax получил слово из массива x
ps за ошибки и неточности не ругать :d
проверить нет возможности
Код:
data segment
x db 3 dup(?)
data ends
code segment
.....
mov ax,0
lea bx,x
mov cx,3
mov si,2 ;умножать надо на базис собираемого числа. т.к. цифры двоичные, то и берем СС 2
xor dx, dx ;обнуляем dx
L: mul si
mov dl, [bx]
add ax,dx
inc bx
Loop L
....
code ends
x db 3 dup(?)
data ends
code segment
.....
mov ax,0
lea bx,x
mov cx,3
mov si,2 ;умножать надо на базис собираемого числа. т.к. цифры двоичные, то и берем СС 2
xor dx, dx ;обнуляем dx
L: mul si
mov dl, [bx]
add ax,dx
inc bx
Loop L
....
code ends
вот например число 1h,2h,3h переведем
ax=1
ax=ax*10+2
ax=ax*10+3
я не пойму почему нужно на два умножать )
Цитата: ahilles
даа, зря я переместил эту тему.....
ну в общих вопросах этой теме явно не место ...
nilbog, извини, ошиблась :), ты прав.
http://en.wikipedia.org/wiki/Binary-coded_decimal
о знаковых я не задумывался (и автор темы ничего не говорил)
Sqwirl Ты ещё здесь? BCD упакованное или нет?
Тут ещё и ввод с клавы
Код:
.model tiny
code segment byte
assume cs:code,ds:code
org 100h
start:
mov dx,0B800h
mov es,dx
mov ah,1Ch
main_loop:
mov si,0
xor bx,bx
mov cx,16
keyboard_loop:
in al,60h
cmp al,ah
je keyboard_loop
mov ah,al
cmp al,01h
je shutdown
cmp al,02h
je evaluate_1
cmp al,0Bh
jne keyboard_loop
shl bx,1
mov es:[si],'0'
jmp end_keyboard_loop
evaluate_1:
shl bx,1
or bx,1
mov es:[si],'1'
end_keyboard_loop:
inc si
mov es:[si],00fh
inc si
dec cx
jnz keyboard_loop
push bx
mov cx, 3
call decode
mov cx,16
mov si,80
print_result:
shl ax,1
jc print_1
mov es:[si],'0'
jmp end_print_symbol
print_1:
mov es:[si],'1'
end_print_symbol:
inc si
mov es:[si],00fh
inc si
loop print_result
test bl,0FFh
jnz error_beep
shutdown:
pop ax
mov ax,4C00h
int 21h
error_beep:
push ax
in al,61h
or al,3
out 61h,al
mov ah,86h
mov cx,5
mov dx,0
int 15h
in al,61h
and al,not 3
out 61h,al
pop ax
jmp main_loop
decode proc
push bp
mov bp, sp
mov ax, [bp+4]
and ax, 0000000000001111b
push ax
mloop: mov ax, [bp+4]
mov dx, 0004h
sub dx, cx
push cx
mov cx, dx
sdv: shr ax, 4 loop sdv
and ax, 0000000000001111b
mov bx, 000Ah
mov cx, dx
umn: mul bx
loop umn
pop cx
pop dx
add ax, dx
push ax
loop mloop
pop ax
pop bp
ret
decode endp
code ends
end start
code segment byte
assume cs:code,ds:code
org 100h
start:
mov dx,0B800h
mov es,dx
mov ah,1Ch
main_loop:
mov si,0
xor bx,bx
mov cx,16
keyboard_loop:
in al,60h
cmp al,ah
je keyboard_loop
mov ah,al
cmp al,01h
je shutdown
cmp al,02h
je evaluate_1
cmp al,0Bh
jne keyboard_loop
shl bx,1
mov es:[si],'0'
jmp end_keyboard_loop
evaluate_1:
shl bx,1
or bx,1
mov es:[si],'1'
end_keyboard_loop:
inc si
mov es:[si],00fh
inc si
dec cx
jnz keyboard_loop
push bx
mov cx, 3
call decode
mov cx,16
mov si,80
print_result:
shl ax,1
jc print_1
mov es:[si],'0'
jmp end_print_symbol
print_1:
mov es:[si],'1'
end_print_symbol:
inc si
mov es:[si],00fh
inc si
loop print_result
test bl,0FFh
jnz error_beep
shutdown:
pop ax
mov ax,4C00h
int 21h
error_beep:
push ax
in al,61h
or al,3
out 61h,al
mov ah,86h
mov cx,5
mov dx,0
int 15h
in al,61h
and al,not 3
out 61h,al
pop ax
jmp main_loop
decode proc
push bp
mov bp, sp
mov ax, [bp+4]
and ax, 0000000000001111b
push ax
mloop: mov ax, [bp+4]
mov dx, 0004h
sub dx, cx
push cx
mov cx, dx
sdv: shr ax, 4 loop sdv
and ax, 0000000000001111b
mov bx, 000Ah
mov cx, dx
umn: mul bx
loop umn
pop cx
pop dx
add ax, dx
push ax
loop mloop
pop ax
pop bp
ret
decode endp
code ends
end start