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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 10:55   #1
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
Вопрос не пойму правильно ли работает программа

нужно перевести строку 6-ричных цифр в строку двоичных вот код

Код:
#include <stdio.h>
#include <conio.h>
#include <memory.h>

void main(void)
{
    char src[] = "123";
    char res[30];
    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 число
        // (в строке записано число в 6-ом формате)
        mov num, 00h;         
        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
        // Перевод символа цифры в 6-ю цифру
        sub ecx, 30h;              // ECX = ECX - 30h
        mov digit,cl;              // digit = CL
        // Формирование числа num
        mov eax, num;
        xor ebx, ebx;
        mov bx,06h;               //BX = 6 - основание системы счисления исходного числа
        mul bx;                     // EAX = EAX * BX (EAX = num *6)
        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("res = %s\n", pstr);
	getch();
}

Последний раз редактировалось серг; 13.05.2010 в 11:13.
серг вне форума Ответить с цитированием
Старый 13.05.2010, 14:58   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

серг
Клавиша "Пуск" в левом нижнем углу, "Все программы" --> "стандартые" --> "калькулятор" --> "Вид инженерный" --> вводи то же число, которое передал своей программе, челкни Bin или по клавише F8 и сравнивай двоичное значение на калькуляторе с тем, что выдала твоя программа и сразу поймешь "правильно ли работает программа?"
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не правильно работает запрос ww01031977 Microsoft Office Access 12 21.04.2010 10:52
программа работает. правильно ли? getUp Общие вопросы C/C++ 10 26.03.2010 07:07
Не правильно работает маркер заполнения leric Microsoft Office Excel 2 13.02.2010 16:29
Не правильно работает программа Virus_L Помощь студентам 0 28.12.2009 22:52
Highslide не правильно работает в других браузерах Barmunk HTML и CSS 1 28.08.2009 16:40