Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование из двоично-десятичного кода

18K
27 мая 2007 года
Sqwirl
19 / / 21.05.2007
Нужно преобразовать число из двоично-десятичного кода в двоичную систему счисления
242
27 мая 2007 года
Оlga
2.2K / / 04.02.2006
т.е. твое двоично десятичное число сохранено в массиве, а тебе надо преобразовать его обыкновенное числовое значение?
18K
27 мая 2007 года
Sqwirl
19 / / 21.05.2007
Да. Например в регистре si
242
27 мая 2007 года
Оlga
2.2K / / 04.02.2006
и что у тебя вызывает трудности? в si я так понимаю указатель на первый элемент массива, кстати это число или символ? под индексом 0 хранится младший разряд? как узнаем сколько элементов в массиве?
задача легкая, но я могу в лучшем случае объяснить что делать, т.к. когда не используешь асм - он забывается, у меня по крайней мере.
18K
27 мая 2007 года
Sqwirl
19 / / 21.05.2007
Был бы признателен
261
27 мая 2007 года
ahilles
1.5K / / 03.11.2005
берёшь группы по четыре цифры, каждая группа тебе даёт число от 0000 до 1001, т.е. 0-9, потом у тебя получается послдедовательность цифр, это и есть число в десятичной системе, а потом как обычно преобразовываешь его в двоичное
242
27 мая 2007 года
Оlga
2.2K / / 04.02.2006
а не проще взять просто регистр АХ например, обнулить его, а затем создать цикл в котором умножаем АХ на 2(базис системы) и прибавляем по одной двоичной цифре начиная со старшего разряда.
622
27 мая 2007 года
nilbog
507 / / 19.12.2006
фрагментик
Код:
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

правда мог напутать ) - как уже сказала Ольга асм забывается
тут я не учитывал возможного переполнения и в ax получил слово из массива x
ps за ошибки и неточности не ругать :d
проверить нет возможности
242
27 мая 2007 года
Оlga
2.2K / / 04.02.2006
nilbog, что то я не совсем поняла что ты делаешь) помоему так:

Код:
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
при условии, что в нулевом байте старший разряд, а если младший, то автору темы код немного изменить надо.
622
27 мая 2007 года
nilbog
507 / / 19.12.2006
нее все дело в том что двоично-дес представлении одной цифре соотв 4 бита
вот например число 1h,2h,3h переведем
ax=1
ax=ax*10+2
ax=ax*10+3
я не пойму почему нужно на два умножать )
242
27 мая 2007 года
Оlga
2.2K / / 04.02.2006
Цитата: ahilles
даа, зря я переместил эту тему.....


ну в общих вопросах этой теме явно не место ...

nilbog, извини, ошиблась :), ты прав.
http://en.wikipedia.org/wiki/Binary-coded_decimal

622
27 мая 2007 года
nilbog
507 / / 19.12.2006
да - кстати наверно моё преобразование только для беззнаковых будет работать
о знаковых я не задумывался (и автор темы ничего не говорил)
1.6K
27 мая 2007 года
Vov4ick
476 / / 01.02.2007
Sqwirl Ты ещё здесь? BCD упакованное или нет?
18K
29 мая 2007 года
Sqwirl
19 / / 21.05.2007
Я уже сдал всё нормально!

Тут ещё и ввод с клавы
Код:
.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
[COLOR=Red]Для оформления кода используем тэги code. Читай правила форума. [/COLOR] OlgaKr.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог