Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
397 / 49 / 3
Регистрация: 10.03.2013
Сообщений: 328

Ввод-ввывод

18.10.2015, 23:20. Показов 1618. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане! Заранее извиняюсь за показавшуюся наглость с моей стороны, но очень-очень-очень нужна практическая помощь!
Изучаю ассемблер (MASM) в универе, и так получилось, что у нас очень сокращенная программа, лабораторные опережают лекции, дома учу по немногу, но к лабораторным не совсем успеваю. Сейчас тема лабы - консольный ввод-вывод. Задание в лабе поставлено следующим образом: "Выполнить согласование. Откорректируйте Фрагмент 2, чтобы вводной буфер Фрагмента 4 сразу использовался как выводной буфер во фрагменте 2. Кроме того, при вводе функция ReadFile (во фрагменте 4) сосчитает количество фактически введенных смволов и сохранит его в назначенной переменной. Измените Фрагмент 2 так, чтобы это число сразу правильно подставлялось как параметр в вызов WriteFile. Тогда эхо-вывод введенного текста произойдет без ошибок."

А вот и сам код:
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
include \masm32\include\masm32rt.inc
comment * ===========================
Шаблон минимальной учебной программы
* ===================================
  .data
  
        ZapisanoByte dd 0    ; сколько байт фактически выведено                       ФРАГМЕНТ 1 
        AnyString db "Строка для вывода.",0 
        DlinaStroki  dd  18
        PotokStdOut  dd ?   ; Для записи манипулятора Стд Потока Вывода
        InputBuffer db 25 dup (0)  ; вводной буфер                                    ФРАГМЕНТ 3
        bLen dd 23 ; длина буфера ввода, нужна при вводе
        ProchitanoByte dd 0  ; сколько байт фактически было введено
        PotokStdIn dd ?    ; для записи манипулятора Стд Потока Ввода
 
  
  .code
  
  ; ФРАГМЕНТ  4
        invoke GetStdHandle,STD_INPUT_HANDLE
        mov PotokStdIn, eax   ; запросили у Windows манипулятор  стд потока ввода
 
      ; Задать  свойства потока ввода
        invoke SetConsoleMode,PotokStdIn,\ 
                    ENABLE_LINE_INPUT or \  ; закончить по Enter
                    ENABLE_ECHO_INPUT or \   ; выводить вводимое (ввод с эхом)
                    ENABLE_PROCESSED_INPUT   ; обрабатывать строчные символы CR,LF,BS и Сtrl-C
 
        invoke ReadFile, PotokStdIn, ADDR InputBuffer, bLen, ADDR ProchitanoByte, NULL
 
      ;Запросить у Windows манипулятор выводного потока                                ФРАГМЕНТ 2
      invoke GetStdHandle,STD_OUTPUT_HANDLE ; манипулятор возвращен в еах, ...
      mov PotokStdOut, eax  ; ... и переписан в переменную PotokStdOut
  
      invoke WriteFile, PotokStdOut, ADDR AnyString,  DlinaStroki, ADDR ZapisanoByte, NULL
 
start: 
 
;ТОЧКА А
      inkey
      invoke ExitProcess,0  ; выход в Windows
      end start
Помогите, поалуйста, сделать необходимые коррективы! Буду очень признателен и параллельно попытаюсь вникнуть и ускорить изучение ассемблера!

Добавлено через 7 минут
Как то код не правильно влез, но в целом вроде все правильно записано.

Добавлено через 9 часов 41 минуту
Чего греха таить, залез в "подсказки" к одногруппнику, увидел код и всё стало на свои места. Выглядит всё это следующим образом:
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
include \masm32\include\masm32rt.inc
comment * ===========================
Шаблон минимальной учебной программы
* ===================================
  .data
        ;writefile
        ZapisanoByte dd 0    ; сколько байт фактически выведено                                          
        PotokStdOut  dd ?    ; Для записи манипулятора Стд Потока Вывода
        
        ;readfile
        InputBuffer    db 25 dup (0)  ; вводной буфер                                                                      
        bLen           dd 23 ; длина буфера ввода, нужна при вводе
        ProchitanoByte dd 0  ; сколько байт фактически было введено
        PotokStdIn     dd ?    ; для записи манипулятора Стд Потока Ввода
        
        
.code
start: 
       ;readfile  
          invoke GetStdHandle,STD_INPUT_HANDLE
          mov PotokStdIn, eax; запросили у Windows манипулятор  стд потока ввода
          
          ; Задать  свойства потока ввода
          invoke SetConsoleMode,PotokStdIn,\ 
                    ENABLE_LINE_INPUT or \  ; закончить по Enter
                    ENABLE_ECHO_INPUT or \   ; выводить вводимое (ввод с эхом)
                    ENABLE_PROCESSED_INPUT   ; обрабатывать строчные символы CR,LF,BS и Сtrl-C
        invoke ReadFile, PotokStdIn, ADDR InputBuffer, bLen, ADDR ProchitanoByte, NULL
 
        lea eax, InputBuffer
        add eax, ProchitanoByte
        mov byte ptr[eax], 0
        
       ;writefile
        ;Запросить у Windows манипулятор выводного потока                                                    
        invoke GetStdHandle,STD_OUTPUT_HANDLE ; манипулятор возвращен в еах, ...
        mov PotokStdOut, eax  ; ... и переписан в переменную PotokStdOut
        invoke WriteFile, PotokStdOut, ADDR InputBuffer,  ProchitanoByte, ADDR ZapisanoByte, NULL
        
        
        
;ТОЧКА А
inkey 
invoke ExitProcess,0  ; выход в Windows
end start
Буду рад, если кому-нибудь, кто залезет на форум с такой же проблемой, поможет эта тема.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2015, 23:20
Ответы с готовыми решениями:

ввод в жесятичном ввывод в двоичном )
Напишите программу плз. Ввод десятичного числа в диапазоне 0-255 и вывод его значения в двоичной системе.

программа на ввод числа и ввывод информации
нужно составить программу "ввести номер месяца и вывести название месяца и номер квартала" через команду if у меня получилось такое,...

Ввод-ввывод данных. Сортировка Шелла
Здравствуйте) Попрошу помочь мне в написании одной небольшой программки, всем, кто поможет, буду благодарен, очень очень :) Задание: ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2015, 23:20
Помогаю со студенческими работами здесь

Ввывод на экран
Помогите прописатьв программе чтобы после ввода матриц они выводились на экран) Зарание спс) Текст программы: Program Fellix; uses crt;...

ввывод куки в view
Решил записать пользователя в куки что бы быстро выводить информацию о пользователе cookies = User.where(steam_id: session).first #=>...

Ввывод данных из программы на печать
Здравствуйте уважаемые обитатели. Можно ли подать на печать данные из программы? Тоесть не из файла! Например у меня есть переменные, со...

Ввывод таблицы с данными из SQL Server
Привет всем! Начал изучать С#, для создания WPF приложений. Подскажите в чём ошибка не могу вывести таблицу с данными. За основу...

Ввывод и целой части числа и дробной
C#, работа с формами.У меня в программе необходимо вывести х1 и х2 полностью, а не только целой части (т.е. х1 должно быть равно 4,5 (а не...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru