The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Packed BCD"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Packed BCD"
Сообщение от MayVortex emailИскать по авторуВ закладки on 18-Янв-04, 18:44  (MSK)
Есть жуткое задание: нужно входное десятичное число в диапазоне 0..9999 перевести в Packed-BCD. Как это сделать?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

  • Packed BCD, MayVortex, 22:37 , 19-Янв-04, (1)
    • Packed BCD, MayVortex, 23:19 , 20-Янв-04, (2)

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Packed BCD"
Сообщение от MayVortex emailИскать по авторуВ закладки on 19-Янв-04, 22:37  (MSK)
>Есть жуткое задание: нужно входное десятичное число в диапазоне 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 ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Packed BCD"
Сообщение от MayVortex emailИскать по авторуВ закладки on 20-Янв-04, 23:19  (MSK)
Кому интересно, делается это так:

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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