Форум программистов, компьютерный форум CyberForum.ru

Разбор строк ассемблерной программы - C++

Восстановить пароль Регистрация
 
no SOPA
0 / 0 / 1
Регистрация: 20.02.2012
Сообщений: 41
23.06.2013, 21:22     Разбор строк ассемблерной программы #1
Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
 
int main()
 {
 char buffer[256];
 char filename[20];
 printf("Input file name:");
 scanf("%s",filename);
 char comment[50] = "";
 char metka[50] = "";
 char oprd[10] = "";
 char oprt[10] = "";
 int count = 0;
 int i = 0;
 char *comm,*met,*opt,*opd; 
 FILE* file;    
 file = fopen(filename,"r");
/* Проверяем открылся ли файл*/
 if (file == NULL)
  {
  printf("Error: File not read");
  }
/* Чтение файла построчно */
 while (fgets(buffer,256,file))
  {
  count++;
  comm = met = opd = opt = buffer;
  printf("Stroka %i: %s",count,buffer);
/* Вывод комментария */
  while (*comm != '\n')
   {
   if (*comm == '/')
    {
    comm--;
    for (comm++;*comm != '\n';++comm)
     {
     comment[i] = *comm;
     *comm = '\0';
     i++;
     }
    i = 0;
    break;
    }
   comm++;
   }
/* Вывод метки */
  while (*met != '\n')
   {
   if (*met == '-')
    {
    for (met = buffer;*met != '-';++met)
     {
     if (*met == ';')
      {
      for (int j=0;j<sizeof(metka);j++)
       {
       metka[j] = '\0';
       }
      break;
      }
     metka[i] = *met;
     *met = '\0';
     i++;
     }
    i = 0;
    break;
    }
   met++;
   }
/* Вывод оператора */
  while (*opt != '\n')
   {
   if (isalpha(*opt))
    {
    while (isalpha(*opt))
     {
     oprt[i] = *opt;
     i++;
     opt++;
     }
    i=0;
    break;
    }
   opt++;
   }
/* Вывод операнда */
  opd = opt;
  while (*opd != '\n')
   {
   if (*opd != '\t' && *opd != ' ')
    {
    while (*opd != '\t' && *opd != ' ' && *opd != '\n')
     {
     oprd[i] = *opd;
     i++;
     opd++;
     }
    i=0;
    break;
    }
   opd++;
   }
  printf("Razbor stroki:  Metka:%s, Operator:%s, Operand:%s, Comment:%s \n",metka,oprt,oprd,comment+1);
  for (int j=0;j<sizeof(comment);j++)
   {
   comment[j] = '\0';
   }
  for (int j=0;j<sizeof(metka);j++)
   {
   metka[j] = '\0';
   }
  for (int j=0;j<sizeof(oprt);j++)
   {
   oprt[j] = '\0';
   }
  for (int j=0;j<sizeof(oprd);j++)
   {
   oprd[j] = '\0';
   }
  printf("\n");
  }
 getch();
 }
Вот ассемблерная программа для разбора:
Assembler
1
2
3
4
    START 1100
metka LDA 12      /comment1 
      LDB Z      /comment2
      END metka
Помогите пожалуйста исправить вывод метки, чтобы он распознавал её по расположению с первой позиции строки, т.е. чтобы программа понимала, что слово "metka" или любое другое, которое используется для метки, это и есть, собственно, метка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 21:22     Разбор строк ассемблерной программы
Посмотрите здесь:

Разбор кода программы C++
C++ разбор строк вида параметр=значение
Разбор программы C++
разбор программы C++
C++ разбор программы
C++ Разбор алгоритма программы
C++ Разбор кода программы
Тождество (разбор строк) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru