Предыдущий раздел ВЫВОД СИМВОЛОВ НА ЭКРАН Следующий раздел

4.3. Пересылка данных между регистрами

До сих пор мы записывали требуемые числа в регистры с помощью команды  R Debug. Но обычно это делает команда самой программы – mov. Эта же команда выполняет пересылку чисел между регистрами.

П о м е с т и т е   1234h  в АX (12h в регистр АH и 34h в АL) и АBCDh в DX (АBh в DH и CDh в DL). С помощью команды А введите машинную команду “mov ah,dl”. Эта команда пересылает (копирует) число из DL в AH. АL при этом не используется. Если вы протрассируете эту строку, то увидите, что AX=CD34h и DX=ABCDh. Изменился только AH. Теперь он содержит копию числа из DL.

Команда  mov пересылает число из второго регистра в первый, и по этой причине мы пишем AH перед DL. Машинный код данной команды D488h. Существуют другие формы этой же команды mov. Они имеют другие  машинные коды и выполняют другие операции пересылки. Например, следующая команда (С389h) выполняет пересылку не байтов, а слов между  двумя регистрами AX и BX

3970:0100   89C3    MOV  BX, AX

Следующая форма команды mov записывает значение числа в регистр, не используя другой регистр-источник:

3970:0100    В402   MOV  АН, 02

Эта команда загружает число 02h в регистр AH. Старший байт команды, 02h является числом, которое мы хотим загрузитьЗ а п и ш и т е  эту команду в ОП и выполните ее. Затем загрузите  в АН другое число: с помощью команды "Е 101" измените старший байт, чтобы он был равен, например, C1h .

Сложим все части вместе и построим длинную программу. Она будет печатать звездочку *, выполняя все операции сама, не требуя от нас установки регистров (AH и DL). Программа использует команды mov для того, чтобы установить регистры AH и DL перед выполнением команды “int 21h”, выполняющей вызов функции DOS:

15АC:0100     В402          mov   ah, 02

15AC:0102     B22A          mov   dl, 2a

15AC:0104     CD21         int     21

15AC:0106     CD20         int     20

В в е д и т е   программу и проверьте ее командой “U 100”. Убедитесь, что IP указывает на ячейку l00h. Запустите программу командой G. В итоге на экране должен появиться символ *.

Теперь у нас есть законченная программа. Запишем ее на диск в виде com-файла для того, чтобы мы могли запускать ее прямо из DOS, просто набрав ее имя. Так как у программы пока нет имени, то мы должны его присвоить.

Команда Debug N (от "Name") присваивает файлу имя перед записью на диск. Н а п е ч а т а й т е :

_N   Writestr.com

Эта команда не запишет файл на диск – она только назовет его Writestr.com .

Далее мы должны сообщить Debug о том, сколько байт занимает программа, для того, чтобы он знал размер файла. Если вы посмотрите на разассемблированный листинг программы, то увидите, что каждая машинная команда в нем занимает два байта (в общем случае это не выполняется). У нас четыре команды, следовательно, программа имеет длину восемь байт.

Полученное число байт надо куда-то записать. Для этого Debug использует пару регистров ВХ:CX, и поэтому, поместив 8h в СХ, мы сообщим Debug о том, что программа имеет длину в восемь байт. ВХ должен быть предварительно установлен в ноль.

После того, как мы установили имя и длину программы, мы можем записать ее на диск с помощью команды Debug W (от "Write"):

_W

Writing 0008 bytes

Теперь на диске есть программа Writestr.com, а мы с помощью Q покинем Debug и посмотрим на нее. И с п о л ь з у й т е  команду DOS  dir , чтобы увидеть справочную информацию о файле:

С:\ >dir   Writestr.com

Volume in drive С has no label

Directory  of  C:\ 

WRITESTR.COM   8   6-30-93  10:05a

1 File (S)     18432  bytes  free

Листинг директории сообщает, что файл Writestr.com  находится в корневом каталоге (\) на диске “С:”, и его длина составляет восемь байт. Чтобы загрузить и выполнить программу, наберите в ответ на приглашение DOS writestr.com и нажмите <Enter>. Вы увидите  *.

Если мы хотим запустить свою com-программу не из DOS, а из Debug, то запуск Debug следует выполнить вместе с требуемым загрузочным модулем. Пример такого запуска: Debug Writestr.com. После этого с данной программой можно работать так, как будто мы создали ее только что с помощью Debug, а не считали с диска. Для сохранения скорректированной программы на диске следует выполнить те же операции, что и для нового файла.

 


Предыдущий раздел В начало Следующий раздел