Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 15.10.2019
Сообщений: 1
1
MASM

Ошибка консольного ввода-вывода строки

15.10.2019, 18:45. Показов 318. Ответов 0
Метки нет (Все метки)

Программа должна обеспечивать ввод данных (описанных в табл.) с консоли и вывод их на консоль.
Есть небольшая заготовка программы. Так как я только начал учить язык , не сильно ещё понимаю что сам пишу(.Также некоторые комментарии лишние.



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
.486                                                    ;используется набор команд i80486
.model flat, stdcall                                    ;используемая модель памяти FLAT
option casemap: none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include   \masm32\include\msvcrt.inc                    ;для crt_atoi
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib                       ;для crt_atoi
.data                                                   ;сегмент данных
titleStr BYTE "Данные",0          ;заголовок консоли
MsgBoxTitle BYTE "Заголовок MessageBox",0              ;строка заголовка
MsgBoxText  BYTE "Консоль завершила работу",0             ;строка вывода
buf DWORD 30 dup(?)                                     ;буфер для чисел, вводимых с клавиатуры
buf1 BYTE "Введите свои данные",
0,0Ah,0Dh                                   ;буфер1 для выводимой строки
buf2 BYTE "Введите фамилию",0                     ;буфер2 для выводимой строки
buf3 BYTE "Введите имя",0                          ;буфер3 для выводимой строки
buf4 BYTE "Введите отчество",0                              ;буфер4 для выводимой строки
buf5 BYTE "Введите название группы",0                       ;буфер5 для выводимой строки
buf6 BYTE "Введите наименование направления обучения",0   ;буфер6 для выводимой строки
format db " %d",0                                       ;строка спецификации формата
outHandle  DWORD ?                                      ;ячейка памяти для хэндла вывода
inHandle  DWORD ?                                       ;ячейка памяти для хэндла ввода
namberW    DWORD ?                                      ;количество выводимых символов
namberR    DWORD ?                                      ;количество вводимых символов
F   SDWORD ?                                            ;ячейка для хранения фамилия
N   SDWORD ?                                            ;ячейка для хранения имя
O   SDWORD ?                                                                  ;ячейка для хранения отчество
NG  SDWORD ?                                                                  ;ячейка для хранения названия группы
NO  SDWORD ?                                                                  ;ячейка для хранения наименования направления обучения
.code 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
start:
invoke AllocConsole
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR titleStr,                                          ;ADDR- определение адреса titleStr получателя
ADDR titleStr                                           ;ADDR- определение адреса titleStr источника
invoke SetConsoleTitle,                                 ;invoke - вызов функции API SetConsoleTitle
ADDR titleStr ;                                         ; ADDR- определение адреса titleStr
invoke GetStdHandle,                                    ;invoke - вызов функции API GetStdHandle 
STD_INPUT_HANDLE                                        ;получаем хэндл ввода
MOV inHandle, EAX                                       ;сохраняе хэндл вывода в ячейке inHandle
invoke GetStdHandle,                                    ;invoke - вызов функции API GetStdHandle 
STD_OUTPUT_HANDLE                                       ;получаем хэндл вывода
MOV outHandle, EAX                                      ;сохраняе хэндл вывода в ячейке outHandle
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf1,                                              ;ADDR- определение адреса buf1 получателя
ADDR buf1                                               ;ADDR- определение адреса buf1 источника
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf2,                                              ;ADDR- определение адреса buf2 получателя
ADDR buf2                                               ;ADDR- определение адреса buf2 источника
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf3,                                              ;ADDR- определение адреса buf2 получателя
ADDR buf3                                               ;ADDR- определение адреса buf2 источника
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf4,                                              ;ADDR- определение адреса buf4 получателя
ADDR buf4                                               ;ADDR- определение адреса buf4 источника
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf5,                                              ;ADDR- определение адреса buf2 получателя
ADDR buf5                                               ;ADDR- определение адреса buf2 источника
invoke CharToOem,                                       ;invoke - вызов функции API CharToOem
ADDR buf6,                                              ;ADDR- определение адреса buf2 получателя
ADDR buf6                                               ;ADDR- определение адреса buf2 источника
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf1,                                              ;ADDR- определение адреса buf1 строки вывода
SIZEOF buf1,                                            ;SIZEOF находим размер buf1
ADDR namberW,                                           ;ячейка для количества выведенных символов
NULL                                                    ;не используется, указываем NULL или "0"
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf2,                                              ;ADDR- определение адреса buf2 строки вывода
SIZEOF buf2,                                            ;SIZEOF находим размер buf2
ADDR namberW,                                           ;определение адреса 
NULL
invoke ReadConsole,                                     ;invoke - вызов функции API ReadConsole
inHandle,                                               ;хэндл ввода
ADDR buf,                                               ;ADDR – определение адреса buf
SIZEOF buf,                                             ;SIZEOF – определение размера buf 
ADDR namberR,                                           ;определение адреса namberR
NULL
invoke crt_atoi,                                        ;invoke - вызов функции crt_atoi
addr buf                                                ;ADDR – определение адреса buf
MOV F,EAX                                               ;X=EAX, в EAX символы введенного числа
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf3,                                              ;ADDR- определение адреса buf2 строки вывода
SIZEOF buf3,                                            ;SIZEOF находим размер buf2
ADDR namberW,                                           ;определение адреса 
NULL
invoke ReadConsole,                                     ;invoke - вызов функции API ReadConsole
inHandle,                                               ;хэндл ввода
ADDR buf,                                               ;определение адреса buf
SIZEOF buf,                                             ;определение размера buf 
ADDR namberR,                                           ;определение адреса namberR
NULL
invoke crt_atoi,                                        ;invoke - вызов функции crt_atoi
addr buf                                                ;ADDR – определение адреса buf
;MOV N,EAX                                              ;Y=EAX, в EAX символы введенного числа
SUB EAX,N
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf4,                                              ;ADDR- определение адреса buf2 строки вывода
SIZEOF buf4,                                            ;SIZEOF находим размер buf2
ADDR namberW,                                           ;определение адреса 
NULL
invoke ReadConsole,                                     ;invoke - вызов функции API ReadConsole
inHandle,                                               ;хэндл ввода
ADDR buf,                                               ;определение адреса buf
SIZEOF buf,                                             ;определение размера buf 
ADDR namberR,                                           ;определение адреса namberR
NULL
invoke crt_atoi,                                        ;invoke - вызов функции crt_atoi
addr buf                                                ;ADDR – определение адреса buf
;MOV O,EAX
SUB EAX,O                                               ;Y=EAX, в EAX символы введенного числа
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf5,                                              ;ADDR- определение адреса buf2 строки вывода
SIZEOF buf5,                                            ;SIZEOF находим размер buf2
ADDR namberW,                                           ;определение адреса 
NULL
invoke ReadConsole,                                     ;invoke - вызов функции API ReadConsole
inHandle,                                               ;хэндл ввода
ADDR buf,                                               ;определение адреса buf
SIZEOF buf,                                             ;определение размера buf 
ADDR namberR,                                           ;определение адреса namberR
NULL
invoke crt_atoi,                                        ;invoke - вызов функции crt_atoi
addr buf                                                ;ADDR – определение адреса buf
;MOV NG,EAX
SUB EAX,NG                                              ;Y=EAX, в EAX символы введенного числа
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf6,                                              ;ADDR- определение адреса buf2 строки вывода
SIZEOF buf6,                                            ;SIZEOF находим размер buf2
ADDR namberW,                                           ;определение адреса 
NULL
invoke ReadConsole,                                     ;invoke - вызов функции API ReadConsole
inHandle,                                               ;хэндл ввода
ADDR buf,                                               ;определение адреса buf
SIZEOF buf,                                             ;определение размера buf 
ADDR namberR,                                           ;определение адреса namberR
NULL
invoke crt_atoi,                                        ;invoke - вызов функции crt_atoi
addr buf                                                ;ADDR – определение адреса buf
;MOV NO,EAX
SUB EAX,NO                                              ;Y=EAX, в EAX символы введенного числа
invoke WriteConsoleA,                                   ;invoke - вызов функции API WriteConsoleA
outHandle,                                              ;хэндл вывода
ADDR buf,                                               ;ADDR- определение адреса buf строки вывода
SIZEOF buf,                                             ;SIZEOF находим размер buf
ADDR namberW,                                           ;ADDR – определение адреса namberW
NULL
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;чтобы консоль не закрылась, вызываем MessageBox
invoke MessageBox, 0,                                   ;invoke - вызов функции API MessageBox
ADDR MsgBoxText,                                        ;ADDR - определение адреса MsgBoxText
ADDR MsgBoxTitle,                                       ;ADDR - определение адреса MsgBoxTitle
MB_OK                                                   ;кнопка "OK"
invoke ExitProcess, 0                                   ;invoke- вызов функции завершения процесса
end start
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Ошибка консольного ввода-вывода строки  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2019, 18:45
Ответы с готовыми решениями:

функции для консольного ввода-вывода
Зачем в CLI сделали функции для консольного ввода-вывода Console::WriteLine(), Console::Read()...

c++ unix перенаправление консольного ввода\вывода
Всем доброго времени суток. Сабж. Нужно из моего приложения запустить другое и получать все...

Использование файлового ввода-вывода вместо консольного
Как сделать так, чтобы входные файлы вводились из текстового документа, а выходные сохранялись в...

Потоки ввода/вывода/ошибок при запуске консольного 7z
День добрый всем! Давно я тут не появлялся :) ... При запуске консольного 7z, он выводит...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2019, 18:45

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как реализовать локализацию консольного ввода/вывода для заданного языка?
Здравствуйте, подскажите пожалуйста как добавить украинский язык в с++ в dev c++? То что я читала...

Запуск стороннего консольного приложения и доступ к его потокам ввода/вывода
Здравствуйте! Есть java прилажение, работающее в консоли (сервер Minecraft'а). Я хочу запустить его...

Как реализовать локализацию консольного ввода/вывода? (вывод в консоль на заданном языке)
Ребят, а можно ли сделать язык программы не русской, а например белоруской? Белорусский #include...

В консольном арифметическом калькуляторе вместо консольного ввода-вывода реализовать работу с файлом
В консольном арифметическом калькуляторе вместо консольного ввода-вывода реализовать работу с...


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

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

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