URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2473
[ Назад ]

Исходное сообщение
"Packed BCD"

Отправлено MayVortex , 18-Янв-04 18:44 
Есть жуткое задание: нужно входное десятичное число в диапазоне 0..9999 перевести в Packed-BCD. Как это сделать?

Содержание

Сообщения в этом обсуждении
"Packed BCD"
Отправлено MayVortex , 19-Янв-04 22:37 
>Есть жуткое задание: нужно входное десятичное число в диапазоне 0..9999 перевести в
>Packed-BCD. Как это сделать?

Сам несколько продвинулся в этом вопросе, но всё-же не до конца. Вот так пишется Unpacked-BCD...
==============================================
#include <stdio.h>
#include <conio.h>
void main(void){
     unsigned char x;
     int      xx;
     clrscr();
     printf("Введите X (меньше 100) --> ");
     scanf("%d",&x);
     asm{
         mov        al,x
         aam
         mov        xx,ax
     }
     printf("\nНеупакованный BCD X=x",xx);
     getch();
}
==============================================

Вот так нужно заменить ассемблерную вставку, чтобы работать с Packed-BCD

==============================================
         mov        al,25h
         mov        ah,30h
         aam
         mov        xx,ax
==============================================

Теперь вопрос чисто чишный... Как введённое с клавиатуры число, скажем 3025 превратить в две строки: 25h 30h ?


"Packed BCD"
Отправлено MayVortex , 20-Янв-04 23:19 
Кому интересно, делается это так:

===============
#include<stdio.h>
#include<conio.h>
void main(void)
{
     int Val;
     printf("Enter: ");
     scanf("% 04d",&Val);
     void *buf = new char[10];

     _asm
     {
           finit
           fild        Val
           mov      eax, buf
           fbstp    [eax]
     }

     Val = *((int*)buf);
     delete buf;

     printf("\nPacked BCD X=% 04x", Val);
     getch();
}
===============
P.S. "Процент 04" пишется без пробела... просто здесь эта последовательность заменяется на ASCII символ :)