Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014- СП 3.0 ЛАБЫ ОБЯЗАТ.doc
Скачиваний:
99
Добавлен:
01.03.2016
Размер:
896 Кб
Скачать
    1. Выполнение работы

Исходное состояние – шаблон минимальной учебной программы:

include \masm32\include\masm32rt.inc

comment * ===========================

Шаблон минимальной учебной программы

* ===================================

.data

.code

start:

;ТОЧКА А

Invoke ExitProcess,0 ; выход в Windows

end start

Сохраните его в файле сio.asm.

      1. Эксперимент 1. Ввод-вывод функциями Win32

Цель эксперимента – испытание возможностей прямого вызова функций консольного ввода-вывода из APIWin32, наблюдение результатов, оценка трудоемкости этих действий.

Задача: ввести в программу текст функцией ReadFile, затем тот же текст вывести на консоль функциейWriteFile.

Для выполнения этой задачи нужно использовать примеры, приведенные в разделе теоретических сведений (Фрагменты 1…4).

В качестве шаблона-заготовки используйте cio.asm. Скопируйте его в файлcio-api.asm. Внесите в его секцию данных описания переменных, приведенных во Фрагментах 1 и 3.

В секцию кода внесите Фрагмент 4 (это ввод), ниже – фрагмент 2 (это вывод).

Выполнить согласование. Откорректируйте Фрагмент 2, чтобы вводной буфер Фрагмента 4 сразу использовался как выводной буфер во фрагменте 2. Кроме того, при вводе функция ReadFile(во фрагменте 4) сосчитает количество фактически введенных смволов и сохранит его в назначенной переменной. Измените Фрагмент 2 так, чтобы это число сразу правильно подставлялось как параметр в вызовWriteFile. Тогда эхо-вывод введенного текста произойдет без ошибок.

Выше строчки

invoke ExitProcess,0

вставьте вызов макроса для задержки окна консоли:

inkey

Сохраните программу со всеми выполненными изменениями. Распечатайте ее и включите в отчет.

Выполните создание программы вызовом (можно в TotalCommander)

buildc cio-api

Выполните cio-api.exe. Сделайте скриншот исполнения, включите его в отчет.

      1. Эксперимент 2

Цель эксперимента – испытание макросов консольного ввода и вывода, наблюдение результатов, оценка трудоемкости этих действий.

Будем использовать как исходный файл сio.asm.

  1. В секцию данных (после .data) вписатьlpNumString dd 0

  2. Ниже строки ; ТОЧКА Авставитьinkey "Нажми пробел..."

  3. В секцию кода (после .start) дописатьmov lpNumString, input("Введите 16ричное число: ") print "На самом деле введен текст " print lpNumString,13,10

  4. Сохранить изменения. Распечатать программу в этом состоянии, включить в отчет.

  5. Создать программу консольным вызовом (можно в TotalCommander)buildc cio

  6. Выполнить cio.exe, убедиться, что всё работает.

  7. Сделать скриншот выполнения эксперимента для отчета.

      1. Эксперимент 3

Цель эксперимента – преобразование строки в число и числа в строку, наблюдение результатов этих преобразований.

  1. В cio.asmвыше строки; ТОЧКА Авставить фрагмент; Строку преобразую в число mov EDX, h2ud(lpNumString) ;в EDX - адрес числа comment * Примечание. Макрос h2ud считает строку 16тиричной записью числа, а a2ud - 10тичной. И тот, и другой возвращают указатель * на сформированное в памяти число. mov EBX, DWORD PTR [EDX] ; разыменование: число в ЕВХ print "Обратный вывод введенного числа = ",13,10 print str$(EBX),13,10 print "То же число, но 16-рично: " ;пробую hex-вывод print hex$(EBX),13,10

  2. Сохранить изменения. Распечатать программу в этом состоянии, включить в отчет.

  3. Создать программу консольным вызовом (можно в TotalCommander)buildc cio

  4. Выполнить cio.exe, убедиться, что всё работает.

  5. Сделать скриншот выполнения эксперимента для отчета.