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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 20:06   #1
Dimasik73
 
Регистрация: 11.02.2012
Сообщений: 5
По умолчанию нужно перевести прогу из си в ассеблер как это сделать?

Содержимое файла run.bat:
prog.exe>out.txt
@pause
Исходный текст программы
#include<cstdlib>
#include<stdio.h>
#include<conio.h>

usingnamespacestd;
//числовое представления состояний для использования в теле цикла
#define S0 0
#define S1 1
#define S2 2
#define S3 3
#define S4 4
#define S5 5

#defineX1 (x & 1) //сравнение с 0b00000001
#defineX2 (x & 2) //сравнение с 0b00000010
#defineX3 (x & 4) //сравнение с 0b00000100

//текстовое представление состояний для вывода
#defines0 "S0"
#define s1 "S1"
#define s2 "S2"
#define s3 "S3"
#define s4 "S4"
#define s5 "S5"

//текстовое представление возможных выводов Y
#define OUT0 "[ - ]"
#define OUT1 "[Y1,Y4 ]"
#define OUT2 "[Y2,Y4 ]"
#define OUT3 "[Y1,Y5 ]"
#define OUT4 "[Y1,Y3,Y5]"
#define OUT5 "[Y2,Y3,Y5]"


// Читаемвходнойфайл
unsigned char read(FILE *fl)
{
unsigned int x = 0;
int r = fscanf(fl,"%u",&x);//читаемсимвол
if(r == EOF) {//если конец файла - закрыть файл и завершить программу
fclose(fl);
exit(0);
};
return (unsigned char)x;
}
//Перевод числа Х в текстовое представление
char* XToStr(unsigned char x)
{
char *c = (char*)malloc(11);//максимально возможное количество символов в строке
int j = 0;//счетчик символов в выводимой строке
for(inti = 0; i<= 2; i++)//циклот 2годо 0гобита
{
if(((1<<i) & x)>0)
{//вывод еденичного Х и его номера по ASCII коду
c[j] = ' ';
j++;
c[j] = 'X';
j++;
c[j] = 49+i;
j++;
}
else
{//вывод нулевого Х
c[j] = '!';
j++;
c[j] = 'X';
j++;
c[j] = 49+i;
j++;
}
if(i < 2)
{//установка запятых если выводится 3й и 2й Х
c[j] = ',';
j++;
}
}
return c;
}
//вывод на экран строки о результатах работы программы
//выводит старое состояние, введённый Х, выводимые Y и новое состояние
void printstr(char* oldstate, char* statename, unsigned char x, char* out)
{
char *x_str;
x_str = XToStr(x);
printf("sstate = %s, X = [%s], Y = %s, STATE = %s \n",oldstate,x_str,out,statename) ;
free(x_str);//освобождение памяти для строки с Х, выделенной в функции XToStr()
}

int main(intargc, char** argv) {

FILE *f;
f = fopen("x.txt","r");//открытие файла для чтения
if(f == 0)
{
printf("не могу открыть файл '%s'","x.txt");
return 0;
}
unsigned int s = S0;
for(;//бесконечный цикл
{
unsigned char x = 0;
x = read(f); //чтениеХизфайла
switch(s)//выполнение согласно текущему состоянию s
{
case S0:
if(X2)
{// X2 - -
s = S0;
printstr(s0,s0,x,OUT0);
}else{// !X2 - Y1,Y3,Y5
s = S1;
printstr(s0,s1,x,OUT4);
}
break;
case S1:// - Y2,Y4
s = S2;
printstr(s1,s2,x,OUT2);
break;
case S2:
if(X2)
{
if(X3)
{//!X1,X2,X3 - -
s = S3;
printstr(s2,s3,x,OUT0);
}else{
if(X1)
{//X1,X2,!X3 - -
s = S3;
printstr(s2,s3,x,OUT0);
}else{//!X1,X2,!X3 - Y2,Y3,Y5
s = S5;
printstr(s2,s5,x,OUT5);
}
}
}else{//!X1,!X2,!X3 - Y1,Y4
s = S3;
printstr(s2,s3,x,OUT1);
}
break;
case S3: // - - Y1,Y5
s = S4;
printstr(s3,s4,x,OUT3);
break;
case S4: // - - Y2,Y3,Y5
s = S5;
printstr(s4,s5,x,OUT5);
break;
case S5:
if(X1)
{// X1 - -
s = S0;
printstr(s5,s0,x,OUT0);
}else{
if(X2)
{
if(X3)
{//!X1,X2,X3 - -
s = S3;
printstr(s5,s3,x,OUT0);
}else{//!X1,X2,!X3 - Y2,Y3,Y5
s = S5;
printstr(s5,s5,x,OUT5);
}
}else{//!X1,!X2,!X3 - Y1,Y4
s = S3;
printstr(s5,s3,x,OUT1);
}
}
break;
default: break;
}
}
fclose(f);
return 0;
}
Dimasik73 вне форума Ответить с цитированием
Старый 12.02.2012, 20:45   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Самый быстрый способ, который могу посоветовать - откомпилированный exe-шник пройди дизассемблером и немножко привести к нормальному виду.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 16.04.2012, 19:17   #3
programmisto1
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 11
По умолчанию

Да зачем дизассемблер! Легче найти Tasm32 и открыть скомпилированную программу.
programmisto1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести прогу с ассемблера? Artur140 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 24.10.2011 13:59
Нужно перевести прогу с Фортрана на Паскаль! Segger Помощь студентам 0 01.12.2010 07:27
Нужно сделать прогу DJon82 Фриланс 6 23.08.2010 16:00