IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> преобразование форматов
F0b0s
сообщение 12.11.2006 0:32
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Всё.....я уже ни чё не понимаю......sad.gif(((((((((( как преобразовать двоичное число в десятичное(BCD)?размер двоичного 6 байт.....процессор 16разрядный..сопроцессор не использовать......
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
xds
сообщение 12.11.2006 15:42
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


В виде вставок пойдёт?

Первый вариант (развёрнутые циклы):
program _bcd;

{$G+}

const
Hex: array[0..15] of Char = '0123456789ABCDEF';

var
bin: array[0..5] of Byte;
bcd: array[0..7] of Byte;

t: LongInt absolute bin;
i: Integer;

begin
t := 123456789;
{ t := 987654321; }
asm
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[7],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[6],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[5],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[4],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[3],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[2],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[1],ah
call @@div10
mov dx,ax
call @@div10
shl ah,4
or ax,dx
mov byte ptr bcd[0],ah
jmp @@exit

@@div10:
mov cl,10
xor ax,ax
mov al,byte ptr bin[5]
div cl
mov byte ptr bin[5],al
mov al,byte ptr bin[4]
div cl
mov byte ptr bin[4],al
mov al,byte ptr bin[3]
div cl
mov byte ptr bin[3],al
mov al,byte ptr bin[2]
div cl
mov byte ptr bin[2],al
mov al,byte ptr bin[1]
div cl
mov byte ptr bin[1],al
mov al,byte ptr bin[0]
div cl
mov byte ptr bin[0],al
ret

@@exit:
end;

for i := 0 to 7 do
Write(Hex[bcd[i] shr 4], Hex[bcd[i] and $F]);
Writeln;
end.

Второй вариант (циклы на основе "loop"):
program bcd2;

{$G+}

const
Hex: array[0..15] of Char = '0123456789ABCDEF';

var
bin: array[0..5] of Byte;
bcd: array[0..7] of Byte;

t: LongInt absolute bin;
i: Integer;

begin
t := 123456789;
{ t := 987654321; }
asm
push si
push di
push ds
pop es
std

lea di,bcd[7]
mov cx,8
@@store:
push cx
call @@div10
mov bx,ax
call @@div10
shl ah,4
or ax,bx
mov al,ah
stosb
pop cx
loop @@store
jmp @@exit

@@div10:
mov dl,10
xor ax,ax
lea si,bin[5]
mov cx,6
@@div:
lodsb
div dl
mov [si+1],al
loop @@div
ret

@@exit:
pop di
pop si
end;

for i := 0 to 7 do
Write(Hex[bcd[i] shr 4], Hex[bcd[i] and $F]);
Writeln;
end.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.08.2025 18:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"