Указание по выполнению Задания 2.




Билет 1

Задание 1.

Создайте одномодульную программу, работающую с пакетом TASM. Используйте стандартные директивы сегментации и дополните код следующими командами:

В сегменте данных опишите байтовую переменную А, переменную В размером в слово, и переменную Text. Text должна быть описана как байтовая переменная, хотя является строкой. С помощью текст обратитесь непосредственно только к первому символу, а к остальным получите доступ только по смещению.

В кодовом сегменте вначале инициализируйте сегментный регистр DS. Затем в регистр AX поместите значение переменной А. Поскольку регистр АХ 16-ти разрядный, а переменная А байтовая, то напрямую переслать в регистр значение не получится – возникнет ошибка трансляции «типы операндов различны». Поэтому сначала обнулите регистр АН, а затем в регистр ALпередайте значение А. С помощью команды логического сдвига выполните умножение на 1024 и переместите результат в переменную В.

Добавьте в программу вызов функции 09р прерывания 21h для вывода на экран текстовой строки. Признаком конца строки для данной функции является символ «$». Смещение строки должно находиться в регистре DX. Последним действием должен быть вызов функции 4Сh прерывания 21h для корректного завершения программы.

 

 

S segment stack

db 128 dup(?)

S ends

стандартные директивы сегментации
сегмент данных
D segment

a db 1; байтовая переменная А

b dW?; переменная В размером в слово

text db "This is simple text$"; байтовая переменная Text, строка

; $ - признак конца строки

D ends

 

C segment

assume cs:c, ds:d, ss:s

Команда логического сдвига выполняет умножение на 10
инициализация сегментного регистра DS
L: mov ax,d

в регистр АХ помещается значение переменной А
mov ds, ax

mov ah, 0; обнуление регистра АН

кодовый сегмент
mov al,a; в регистр AL передаётся значение А

mov cl,10

shl ax,cl

mov b, ax; результат помещается в переменную В

mov ah,09h; вызов функции 09h для вывода на экран текстовой строки

mov dx, offset text; смещение строки находится в регистре DX

int 21h; прерывание 21h

mov ax,4c00h; вызов функции 4Сh для корректного завершения программы

int 21h; прерывание 21h

С ends

 

end l

 

 


Задание 2.

Создайте программу, иллюстрирующую использование событий OnEnter и OnExit с помощью двух областей просмотра - MemOut1 и MemOut2.

Указание по выполнению Задания 2.

Требуемые значения свойств компонентов формы этой программы и имена используемых подпрограмм обработки событий приведены в табл. Окно выполняемой программы показано на рис.

 

Таблица. Значения свойств и обработчиков событий компонентов формы, используемой в программе.

Компонент Свойство Значение
Форма     Область просмотра   Область просмотра     Name Caption   Name Lines ReadOnly   Name Lines ReadOnly frmFocusExample Пример событий фокуса   memOut1 <Пусто> True   memOut2 <Пусто> True
Имя компонента Событие Имя обработчика
memOut1     memout2 OnEnter OnExit   OnEnter OnExit GotFocus() LostFocus()   GotFocus() LostFocus()


Код программы

unit FocusEx;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TfrmFocusExample = class(TForm)

memOut1: TMemo;

MemOut2: TMemo;

procedure GotFocus(Sender: TObject);

procedure LostFocus(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

frmFocusExample: TfrmFocusExample;

 

implementation

 

{$R *.dfm}

 

procedure TfrmFocusExample.GotFocus(Sender: TObject);

begin

TMemo(Sender).Clear;

TMemo(Sender).Lines.Add('Фокус получен');

end;

 

procedure TfrmFocusExample.LostFocus(Sender: TObject);

begin

TMemo(Sender).Clear; {Приведение типа параметра Sender

к типу области просмотра TMemo}

TMemo(Sender).Lines.Add('Фокус потерян');

end;

 

end.

 


Билет 2

Задание 1.

Разработайте, оттранслируйте и отладьте программу с применением упрощённых директив сегментации.

Используйте режим работы IDEAL. Для контроля хода выполнения программы выведите на экран сообщение. Используйте функцию MS-DOS (прерывание 21h) для вывода символьных данных на экран. Под сегмент стека отведите 128 байт. Примените модель памяти SMALL.

 

IDEAL - режим работы IDEAL

MODEL SMALL - модель памяти SMALL

 

STACK 128 – под сегмент стека отведено 128 байт

 

Упрощённые директивы сегментации
DATASEG

MSG DB “Первая программа на ассемблере.$”

ENDS

 

CODESEG

MAIN:

MOV AX,DGROUP

MOV DS, AX

Вывод сообщения на экран
LEA DX,MSG

MOV AH,9 - использование функции MS-DOS для вывода символьных данных на экран

INT 21H - прерывание 21h

MOV AX, 4C00H

INT 21H

ENDS

END MAIN

END


Задание 2.

Разработайте программу, демонстрирующую последовательность наступления событий, показанных на рис.

Указание по выполнению Задания 2.

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

Таблица. Свойства и обработчики событий компоненты формы, используемой в программе

Компонент Свойство Значение
Форма Name Caption frmEventOrder Последовательность событий
Имя компонента Событие Имя обработчика события
frmEventOrder OnActivate OnClose OnCreate OnDestroy OnPaint OnShow ActivateForm() CloseForm() CreateForm() DestroyForm() PaintForm() ShowForm()

 
 

 

 
 

Код программы

unitEventOrdefEx;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type

TfrmEventOrder = class(TForm)

procedure ActivateForm(Sender: TObject);

procedure CreateForm(Sender: TObject);

procedure PaintForm(Sender: TObject);

procedure ShowForm(Sender: TObject);

procedure CloseForm(Sender: TObject; var Action: TCloseAction);

procedure DestroyForm(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

var

frmEventOrder: TfrmEventOrder;

implementation

{$R *.dfm}

 

procedure TfrmEventOrder.ActivateForm(Sender: TObject);

begin

Application.MessageBox('Обработчик ActivateForm', 'Событие OnActivate',MB_OK);

end;

 

procedure TfrmEventOrder.CloseForm(Sender: TObject; var Action: TCloseAction);

begin

Application.MessageBox('Обработчик CloseForm', 'Событие OnOnClose',MB_OK);

end;

 

procedure TfrmEventOrder.CreateForm(Sender: TObject);

begin

Application.MessageBox('Обработчик CreateForm', 'Событие OnCreate',MB_OK);

end;

 

procedure TfrmEventOrder.DestroyForm(Sender: TObject);

begin

Application.MessageBox('Обработчик DestroyForm', 'Событие OnDestroy',MB_OK);

end;

 

procedure TfrmEventOrder.PaintForm(Sender: TObject);

begin

Application.MessageBox('Обработчик PaintForm', 'Событие OnPaint',MB_OK);

end;

 

procedure TfrmEventOrder.ShowForm(Sender: TObject);

begin

Application.MessageBox('Обработчик Showform', 'Событие OnShow',MB_OK);

end;

 

end.


Билет 3

Задание 1.

Разработайте, оттранслируйте и отладьте программу с применением упрощённых директив сегментации.

Используйте режим работы MASM. Для контроля хода выполнения программы выведите на экран сообщение. Используйте функцию MS-DOS (прерывание 21h) для вывода символьных данных на экран. Под сегмент стека отведите 128 байт. Примените модель памяти SMALL.

 

MASM - режим работы MASM

MODEL SMALL - модель памяти SMALL

 

.STACK 128 – под сегмент стека отведено 128 байт

 

Упрощённые директивы сегментации
.DATA

MSG DB “Первая программа на ассемблере.$”

 
 


.CODE

MAIN:

MOV AX, @DATA

MOV DS,AX

MOV AH,9 - использование функции MS-DOS для вывода символьных данных на экран

MOV DX, OFFSET MSG

INT 21H - прерывание 21h

MOV AX, 4C00H

INT 21H

END MAIN

END


Задание 2.

Разработать программу, в которой пользователь с помощью полосы прокрутки задаёт произвольное число от 0 до 100, после чего программа вызывает процедуру AddOne() столько раз, сколько задано этим числом.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: