Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб роб 4 Організація програм ЕХЕ та СОМ.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
113 Кб
Скачать
☆

Шаблон 1 програми для сом-файла

; Шаблон COM -програми.

; сегмент кода.

; Модель пам’яті tiny - код і дані розташовуються в одному сегменті

.MODEL TINY

.CODE

ORG 100H

program:

;----

;----

RET

<Опис даних>

END program

Шаблон 2 програми для сом-файла

Типова структура COM-програми аналогічна структурі EXE-програми, з тією лише різницею, що COM-програма містить лише один сегмент – сегмент коду, який включає інструкції процесора, директиви і описи змінних.

;Визначення сегмента кода

CODE SEGMENT

ASSUME CS:CODE,DS:CODE,SS:CODE

ORG 100H ;Початок для COM-програми, резервування місця під стек

;Визначення підпрограми

PROC1 PROC

. . . ;Текст піпрограми

PROC1 ENDP

START:

. . . ;Текст програми

MOV AH,4CH ;Оператори завершеня програми

INT 21H

;===== Data =====

BUF DB 6 ;Визначення змінної типу Byte

. . . ;Визначення інших даних

CODE ENDS

END START

Шаблон 3 програми для сом-файла

; Виведення заголовка (TITLE) програми у другому рядку кожної

; сторінки лістингу

TITLE ASCOM COM-ПРОГРАМА ПЕРЕМІЩЕННЯ ТА ДОДАВАННЯ

;Вирівнювання адреси сегмента кода на межу параграфа – адреса

;націло ділиться на 16 (10Н)

CODESEG SEGMENT PARA 'Code'

;Регістри CS, DS, SS, ES повинні містити адресу початку ;сегмента кода

ASSUME CS:CODESEG, DS:CODESEG, SS:CODESEG, ES:CODESEG

;Початок для COM-програми, резервування місця під стек

ORG 100H

;Значення 100Н розміщено в регістр ІР, тому наступне речення

;після ORG повинно бути виконуваною командою

Begin: JMP MAIN; JMP – команда переходу на мітку MAIN

;Якщо дані записати після інструкцій,

; то потреби у операторі JMP немає

;--------------------------------------------------------

DD1 DW 220 ; Визначення даних

DD2 DW 115

DD3 DW ?

;-----------------------------------------------------------

MAIN PROC NEAR ;Процедура MAIN

MOV AX, DD1 ; В регістр АХ переслати 220

ADD AX, DD2 ;Додати 115 до АХ

MOV DD3, AX ;Переслати суму в DD3

MOV AX, 4C00H ; Завершити роботу

INT 21H

MAIN ENDP ;Кінець процедури MAIN

CODESEG ENDS ;Кінець сегмента кода

END BEGIN

Шаблон 1 програми для ехе-файла

Шаблон EXE -програми.

; Сегмент даних + сегмент кода.

; Модель пам’яті small - код розташовується в одному сегменті,

; а дані та стек – в іншому.

.MODEL SMALL

.DATA

.CODE

program:

MOV AX,@DATA ;Ініціалізація сегмента DS

MOV DS,AX ;адресою сегмента даних

;----

;----

MOV AX, 4C00H

INT 21H

END program

Для невеликих EXE-програм з трьохсегментною структурою типова наступна структура:

Шаблон 2 програми для ехе-файла

;Визначення сегмента стека

STAK SEGMENT STACK

DB 256 DUP (?)

STAK ENDS

;Визначення сегмента даних

DATA SEGMENT

SYMB DB '#' ;Опис змінної з іменем SYMB

;типу Byte і зі значенням «#»

. . . ;Визначення інших змінних

DATA ENDS

;Визначення сегмента кода

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STAK

;Регістр CS містить адресу початку сегмента кода CODE

;Регістр DS містить адресу початку сегмента даних DATA

;Регістр SS містить адресу початку сегмента стека STAK

;Визначення підпрограми

PROC1 PROC

. . . ;Текст подпрограми

PROC1 ENDP

START: ;Точка входу в програму START

XOR AX,AX ;Обнулення регістру АХ

MOV BX,data ;Обов’язкова ініціалізація

MOV DS,BX ;регістра DS на початку програми

CALL PROC1 ;Приклад виклику підпрограми

. . . ;Текст програми

MOV AX,4C00H ;Оператори завершення програми

INT 21H ;Повернення у DOS

CODE ENDS

END START

; hello-l.asm

; Выводит на экран сообщение "'Hello World!" и завершается

.model small ; модель памяти, используемая для EXE

.stack 100h ; сегмент стека розміром 256 байт

; В сегменте данных

.data

message db "Hello World! $'' ; строка для вывода символы управления

; В сегменте команд

.code ; начало сегмента кода

start: mov ah, 09h ; номер функции DOS: вывод на экран - в АН

mov dx,offset message ; адрес строки - в DX

int 21h ; вызов системной функции DOS: вывести строку на экран

end start ; конец программы

; hello-l.asm

; Выводит на экран сообщение "'Hello World!" и завершается

.model tiny ; модель памяти, используемая для СОМ

.code ; начало сегмента кода

org 100h ; начальное значение счетчика - 100h

start: mov ah, 09h ; номер функции DOS: вывод на экран - в АН

mov dx,offset message ; адрес строки - в DX

int 21h ; вызов системной функции DOS: вывести строку на экран

ret ; завершение СОМ-программы, выход в MS DOS

message db "Hello World!",0Dh,0Ah,'$' ; строка для вывода символы управления

; 0dh – Return (возврат каретки), 0ah – Line feed (перевод строки)

End start ; конец программы

8