Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 08.12.2015
Сообщений: 70
FASM

В окне отобразить два однострочных текстовых редактора и кнопку «Обмен»

08.05.2020, 11:57. Показов 1637. Ответов 1

Студворк — интернет-сервис помощи студентам
Вот условие задачи: В окне отобразить два однострочных текстовых редактора и кнопку «Обмен». При нажатии кнопки происходит обмен текстовых строк в редакторах и выводится соответствующее сообщение. Решил вначале написать программу попроще, без текстовых редакторов, а просто с заданными строками, которая просто меняет их местами, но даже тут у меня возникла проблема: строки не обмениваются. Не могу понять что не так в моём коде и как мне решить данную задачу. Народ, пожалуйста, пролейте свет на данную проблему, заранее благодарю! Код ниже:
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
format PE GUI 5.0
 include 'path'
 include 'path'
 entry start
 
 section '.data' data readable writeable
 Caption db 'Сообщение',0  ; определяем ASCIIZ – строку содержащую сообщение и спецификацию управления ; форматом вывода для функции wsprintf  8.
 forma db '%d',0 ; определяем 30 байтовый буфер 9.
 string db 30 DUP(?)
 _class  db 'MY_Class',0
 _title  db 'Simple',0
 _edit   db 'edit',0
 _button db 'button',0
 _button_title   db 'Обмен',0
 _error_window   db 'Ошибка создания окна',0
 _error_num      db 'Число не задано',0
 _listbox db "listbox",0
 _listbox1 db "listbox",0
 _listbox_title   db 'Список №1',0
 _listbox1_title   db 'Список№2',0
; _szListBox db "LISTBOX1",0
 
 
 _str1 db  "1",0
 _str2 db  "2",0
 _str3 db  "3",0
 _str4 db  "4",0
 _str5 db  "5",0
 
 _str200 db  "200",0
 _str201 db  "201",0
 _str202 db  "202",0
 _str203 db  "203",0
 _str204 db  "204",0
 _str205 db  "205",0
 
  wc WNDCLASS 0,WindowProc,0,0,0,0,0,COLOR_BTNFACE+1,0,_class
  msg  MSG
  IDC_LIST = 3000
  IDC_LIST1 = 3003
  IDC_EDIT = 1000
  IDC_BUTTON = 1001
 
 
  hList        dd    ?
  hList1        dd    ?
  hList2       dd    0
  hEdit        dd    ?
  flag         dd    ?
  chislo       dd    ?
  buffer       rd    20
  result1 dd          5
  result2 dd          205
  section '.code' code readable executable
  start:
 
  ;Функция GetModuleHandle, вернул дескриптор исп. модуля в eax
  invoke  GetModuleHandle,0
  ;заполняю им поле структуры WNDCLASS (wc.hInstance)
  mov     [wc.hInstance],eax
 ;функцией LoadIcon загружаю иконку будущего окна
  invoke  LoadIcon,0,IDI_APPLICATION
  ;заполняю ею поле структуры WNDCLASS (wc.hIcon)
  mov     [wc.hIcon],eax
  ;функцией  LoadCursor загружаю курсор будущего окна
  invoke  LoadCursor,0,IDC_ARROW
  ;заполняю им поле структуры WNDCLASS (wc.hCursor)
  mov     [wc.hCursor],eax
  ;функцией  RegisterClass регитсрирую класс окна,
  ;параметр wc указатель на структуру WNDCLASS описания окна
  invoke  RegisterClass,wc
  ; RegisterClass  должна вернуть в eax не 0, проверяю
  test    eax,eax
  jz      error
  ;функцией  CreateWindowEx создаю окно
  invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,0,0,576,512,0,0,[wc.hInstance],0
  ; CreateWindowEx должна вернуть в eax не 0, проверяю
  test    eax,eax
  jz      error
  ;----------------------------------------------------------------------------------
   ;цикл обработки очереди сообщений
msg_loop:
   ;функцией  GetMessage получаю сообщения
   invoke  GetMessage,msg,0,0,0
   ;проверяю если eax=0 значит закрыл окно
   cmp     eax,0
   je end_loop
   ;функцией TranslateMessage  проверяю сообщения от клавиатуры
   invoke  TranslateMessage,msg
   ;функция DispatchMessage передаёт сообщения
   ;процедуру обработки сообщений (WindowProc)
   invoke  DispatchMessage,msg
jmp     msg_loop
 
  error:
  invoke  MessageBox,0,_error_window,0,MB_ICONERROR+MB_OK
 
  end_loop:
  invoke  ExitProcess,[msg.wParam]
 
;-----------------------------------------------------------------------------
  ;собственно сама процедура обработки сообщений
  ;WindowProc вызывается каждый раз
  ;при получении окном нового сообщения (WM_CREATE,WM_COMMAND и т.д.)
  ;и передаче его через DispatchMessage
 
 
 proc WindowProc hwnd,wmsg,wparam,lparam
    push    ebx esi edi
    ; проверяю сообщение WM_CREATE
    ;которое посылается окну после его создания
    cmp     [wmsg],WM_CREATE
    je      wmcreate
    ; проверяю сообщение, WM_COMMAND
    ; которое посылается окну после нажатия на кнопку
    cmp     [wmsg],WM_COMMAND
    je      wmcommand
    ; проверяю сообщение, WM_DESTROY
    ; которое посылается окну перед его удалением
    cmp     [wmsg],WM_DESTROY
    je      wmdestroy
 defwndproc:
    ; вызываю DefWindowProc если не было сообщений
    ; WM_CREATE, WM_COMMAND, WM_DESTROY
    invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
    jmp     retu
 ;обработчик сообщения  WM_CREATE
 wmcreate:
    invoke CreateWindowEx,0,_listbox,_listbox_title,WS_VISIBLE+WS_VSCROLL+LBS_HASSTRINGS+LBS_NOINTEGRALHEIGHT+LBS_DISABLENOSCROLL+WS_CHILDWINDOW,20,40,250,350,[hwnd],IDC_LIST,[wc.hInstance],0
    mov [hList],eax
    invoke SendMessage,[hList],LB_ADDSTRING,0,_str1
    invoke SendMessage,[hList],LB_ADDSTRING,0,_str2
    invoke SendMessage,[hList],LB_ADDSTRING,0,_str3
    invoke SendMessage,[hList],LB_ADDSTRING,0,_str4
    invoke SendMessage,[hList],LB_ADDSTRING,0,_str5
   ; invoke  SetFocus,[hList]
 
    invoke CreateWindowEx,0,_listbox1,_listbox1_title,WS_VISIBLE+WS_VSCROLL+LBS_HASSTRINGS+LBS_NOINTEGRALHEIGHT+LBS_DISABLENOSCROLL+WS_CHILDWINDOW,290,40,250,350,[hwnd],IDC_LIST1,[wc.hInstance],0
    mov [hList1],eax
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str200
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str201
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str202
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str203
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str204
    invoke SendMessage,[hList1],LB_ADDSTRING,0,_str205
 
    ;создаю кнопку button
    invoke  CreateWindowEx,0,_button,_button_title,WS_VISIBLE+WS_CHILDWINDOW+BS_DEFPUSHBUTTON,230,400,100,20,[hwnd], IDC_BUTTON,[wc.hInstance],0
    jmp     finish
 wmcommand:
 
   mov eax,[wparam]
   cmp eax,IDC_BUTTON ;проверяю нажата ли кнопка
   je m1
   mov eax,[lparam]
   mov  [hList2],eax;если кнопка не нажата, то в hList2 запоминаю lparam
   jmp exit
 
 m1:
   cmp [hList2],0  ;проверяю равен ли hList2 нулю.
   je finish
   mov eax,[hList]
   cmp [hList2],eax ;проверяю равен ли hList2 дескриптору первого listbox.
   jne m2
  ; Если равен, то до добавляю число в первый listbox.
   inc[result1]
   invoke wsprintf, string, forma, [result1]
   invoke SendMessage,[hList],LB_ADDSTRING,0,string
   jmp exit
 
 m2:
   ;Иначе добавляю число во второй listbox
   inc[result2]
   invoke wsprintf, string, forma, [result2]
   invoke SendMessage,[hList1],LB_ADDSTRING,0,string
   jmp exit
;-----------------------------------------------------
   ;закрываю приложение
 wmdestroy:
   invoke  PostQuitMessage,0
 exit:
 finish:
   xor     eax,eax
 retu:
   pop     edi esi ebx
   ret
 endp
 section '.idata' import data readable writeable
 
 library kernel32,'KERNEL32.DLL', user32,'USER32.DLL'
 
 include 'path'
 include 'path'
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2020, 11:57
Ответы с готовыми решениями:

Как отобразить информацию (введенную в форму), в новом окне и во всплывающем окне?
Подскажите пожалуйста, у меня есть форма в нее делаю запись, как сделать так, что бы после введения данных они отобразились в 2 ух окнах...

Написание простого консольного редактора текстовых файлов
Нужно написаить простой консольный редактор текстовых файлов. В каую сторону копать? Желательно кросплатформенный. Ну или под Windows.

Сравните между собой три текстовых редактора: блокнот, WordPad, MS Word
Сравните между собой три текстовых редактора: блокнот, WordPad, MS Word. В чем отличия между ними? В каком формате сохраняет текст каждый...

1
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
08.07.2020, 12:16
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

При нажатии кнопки происходит обмен текстовых строк в редакторах
Можно просто поменять окна местами
Вложения
Тип файла: 7z 1.7z (1.4 Кб, 3 просмотров)
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.07.2020, 12:16
Помогаю со студенческими работами здесь

Обмен содержимым двух текстовых файлов
сделал программу по копипасту содержимого второго файла в конец первого,а нужно было сделать обмен,не понимаю как сделать

Составить и набрать в окне редактора программу, рисующую на экране рисунок
Составить и набрать в окне редактора программу: • Устанавливающую графический режим; • Выводящую на экран рамку с текстом (цвет фона...

Можно ли в одном окне sql редактора создать две таблицы?
Млжно ли в одном окне sql редактора создать две таблицы? Если да, то подскажите синтаксис.

Отобразить svg в окне
Есть форма, на ней элемент Image, как в нем отобразить SVG файл(он лежит в папке Debug).

Отобразить имена всех текстовых файлов из папки в ListBox
Доброго времени суток! Нужно вывести в listbox имена всех txt-файлов, находящихся в папке с рабочей книгой. Как это сделать?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru