Программа на Паскале.
Определите прототип вызываемой процедуры. С помощью директивы EXTERNAL отметьте процедуру как внешнюю. Реализацию процедуры расположите в подключаемом объектном модуле chpas.obj. Директивой компиляции {$L} подключите модуль при компоновке программы.
Вызовите процедуру для вывода символа в 1 столбец, 4 строку. Повторите вывод символа 2 раза.
Вызовите процедуру для вывода символа в 9 столбец, 2 строку. Повторите вывод символа 7 раз.
Подпрограмма на языке ассемблера вывода символа в указанную позицию на экране.
Модуль сохраните под именем chpas.asm и оттранслируйте. Полученный объектный модуль поместите в директорию с программой вызова.
Объявите процедуру outchar как внешнюю, т.е. общедоступную с помощью директивы PUBLIC.
Сохраните регистр-модификатор.
Занесите адрес вершины стека в BP.
Для вывода на экран символа используйте функции 10h BIOS - 02h позиционирование курсора (DL - номер столбца, DH - номер строки) и 09h вывод символа заданное число раз (AL - символ, ВН - номер видеостраницы, СХ - число повторов, т.е. количество выводимых символов на экран, BL-атрибуты символа):
- занесите номер строки в DH;
- занесите номер столбца в DL;
- вызовите функцию позиционирования курсора;
- выполните прерывание;
- вызовите функцию вывода символа в текущую позицию курсора;
- занесите символ в AL;
- занесите атрибуты символа в BL;
- определите номер видеостраницы;
- определите количество выводимых символов на экран;
- выполните прерывание;
- восстановите регистр-модификатор;
- осуществите возврат из процедуры с очисткой стека.
Программа на Паскале
uses crt;
{$L chpas.obj} - подключение модуля при компоновке программы
procedure outchar(s: char; x, y, c: Integer);external; - прототип внешней вызываемой процедуры
begin
clrscr;
outchar('a',1,4,2); - столбец 1, строка 4, повторить 2 раза
outchar('b',9,2,7); - столбец 9, строка 2, повторить 7 раз
readkey
end.
Подпрограмма на языке ассемблера
MASM
MODEL SMALL
STACK 128
.CODE
outchar PROC near
PUBLIC outchar - объявление процедуры как внешней, общедоступной
PUSH BP - сохранение регистра-модификатора
MOV BP,SP - адрес вершины стека в BP
MOV DH,[BP+6] - номер строки в DH
MOV DL,[BP+8] - номер столбца в DL
MOV AH,02h - функция позиционирования курсора
INT 10h - выполнение прерывания
MOV AH,09h - функция вывода символа в текущую позицию курсора
MOV AL,[BP+10] - символ в AL
MOV BL,07h - атрибуты символа в BL
XOR BH,BH - номер видеостраницы
MOV CX,[BP+4] - количество выводимых символов на экран
INT 10h - выполнить прерывание
POP BP - восстановление регистра-модификатора
RET 8 - возврат из процедуры с очисткой стека
ENDP
END
Задание 2.
Напишите программу, выводящую на экран "Hello, world, from Delphi!".
Указания по выполнению Задания 2.
На рис. показана форма, используемая в данной программе. Форма содержит надпись и кнопку. В табл. перечислены используемые в данной программе компоненты и свойства, для которых нужно изменить значения, установленные по умолчанию. Разместите надпись и кнопку в форме и установите значения свойств, как указано в табл.
Таблица. Компоненты программы
Компонент | Свойство | Значение |
Форма Надпись Кнопка | Name Caption Name Caption Font Name Size Style fsBold Name Caption | frmProgram Моя программа lblMessage <Пустая строка> Arial True btnDisplayMessage &Вывести сообщение |
Форма программы
Выполнение программы
Код программы
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfrmProgram = class(TForm)
lblMessage: TLabel;
btnDisplayMessage: TButton;
procedure DisplayMessage(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmProgram: TfrmProgram;
implementation
{$R *.dfm}
procedure TfrmProgram.DisplayMessage(Sender: TObject);
begin
lblMessage.Caption:='Hello, World, from Delphi!';
end;
end.