Изучение архитектуры и системы команд INTEL-совместимых микропроцессоров. Коршунов А.Д. - 39 стр.

UptoLike

Составители: 

39
В первой строке происходит очистка регистра SI, что соответствует нулевому
смещению строки-источника. В строке 2 в регистр DI записывается число 0F600h
смещение строки-приемника. Затем в строке 3 осуществляется сброс флага DF –
обработку строк будем вести в порядке увеличения адреса. В строке 4 объявляем
меткуздесь начинается копирования очередного символа. Далее в строке 5 с
помощью команды LODSB
загружаем один байт из адреса DS:SI в регистр AL,
причем регистр SI сразу же после считывания увеличивается на 1 этой же
командой. Теперь полученный символ в AL сравниваем с нулем с помощью
команды TEST, и, если это символ с кодом 0, то следующая команда в строке 7
осуществит переход команду HLT в конце программы, осуществив тем самым
завершение копирования. Если
же символ не 0, то в строке 8 он сравнивается с
символом цифры «0». Если код нашего символа меньше, чем код символа «0», то
он не является символом цифры, и в строке 9 происходит переход на метку, в
которой обрабатывается соответствующая ситуация. В противном случае наш
символ не является цифрой, если его код больше, чем код символа «9», что и
проверяет команда в строке 10. Если это так, то в строке 11 происходит переход на
ту же метку для обработки символов, не являющихся символами цифр. В
противном случае управление передается на следующую строку 12, т.е. только
если символ является символом цифры. В этой строке происходит запись атрибута
цвета для
символа цифры в регистр AH. На следующей строке команда
осуществляет переход на метку для дальнейшего копирования символа с
атрибутом. На строке 14 располагается метка, на которую передается управление,
если исходный символ не является символом цифры. В этом случае в строке 15
происходит запись в регистр AH другого атрибута цвета. На строку 16 управление
передастся в
любом случае (за исключением символа с кодом 0), в ней
посредством команды STOSW происходит запись слова из регистра AX в память
по адресу ES:DI, причем сразу после записи DI увеличивается на 2. При записи
слова в память его байты располагаются в обратном порядке. То есть по
младшему адресу будет находиться младший байт слова (AL, в котором
содержится символ
), а за ним старший байт (AH, в котором записаны атрибуты
цветы). Со строки 17 происходит безусловный переход на строку 4 для
копирования следующего символа. На строку 18 управление передается только в
                                                                              39
    В первой строке происходит очистка регистра SI, что соответствует нулевому
смещению строки-источника. В строке 2 в регистр DI записывается число 0F600h
– смещение строки-приемника. Затем в строке 3 осуществляется сброс флага DF –
обработку строк будем вести в порядке увеличения адреса. В строке 4 объявляем
метку – здесь начинается копирования очередного символа. Далее в строке 5 с
помощью команды LODSB загружаем один байт из адреса DS:SI в регистр AL,
причем регистр SI сразу же после считывания увеличивается на 1 этой же
командой. Теперь полученный символ в AL сравниваем с нулем с помощью
команды TEST, и, если это символ с кодом 0, то следующая команда в строке 7
осуществит переход команду HLT в конце программы, осуществив тем самым
завершение копирования. Если же символ не 0, то в строке 8 он сравнивается с
символом цифры «0». Если код нашего символа меньше, чем код символа «0», то
он не является символом цифры, и в строке 9 происходит переход на метку, в
которой обрабатывается соответствующая ситуация. В противном случае наш
символ не является цифрой, если его код больше, чем код символа «9», что и
проверяет команда в строке 10. Если это так, то в строке 11 происходит переход на
ту же метку для обработки символов, не являющихся символами цифр. В
противном случае управление передается на следующую строку 12, т.е. только
если символ является символом цифры. В этой строке происходит запись атрибута
цвета для символа цифры в регистр AH. На следующей строке команда
осуществляет переход на метку для дальнейшего копирования символа с
атрибутом. На строке 14 располагается метка, на которую передается управление,
если исходный символ не является символом цифры. В этом случае в строке 15
происходит запись в регистр AH другого атрибута цвета. На строку 16 управление
передастся в любом случае (за исключением символа с кодом 0), в ней
посредством команды STOSW происходит запись слова из регистра AX в память
по адресу ES:DI, причем сразу после записи DI увеличивается на 2. При записи
слова в память его байты располагаются в обратном порядке. То есть по
младшему адресу будет находиться младший байт слова (AL, в котором
содержится символ), а за ним старший байт (AH, в котором записаны атрибуты
цветы). Со строки 17 происходит безусловный переход на строку 4 для
копирования следующего символа. На строку 18 управление передается только в