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

Asm в Builder - C++

Восстановить пароль Регистрация
 
Aplake
6 / 6 / 1
Регистрация: 20.02.2011
Сообщений: 43
14.11.2011, 20:33     Asm в Builder #1
Делаю ассемблеровскую вставку в Builder 6;
в консоле. Проблема в 14 строке
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
int main(int argc, _TCHAR* argv[])
{
  short S, R, Q;
  S = 1;
  R = 0;
 
  _asm {
 
   test R,1; // R=1?
   jz a1
   test S,1; // S=1?
   jz a2
    //  вот в этой строчке надо что бы на экраны выводилась строка Неопределенное состояние.
   jmp exit
   a1: test S,1
   jz exit; // R=0 S=0 состояние хранение
   mov Q,1; // R=0 S=1 установка триггера
   jmp exit
   a2: mov Q,0;// R=1 S=0 сброс триггера
   exit:
   }
   cout << Q << endl;
 
   system ("PAUSE");
    return 0;
Не знаю как это сделать. Есть конечно вариант, но он безнадежно глуп :
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
int main(int argc, _TCHAR* argv[])
{
  short S, R, Q, F;
  S = 1;
  R = 0;
 
  _asm {
 
   test R,1; // R=1?
   jz a1
   test S,1; // S=1?
   jz a2
   mov F, 1  //  вот в этой строчке надо что бы на экраны выводилась строка Неопределенное состояние.
   jmp exit
   a1: test S,1
   jz exit; // R=0 S=0 состояние хранение
   mov Q,1; // R=0 S=1 установка триггера
   jmp exit
   a2: mov Q,0;// R=1 S=0 сброс триггера
   exit:
   }
   if (F == 1){
     cout << "Неопределенное состояние" << endl ;}
 
   cout << Q << endl;
   
   system ("PAUSE");
    return 0;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 20:33     Asm в Builder
Посмотрите здесь:

C++ c++ и ASM
Asm + C++ C++
C++ и ASM C++
C++ Прерывания asm
C++ C++ И ASM
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.11.2011, 23:11     Asm в Builder #2
Для __cdecl
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void) {
  const char* msg = "undefined state";
  size_t _size = sizeof(char*);
 
  _asm {
       push msg
       call puts
       add  esp, dword ptr _size
  };
  getchar();
  return 0;
}
magistr011
 Аватар для magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
15.11.2011, 14:01     Asm в Builder #3
xAtom, а как процедуру вызывать, если она даже не написана???
И msg, я так понимаю в стеке лежит... Я твой код асма непонял (((
LosAngeles
Заблокирован
15.11.2011, 15:55     Asm в Builder #4
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
int main()
{
    char str[] = "Undefined state";
    short S, R, Q;
    S = 1;
    R = 0;
    Q = 0;
 
    __asm__ (               "movw %1, %%ax\n\t"
                            "testw $1, %%ax\n\t"
                            "jz a1\n\t"
                            "movw %0, %%ax\n\t"
                            "testw $1, %%ax\n\t"
                            "jz a2\n\t"
 
                            "movl %3, %%ebx\n\t"
                            "pushl %%ebx\n\t"
 
                            "call _printf\n\t"
                            "popl %%ebx\n\t"
 
                            "jmp exit\n\t"
                            "a1:\n\t"
                            "movw %0, %%ax\n\t"
                            "testw $1, %%ax\n\t"
                            "jz exit\n\t"
                            "movw $1, %%ax\n\t"
                            "movw %%ax, %2\n\t"
                            "jmp exit\n\t"
                            "a2: xorw %%ax, %%ax\n\t"
                            "movw %%ax, %2\n\t"
                            "exit:\n\t"
                            :
                            : "r" (S), "r" (R), "r" (Q), "r" (str)
                            : );
 
 
 
 
 
    cout << Q << endl;
 
    //system ("PAUSE");
    return 0;
}
magistr011
 Аватар для magistr011
6 / 6 / 0
Регистрация: 22.10.2011
Сообщений: 164
15.11.2011, 18:39     Asm в Builder #5
Цитата Сообщение от LosAngeles Посмотреть сообщение
call _printf
тоже вызываем процедуру, её нет...
на экран судя по всему выведем 0, и программа закроется...
LosAngeles
Заблокирован
15.11.2011, 18:51     Asm в Builder #6
всё есть, всё выводится. Если изменить S разумеется

Добавлено через 1 минуту
а так то да, вывод моего листинга ноль, потому что в ветку с printf управление вобще не передаётся
Yandex
Объявления
15.11.2011, 18:51     Asm в Builder
Ответ Создать тему
Опции темы

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