Есть жуткое задание: нужно входное десятичное число в диапазоне 0..9999 перевести в Packed-BCD. Как это сделать?
>Есть жуткое задание: нужно входное десятичное число в диапазоне 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 ?
Кому интересно, делается это так:===============
#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 символ :)