Пример программы
Приведем пример программы на языке процессора семейства Intel, которая увеличивает число, находящееся в регистре АХ, в 10 раз. Вместо умножения используются более быстрые команды сдвига влево. Каждый такой сдвиг на один разряд эквивалентен умножению на 2.
В первом столбце указаны адреса команд (длина команд неодинакова!), а во втором -двоичный код команд процессора. Следующий (шестнадцатеричный) столбик повторяет содержимое предыдущего, но в компактном виде. Затем следует ассемблерная мнемоника и расшифровывается содержимое операций. В последнем столбце даны пояснения к вычислениям.
|
Адрес |
Bin-код |
Нех-код |
Мнемоника |
Операция |
Результат |
|
100 |
11010001 11100000 |
D1 E0 |
SHL AX, 01 |
сдвиг AX плево на один разряд |
2Z |
|
102 |
10001001 11000011 |
89 C3 |
MOV BX, AX |
скопировать АХ в ВХ |
2 Z |
|
104 |
11000001 11100000 00000010 |
C1 E0 02 |
SHL AX, 02 |
сдвиг АХ плело на два разряда |
8 Z |
|
107 |
00000001 11011000 |
01 D8 |
ADD AX, BX |
сложить АХ с ВХ |
10 Z |
Примечание. Несмотря на то, что приведенная программа по длине явно больше, чем простое умножение на 10, работать она будет заметно быстрее, поскольку умножение - "медленная" операция. Вот оценка для процессора Intel 80486: команды переписи и сложения тина "регистр-регистр" выполняются быстро и требуют всего по 1 машинному такту, а сдвиг регистра - 3. Все вычисления по пpoграмме будут выполнены в течение 8 тактов работы процессора. В то же время команда умножения целых чисел выполняется за 13 тактов!
предыдущаяследующая тема