Запись программы на диск
Для записи программы на диск необходимо знать её размер в байтах, и это значение необходимо внести в регистр CX. Последний байт внесённый до этого нами в область данных имеет адрес 296 (см. выше). Это значение и будет размером программы. Вводим это число в регистр CX:
Далее необходимо командой "name"– n ввести имя программы (придумать) и командой "write"– w произвести запись программы в файл:
Теперь чтобы загрузить эту программу в Debug надо ввести её имя командой "name"– n, и загрузить командой "load" – L (файл программы должен находиться в каталоге программы debug):
Для запуска программы вводим команду g:
В данной программе сравниваются числа от 0 до 9. Анализ правильности ввода (что введено именно число, а не какая–нибудь буква) не производится. Данную проверку возможно было бы производить по анализу кодов введённых символов. То есть, если коды введённых символов выходят за рамки определённого диапазона (30h – 39h), то программа возвращается к вводу числа X или Y.
Примечания по использованным в программе командам
1). Команда mov (пересылка данных)
Команда MOV замещает первый операнд (приемник) вторым (источником). При этом исходное значение первого операнда теряется. В зависимости от описания операндов пересылается слово или байт. Если операнды описаны по-разному или режим адресации не позволяет однозначно определить размер операнда, для уточнения размера передаваемых данных в команду следует включить один из атрибутных операторов byte ptr или word ptr. В зависимости от использованных режимов адресации команда MOV может осуществлять пересылки следующих видов:
- из регистра общего назначения в регистр общего назначения;
- из ячейки памяти в регистр общео назначения;
- из регистра общего назначения в ячейку памяти;
- непосредственный операнд в регистр общего назначения;
- непосредственный операнд в ячейку памяти;
- из регистра общего назначения в сегментные регистры DS, ES и SS;
- из сегментного регистра в регистр общего назначения;
- из сегментного регистра в ячейку памяти.
Запрещены пересылки из ячейки памяти в ячейку памяти (для этого предусмотрена команда MOVS), а также загрузка сегментного регистра непосредственным значением, которое, таким образом, приходится загружать через регистр общего назначения:
mov AX, seg mem ;Сегментный адрес ячейки mem
mov DS, AX ;Загрузка его в регистр DS
Нельзя также непосредственно переслать содержимое одного сегментного регистра в другой. Такого рода операции удобно выполнять с использованием стека:
push DS ;
pop ES ;Содержимое DS копируется в ES
2). Cmp (сравнение)
Команда CMP выполняет вычитание второго операнда из первого. В соответствии с результатом вычитания устанавливаются состояния флагов CF, PF, AF, ZF, SF и OF. Сами операнды не изменяются. Таким образом, если команду сравнения записать в общем виде:
cmp операнд_1, операнд_2
то ее действие можно условно изобразить следующим образом:
операнд_1 - операнд_2 -> флаги_процессора
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Обычно вслед за командой CMP стоит одна из команд условных переходов, анализирующих состояние флагов процессора.
