The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Packed BCD, !*! MayVortex, 18-Янв-04, 18:44  [смотреть все]
Есть жуткое задание: нужно входное десятичное число в диапазоне 0..9999 перевести в Packed-BCD. Как это сделать?
  • Packed BCD, !*! MayVortex, 22:37 , 19-Янв-04 (1)
    >Есть жуткое задание: нужно входное десятичное число в диапазоне 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, 23:19 , 20-Янв-04 (2)
      Кому интересно, делается это так:

      ===============
      #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 символ :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру