Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Дисциплины:
2022-10-05 | 21 |
5.00
из
|
Заказать работу |
|
|
Редактор связей при компоновке модулей автоматически генерирует загрузочный модуль в EXE-формате, в котором присутствует специальный начальный блок размером не менее 512 байт. EXE-программа может быть преобразована в COM-файл с помощью специальной утилиты EXE2BIN.
Несмотря на то, что EXE2BIN преобразует EXE-файл в COM-файл, существуют определенные различия, которые нужно учитывать при написании COM-программ:
· Размер программы. Программа в формате EXE может иметь любой размер, в то время как COM-программа ограничена размером одного сегмента, не превышающего 64 Кбайт. В COM-файле отсутствует 512-байтовый заголовок, который есть в EXE-файле.
· Сегмент стека. В EXE-программе должен быть определен сегмент стека, в то время как для COM-программы DOS автоматически генерирует стек и устанавливает одинаковый общий сегментный адрес во всех четырех сегментных регистрах. Таким образом, при создании ассемблерной программы, которая будет преобразована в COM-файл, стек должен быть опущен.
· Сегмент данных. В COM-программе все данные должны быть определены в сегменте кода.
· Инициализация. В EXE-программе выполняются запись нулевого слова в стек и инициализация регистра DS. Так как в COM-программе стек и сегмент данных не определены, то эти шаги отсутствуют. Когда COM-программа начинает работать, все сегментные регистры содержат адрес PSP, который резервируется системой DOS непосредственно перед загрузочным модулем в памяти. Так как адресация начинается со смещения 100h от начала PSP, то в программе после оператора segment должна быть закодирована директива org 100h.
CDSG segment para 'Code'
assume CS:CDSG,DS:CDSG,SS:CDSG,ES:CDSG
org 100h;относительный адрес начала программы
START: jmp MAIN;обходим данные в программе
;--------определение данных-------------------
X dw 250
Y dw 125
Z dw?
;-----------------------------------------------------
MAIN proc near
.
.
.
ret
MAIN endp
CDSG ends
end START
|
3.6. Задания для самостоятельной работы
1. Наберите, откомпилируйте, скомпонуйте и выполните следующую программу (листинг 3.3). При компоновке выдайте план загрузочного модуля (файл с расширением MAP).
Листинг 3.3
ds0 segment para public 'data0'
scr0 db 'Первый сегмент ','$'
ds0 ends
;---------------------------------------
ss0 segment para stack 'stack'
db 50 dup(?)
ss0 ends
;---------------------------------------
ds1 segment para public 'data1'
scrA db 'Привет ','$'
scr1 db 'Второй сегмент ','$'
ds1 ends
;---------------------------------------
cs0 segment para 'code'
main proc far
assume cs:cs0,ds:ds0,ss:ss0
push ds
sub ax,ax
push ax
mov ax,ds0
mov ds,ax
;=========================
mov ah,09h
lea dx,scr0
int 21h
;==========================
ret
main endp
cs0 ends
end main
Что делает данная программа? Определите по плану загрузочного модуля, как размещены в загрузочном модуле сегменты ds0 и ds1?
Поменяйте класс сегмента ds1 на 'data0'. Как изменился план загрузочного модуля?
Поменяйте теперь имя сегмента ds1 на ds0. Как изменилось размещение сегментов?
2. Следующая программа работает неверно (листинг 3.4). Исправьте ошибку, изменив лишь три символа в программе.
Листинг 3.4
ds0 segment para public 'data0'
scr0 db 'Первый сегмент ','$'
fin db 'Конец работы','$'
ds0 ends
;---------------------------------------
ss0 segment para stack 'stack'
db 50 dup(?)
ss0 ends
;---------------------------------------
ds1 segment para public 'data1'
scrA db 'Ошибочная работа','$'
scr1 db 'Второй сегмент ','$'
ds1 ends
;---------------------------------------
cs0 segment para 'code'
main proc far
assume cs:cs0,ds:ds0,ss:ss0
push ds
sub ax,ax
push ax
mov ax,ds0
mov ds,ax
;==========Вывод строки scr0======
mov ah,09h
lea dx,scr0
int 21h
;==========Вывод строки scr1======
mov ah,09h
lea dx,scr1
int 21h
ret
main endp
cs0 ends
end main
Исправьте эту же ошибку, внеся изменения только в сегмент кода.
3. Программу из предыдущего задания (листинг 3.4) измените таким образом, чтобы на экран была выведена строка scr0, затем - scr1, а затем - fin. Изменения можно вносить только в сегмент кода.
4. Имеется программа, состоящая из двух модулей. Исходные тексты модулей находятся в разных файлах (листинг 3.5). Что будет выведено на экран в результате работы этой программы, почему?
|
Листинг 3.5
;======МОДУЛЬ 1=================
dtcm segment para public 'data'
s1 db 'Out string ','$'
dtcm ends
sgst segment para stack 'stack'
db 50 dup(?)
sgst ends
cdsg segment para public 'code'
main proc far
assume cs:cdsg,ds:dtcm,ss:sgst
extrn repl:far
push ds
sub ax,ax
push ax
mov ax,dtcm
mov ds,ax
;---------------
mov ah,09h
lea dx,s1
int 21h
;---------------
call repl
;---------------
mov ah,09h
lea dx,s1
int 21h
ret
main endp
cdsg ends
end main
;======МОДУЛЬ 2=================
dtcm segment para common 'data'
sa db 50 dup(?)
dtcm ends
cds2 segment para public 'code2'
assume cs:cds2,ds:dtcm
repl proc far
public repl
push ds
mov ax,dtcm
mov ds,ax
;---------------
mov sa,'X'
mov sa+1,'Y'
mov sa+2,'Z'
;---------------
pop ds
ret
repl endp
cds2 ends
end
5. Напишите программу, выводящую в первую и вторую строки экрана по два символа «*» на красном фоне путем прямого обращения в видеобуфер. Для решения этой задачи определите в программе сегмент с базированием по абсолютному адресу видеобуфера.
|
|
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!