Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 20:49   #1
stas135642
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 39
По умолчанию Преобразование представления числовых данных

Здравствуйте, уважаемые форумчане. Помогите, плиз, с прогой. А задание такое
Разработать программу перевода целого знакового числа из одной системы счисления в другую.
Исходное число задать в виде строки символов в коде ASCII, результат сформировать в виде двоичного кода в формате слова.
Число в ASCII разместить в памяти таким способом:
Чем старше разряд, тем старше адрес (ЦЦЦ…ЦЗн)
Количество разрядов (байтов) в ASCII-представлении числа выбирается таким, чтобы обеспечивалась возможность работы с числами в диапазоне –32768…+32767.
Система основания исходного числа: 2
Система основания результата:2
Сам постарался сделать прогу. Вот, что получилось.(здесь прост число в ASCII размещается таким способом:1. Чем старше разряд, тем младше адрес (ЗнЦЦЦ…Ц).
Код:
#include <stdio.h>
#include <conio.h>
#include <memory.h>

void main(void)
{
    char src[] = "1100";
    char res[50];
    int num;
    char* pstr;
    char digit;
	
  num = 0;
  pstr = src;
  pstr = &res[49];
  *pstr = 0;                  // символ конца строки
   
    memset(res, 0, sizeof(res));

	__asm
	{
		push eax;
		push ebx;
		push ecx;
		push edx;

        // Перевод строки в 10 число
        // (в строке записано число во 2-ом формате)
		mov num, 0;
		lea eax, src;               // EAX = адрес src
		mov pstr, eax;              // pstr = EAX

LabelStart1:
        // Проверка условия окончания цикла
        // while (*pstr != 0)
        mov eax, pstr;              // EAX = pstr
        xor ecx, ecx;               // ECX = 0;
        mov cl, byte ptr [eax];     // CL = *pstr, в CL символ цифры
        test cl, cl;                // проверка ECX
        je LabelEnd1;               // если ECX == 0, то переход на LabelEnd1
        // Перевод символа цифры в 10-ю цифру
        sub ecx, 30h;               // ECX = ECX - 30h
        mov digit,cl; 
// Формирование числа num
        mov eax, num;
        xor ebx, ebx;
        mov bx,02h;      //BX = 2 - основание системы счисления исходного числа
        mul bx;          // EAX = EAX * BX (EAX = num *2)
        xor ebx, ebx;
        mov bl, digit;
        add eax, ebx;    // EAX = EAX + EBX (EAX = num + digit)
        mov num, eax;
        // Смещение к следующему символу строки
        inc pstr;                   // pstr++;
        jmp LabelStart1;
    LabelEnd1:

        // Перевод числа в строку
        // (в строку запишется число в 2-ом формате)
        lea eax, res;
        add eax, 49;
        mov pstr, eax;
        mov byte ptr [eax], 0;      // *pstr = 0
    LabelStart2:
        // Проверка условия окончания цикла
        // while (num > 0)
        cmp num, 0;
        jle LabelEnd2;
        // Получение младшей цифры 2-го числа
        mov eax, num;
        xor edx, edx;          // делимое в EDX:EAX
        mov ebx, 2;            // делитель в EBX
        div ebx;               // (EDX:EAX) / EBX, частное в EAX, остаток в EDX
        mov num, eax;          // Сохранение результата деления

        // Перевод цифры в символ 2-ой цифры
        add edx,'0';
        mov digit, dl;
        // Копирование символа цифры в строку
        dec pstr;
        mov eax, pstr;
        mov byte ptr [eax], dl;     // *pstr = digit
        // Следующая цифра
        jmp LabelStart2;
LabelEnd2:
        
        pop edx;
        pop ecx;
		pop ebx;
		pop eax;
	}

	printf("Result = %s\n", pstr);
	getch();
}
Измените , плз, способ и подкорректируйте прогу. До конца жизни буду благодарен !!!!!!!)))))))

Последний раз редактировалось stas135642; 05.05.2011 в 20:52.
stas135642 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование данных atenon Microsoft Office Access 8 28.12.2011 16:47
Форматы представления данных Alkagolik Помощь студентам 0 06.02.2011 18:54
преобразование данных ShamanK Microsoft Office Excel 2 06.09.2010 17:39
Преобразование типов данных!! Dima_Dima Общие вопросы Delphi 5 01.09.2010 17:33
Преобразование типов данных !!!!!!!!!!! Dima_Dima Общие вопросы Delphi 2 01.09.2010 16:31