|
6.3.).
Вслед за группой, состоящей из четырех команд MOV,
осуществляющих загрузку сегментных регистров, следует две
команды, выполняющие одну логическую операцию. Первая команда
- это команда "исключающего ИЛИ" XOR - заносит в регистр AL
значение "нуль" (поскольку в результате применения
"исключающего ИЛИ" к эквивалентным данным образуется новая
величина), а вторая команда заносит эту величину по
конкретному адресу.
Программа не содержит никаких сведений относительно
содержательной интепретации этих операций, но это вполне
осмысленное сочетание команд, выполняющих конкретную функцию.
Если бы мы располагали более полной информацией об
особенностях работы Бэйсика, то нам, вероятно, было бы
известно, что нулевая величина, пересылаемая в память с
помощью двух двух последовательных команд представляет собой
переключатель предохраняющий защищенные программы. При
загрузке защищенных программ, написанных на языке Бэйсик,
этот переключатель устанавливается с целью предотвращения
выдачи их на печать. Это, однако, никак не следует из
представленного листинга.
Первые семь команд рассматриваемого участка программы,
таким образом, выглядят вполне осмысленно. Они реализуют
рациональные и согласованные между собой действия и
естественным образом распадаются на два класса: команды со
2-й по 5-ю реализуют одну логическую операцию, а с 6-й по 7-ю
- другую. Пред'явленные команды отвечают всем критериям
реального участка программы.
-U F600:7E92
F600:7E93 8A6000 CLI
F600:7E93 8A6000 MOV DX,0060
F600:7E96 8EDA MOV DS,DX
F600:7E98 8EC2 MOV ES,DX
F600:7E9A 8ED2 MOV SS,DX
F600:7E9C 32CO XOR AL,AL
F600:7E9E A26404 MOV [0464],AL
F600:7EA1 B591 MOV CH,91
F600:7EA3 BB0000 MOV BX,0000
F600:7EA6 BA9A06 MOV DX,069A
F600:7EA9 BBF2 MOV SI,DX
F600:7EAB 2E SEG CG
F600:7EAC AC LODSB
F600:7EAD 8807 MOV [BX],AL
F600:7EAF 43 INC BX
F600:7EBO 42 INC DX
F600:7EB1 FECD DEC CH
Рис. 6.4.
|