то в программе после оператора SEGMENT кодируется директива ORG 100H.
О б р а б о т к а. Для программ в EXE и COM форматах выполняется
ассемблирование для получения OBJ-файла, и компановка для получения
EXE-файла. Если программа создается для выполнения как EXE-файл, то ее уже
можно выполнить. Если же программа создается для выполнения как COM-файл,
то компановщиком будет выдано сообщение:
Warning: No STACK Segment
(Предупреждение: сегмент стека не определен)
Это сообщение можно игнорировать, так как определение стека в
программе не предполагалось. Для преобразования EXE-файла в COM-файл
используется программа EXE2BIN. Предположим, что EXE2BIN имеется на
дисководе A, а скомпонованный файл по имени CALC.EXE — на дисководе B.
Так как первый операнд всегда предполагает EXE файл, то можно не
кодировать тип EXE. Второй операнд может иметь другое имя (не CALC.COM).
Если не указывать тип COM, то EXE2BIN примет по умолчанию тип BIN, который
Что такое приложение? Это .exe или сайт?
впоследствии можно переименовать в COM. После того как преобразование
будет выполнено можно удалить OBJ- и EXE-файлы.
Если исходная программа написана для EXE-формата, то можно, используя
редактор, заменить команды в исходном тексте для COM файла.
Логика и организация программы
Некоторые команды могут передавать управление, изменяя нормальную
последовательность шагов непосредственной модификацией значения смещения в
командном указателе. Ниже приведены четыре способа передачи управления
(все будут рассмотрены в этой главе):
Безусловный переход: JMP
Условный переход: Jnnn (больше,меньше,равно)
Вызов процедуры: CALL
Заметим, что имеется три типа адресов: SHORT, NEAR и FAR. Адресация
SHORT используется при циклах, условных пеpеходах и некоторых безусловных
переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и
безусловных переходов, которые не квалифицируются, как SHORT. Все три
типа передачи управления воздействуют на содержимое регистра IP; тип FAR
также изменяет регистр CS.
Одной из команд обычно используемых для передачи управления является
команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает
передачу управления при любых обстоятельствах.
. Команда LOOP, которая служит для этой цели, использует начальное значение в
регистре CX. В каждом цикле команда LOOP автоматически уменьшает
содержимое регистра CX на 1. Пока значение в CX не равно нулю, управление
передается по адресу, указанному в операнде, и если в CX будет 0,
управление переходит на следующую после LOOP команду. Дополнительно существует две разновидности команды LOOP — это LOOPE
(или LOOPZ) и LOOPNE (или LOOPNZ). Обе команды также уменьшают значение
регистра CX на 1. Команда LOOPE передает управление по адресу операнда,
если регистр CX имеет ненулевое значение и флаг нуля установлен (ZF=1).
КАК УСТРОЕН EXE ФАЙЛ?
Команда LOOPNE передает управление по адресу операнда, если регистр CX
имеет ненулевое значение и флаг нуля сброшен (ZF=0).
Флаговый регистр
Флаговый pегистр содержит 16 бит флагов, которые
управляются различными командами для индикации состояния операции. Во всех
случаях флаги сохраняют свое значение до тех пор, пока другая команда не
изменит его. Флаговый регистр содержит девять используемых бит.
Номер бита: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Флаг: * * * * O D I T S Z * A * P * C
Рассмотрим эти флаги в последовательности справа налево.
CF (Carry Flag) — флаг переноса. Содержит значение «переносов» (0 или
1) из старшего разряда при арифметических операциях и некоторых операциях
сдвига и циклического сдвига (см. гл.12).
(OP1) « (OP2) (меняет местами), (OP1) + (OP2) ® OP1
INC OP1; (OP1) + 1 ® OP1
В Ассемблере команда ‘-‘
SUB OP1, OP2; (OP1) – (OP2) ® OP1
SBB OP1, OP2; (OP1) – (OP2) – (CF) ® OP1
DEC OP1; (OP1) – 1 ® OP1.
X = 1234AB12h, Y = 5678CD34h, X + Y =
MOV AX, 1234h
MOV BX, 0AB12h
MOV CX, 5678h
MOV DX, 0CD34h
ADD BX, DX
ADC AX, CX
X – Y = SUB BX, DX
SBB AX, CX
В командах сложения и вычитания можно использовать любые способы адресации:
ADD AX, mas[SI]; прямая с индексированием
95h + 82h = 117h 95 = 100101012 82 = 100000102
100101012 + 100000102 = 1 0001 01112, 10010101
CF = 1, OF = 1, SF = 0, ZF = 0, AF = 0, PF = 1. 10000010
Пример2: 1 00010111
MOV AL, 9h
SUB AL, 5h
9h – 5h = 4h 5 = 00000101 -5 = 11111011 9 = 00001001
9 + (-5) = 11111011 + 00001001 = 1 0000 0100
CF = 1, OF = 0, SF = 0, ZF = 0, AF = 1, PF = 0.
Источник: megaobuchalka.ru