Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
serhy_pyton
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 3
1

Создание GUI посредством xlib на assembler, UNIX, AT&T

06.02.2017, 23:31. Просмотров 918. Ответов 2
Метки g, gui, unix, xlib (Все метки)

Здравствуйте, в процессе освоения ASM на Ubuntu неизбежно столкнулся с "изобилием" документации для связки assembler-Linux, да еще и в придачу, как то бывает, выбрал не Nasm, а AT&T. Все бы ничего, НО как только возникла необходимость в создании примитивного визуального окна (обязательно assembler, да-да, лабы они такие) не смог найти ни строчки по этой теме, прошу, помогите кто чем, хоть примерчиком "hello world"
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2017, 23:31
Ответы с готовыми решениями:

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume...

Работа с сайтом посредством GUI приложения
Доброго времени суток. Не знаю где разместить тему, но т.к. ипользовать буду С++ и Winapi разместил...

OpenGL & Unix
вот дёрнуло меня писать дипломку с исплозованием OpenGL писать буду на С++ , мало того, под...

error '80020009' Îøèáêà. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error...

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Мультимедиа аудиоконтроллер ...

2
ФедосеевПавел
Модератор
5143 / 2729 / 1095
Регистрация: 01.02.2015
Сообщений: 8,858
Записей в блоге: 1
07.02.2017, 00:12 2
Когда пробовал асм под Windows с удивлением увидел, что просто портитую вызовы WinAPI с языка C на ассемблер.
Полагаю, что для Ubuntu та же картина.
По ссылке http://rus-linux.net/MyLDP/BOOKS/Linux-tools/GUI_01.html нашёл HelloWord для xlib на c:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <X11/Xlib.h>
 
extern int errno;
 
int main( void ) {
   Display *d;
   Window w;
   XEvent e;
   char *msg = "Hello, World!";
   int s;
 
   if( ( d = XOpenDisplay( getenv("DISPLAY" ) ) ) == NULL ) {  // Соединиться с X сервером,
      printf( "Can't connect X server: %s\n", strerror( errno ) );
      exit( 1 );
   }
   s = DefaultScreen( d );
   w = XCreateSimpleWindow( d, RootWindow( d, s ),     // Создать окно
                            10, 10, 200, 200, 1,
                            BlackPixel( d, s ), WhitePixel( d, s ) );
   XSelectInput( d, w, ExposureMask | KeyPressMask );  // На какие события будем реагировать?
   XMapWindow( d, w );                                 // Вывести окно на экран
   while( 1 ) {                                        // Бесконечный цикл обработки событий
      XNextEvent( d, &e );
      if( e.type == Expose ) {                         // Перерисовать окно
         XFillRectangle( d, w, DefaultGC( d, s ), 20, 20, 10, 10 );
         XDrawString( d, w, DefaultGC( d, s ), 50, 50, msg, strlen( msg ) );
      }
      if( e.type == KeyPress )                         // При нажатии кнопки - выход
         break;
   }
   XCloseDisplay( d );                                 // Закрыть соединение с X сервером
   return 0;
}
Эту последовательность и нужно воспроизвести.
1
serhy_pyton
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 3
07.02.2017, 01:04  [ТС] 3
Спасибо, перевел в ассемблер этот код, а там уже по ключевым словам поймал у интернете такую ссылочку http://stakanov.narod.ru/asm_unix_faq.html там внизу есть пример
компилировать так gcc hello-gui.s -o hello-gui -lX11
Assembler
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
# as hello-gui.s -o hello-gui.o
# gcc -Wl,-s hello-gui.o -lX11 -L/usr/X11R6/lib -o hello-gui
# ./hello-gui
  .data
prDisplay:  .long   0 # указатель на структуру Display
nScreenNum: .long   0   # номер экрана
nWnd:   .long   0   # ID окна
rEvent: .space  96,0    # буфер для получения события (сообщения)
  # вообщето все намного сложней 
  # но длинное слово (32бит)со смещением 0
  # обычно содержит тип события
prGC:   .long   0
msgHello:   .asciz "Hello, world!"  # какое-то непереводимое ругательство
  msgHelloLen=.-msgHello-1
 
  .text
  .global main  # без libc мы обойтись не сможем!
main:
  # устанавлиываем связь с сервером
  pushl $0
  call  XOpenDisplay
  addl  $4,%esp
  movl  %eax,prDisplay  # теперь prDisplay содержит адресс структуры
    # или равен 0 в случае ошибки
    # получаем номер основного экрана
  pushl %eax
  call  XDefaultScreen
  addl  $4,%esp
  movl  %eax,nScreenNum
  # создаем окно
  pushl nScreenNum
  pushl prDisplay
  call  XWhitePixel
  addl  $8,%esp
  pushl %eax    # белый пиксел )
  pushl nScreenNum
  pushl prDisplay
  call  XBlackPixel
  addl  $8,%esp
  pushl %eax    # черный пиксел )
  pushl $5  # толщина рамки
  pushl $100    # высота окна
  pushl $100    # ширина окна
  pushl $0  # x
  pushl $0  # y
  pushl nScreenNum  
  pushl prDisplay   
  call  XRootWindow
  addl  $8,%esp
  pushl %eax    # окно родитель
  pushl prDisplay   # дисплей
  call  XCreateSimpleWindow
  addl  $36,%esp
  movl  %eax,nWnd   # номер окна
  # устанавливаем события обрабатываемые прграммой
  pushl $(1 | (1 << 15)) # это у нас ExposureMask OR KeyPressMask
  pushl nWnd
  pushl prDisplay
  call  XSelectInput
  addl  $12,%esp
  # показываем окно (проще некуда ;-) )
  pushl nWnd
  pushl prDisplay
  call  XMapWindow
  addl  $8,%esp
  # самое главное
  # цикл получения и обработки сообщений
wloop:
  pushl $rEvent # адрес буфера
  pushl prDisplay   # дисплей
  call  XNextEvent  
  addl  $8,%esp
  movl  rEvent,%eax # !!! так делать не стоит
    # но здесь сойдет
  cmpl  $12,%eax
  je    _Expose
  cmpl  $2,%eax
  je    _KeyPress
  jmp   wloop
_Expose:
  # запрос на перерисовку
  # получаем графический контекст
  pushl $0
  pushl $0
  pushl nWnd
  pushl prDisplay
  call  XCreateGC
  addl  $16,%esp
  movl  %eax,prGC
  # а кто у на сегодня "черный"?
  pushl $0
  pushl prDisplay
  call  XBlackPixel
  addl  $8,%esp
  # устанвливаем цвет которым рисуем
  pushl %eax
  pushl prGC
  pushl prDisplay
  call  XSetForeground
  addl  $12,%esp
  # рисуем текст
  pushl $msgHelloLen
  pushl $msgHello
  pushl $50
  pushl $10
  pushl prGC
  pushl nWnd
  pushl prDisplay
  call  XDrawString
  addl  $28,%esp
  # освобождаем графический контекст
  pushl prGC
  pushl prDisplay
  call  XFreeGC
  addl  $8,%esp
  jmp   wloop
_KeyPress:
  # кто-то нажал на кнопку
  pushl prDisplay
  call  XCloseDisplay
  call  exit
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2017, 01:04

Перевод Unix date & time
Здравствуйте. Читаю данные из web и не могу получить правильное время. На сайте читается как...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.