Предыдущий раздел ВЫВОД  НА  ЭКРАН  ДЕСЯТИЧНЫХ  И ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ Следующий раздел

11.3. Запись на ассемблере

При кодировании процедуры Write_word_dec можно использовать два следующих приема программирования. Хотя выгода от их применения небольшая, они широко используются на практике.

Целью первого приема является обнуление ячейки (слова или байта). Для  этого используется логическая команда xor – "исключающее ИЛИ". Например, команда “xor ax,ax” обнуляет регистр АХ. Она сравнивает оба операнда побитно, и если один из битов равен 1, то и в соответствующий бит результата записывается 1. Если оба сравниваемых бита содержат 0 или оба содержат 1, то в результирующий бит записывается 0. Например:

                   1011      0101

     XOR       1011      0101

                   0000      0000

Второй прием используется для того, чтобы проверить на равенство 0 слово или байт. Вместо команды “cmp ax,0”  можно записать команду “or ax,ax” , используя далее или команду условного перехода jne (от "jump if not equal" – перейти, если не равно) или jnz(перейти, если не нуль).

Логическая команда or ("ИЛИ") побитно сравнивает оба операнда и записывает 1 в бит результата тогда, когда хотя бы в одном из двух сравниваемых битов есть 1. Данная команда устанавливает флаг нуля только тогда, когда  все биты результата содержат 0.

Операция OR, выполненная по отношению к одному и тому же числу, дает в результате это же число:

                       1011           0101

               OR   1011           0101

                       1011           0101

Команда or также полезна при установке одного бита в 1. Например, мы можем установить бит 3:

 

                       1011           0101

               OR   0000           1000

                       1011           1101

В н е с и т е  изменения в полученный на предыдущей работе исходный файл  Video_io.asm. Во-первых, с помощью  текстового  редактора  удалите  процедуру Test_write_byte_hex и на ее место запишите тестовую процедуру Test_write_word_dec.

Во-вторых, получите текст на ассемблере процедуры Write_word_dec, выполняющей вывод на экран содержимого 2-х байтового регистра DX в виде десятичного числа. При этом для кодирования этапов алгоритма "CX ß 0" и "Частное = 0" следует использовать описанные выше два приема. Процедуру Write_word_dec добавьте в конец файла Video_io.asm.

Внеся изменения,  п р о д е л а й т е  с Video_io.asm все необходимые шаги, чтобы получить com-файл. После этого протестируйте программу. В случае ошибки проверьте исходный файл. Если это не поможет, то для поиска ошибки используйте Debug.

Выполняя тестирование, будьте осторожны при проверке граничных условий. Первое граничное условие 0 не  представляет  трудности. Другое граничное  условие – 65535 (FFFFh), его вам лучше проверять с помощью Debug. З а г р у з и т е  Video_io.com в Debug, напечатав "Debug  Video_io.com", и замените 12345 (З0З9h) по адресу 101h и 102h на 65535 (FFFFh). Напомним, что Write_word_dec работает с беззнаковыми числами.

 


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