Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler Выполнить умножение на 32 и деление на 8 арифметическими командами и командами сдвига https://www.cyberforum.ru/ asm-beginners/ thread2513499.html
Помогите с лабой пожалуйста. При выполнении лабораторной используется программа - emu8086
Assembler Необходимо пояснить asm вставку
Мне помогли сделать лабу. В ней используются ассемблерные вставки. Я знаю какую задачу они выполняют, но хотелось бы понять код. На вход идет n- число строк, m-число столбцов, matrix - сама матрица....
Передать параметры через стек и сделать процедуру ближней Assembler
Есть программа поиска в массиве большего числа. Тип процедуры дальний, передача данных через регистры. Нужно сделать ближнюю через стек. Подскажите пожалуйста. stseg segment para stack ...
Assembler Конфликт размеров операндов Выводит ошибку: конфликт размеров операндов. Я понимаю, почему она возникает, но как исправить ее я не знаю. А вообще решала задачу: Дано число в двоичном коде поменять местами третий бит с пятым.... https://www.cyberforum.ru/ asm-beginners/ thread2512954.html
Assembler Вывод массива на экран (Код работает ,но не выводит) https://www.cyberforum.ru/ asm-beginners/ thread2512765.html
Здравствуйте! Подскажите, пожалуйста, почему не выводит массив? .model small .STACK 100h data segment ecsc db 256 dup(27) ends data assume cs:code,ds:data code segment start: mov ax,data
Десятичная система счисления Assembler
Здравствуйте Вопрос такой: почему результат выводится в десятичном виде? Хоть я считаю числа двоичные?
Assembler Упорядочить все числа в файле по возрастанию
Доброго времени суток. Задача: есть код, который в теории должен копировать строку из файла, сортировать числа в ней и записывать в файл. К сожалению при чтении из файла считываются символы, а не...
Assembler Неверный ответ при делении При делении(не важно какие значения х) y = 1 вот код: data segment x dw -50 y dw ? ends stack segment dw 128 dup(0) ends https://www.cyberforum.ru/ asm-beginners/ thread2512642.html
Assembler Вычислить выражение по формуле https://www.cyberforum.ru/ asm-beginners/ thread2512493.html
Помогите,пожалуйста,используя текстовый редактор, создать и отредактировать исходный модуль программы Prog_4.asm, которая вычисляет значение Х в соответствии с заданием. Номер функции и значения...
Assembler Убрать пробелы из строки, если их больше одного подряд Задание звучит так: В заданной строке с нулевым завершителем убрать пробелы, если их больше одного подряд. Определить количество символов в новой строке. Вот мой код: .486 .model flat, stdcall... https://www.cyberforum.ru/ asm-beginners/ thread2512440.html
0 / 0 / 0
Регистрация: 15.10.2019
Сообщений: 1
0
MASM

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

15.10.2019, 18:45. Показов 305. Ответов 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.