Главная -> Книги

(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) ( 90 ) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124) (90)

LXI CALL

Н, DATA SUBR

Инициализация указателя

Вызов подпрограммы

DATA: DB

8, 16, 32 64

; Фиксированные : данные

допускает следующую замену:

Метка Код Операнд

DATA:

CALL DB

Комментарий

SUBR

8, 16, 32, 64

подпро-

Вызов граммы

Фиксированные данные

Здесь подпрограмма SUBR должна сформировать новый адрес возврата после данных и использовать его вместо адреса, включенного в стек командой CALL.

3. Короткими таблицами, элементы которых содержат более одного байта, удобнее и быстрее, манипулировать, если длина элемента составляет степень двух. Этот прием увеличивает емкость памяти для хранения таблицы, но сокращает время операций с таблицей, так как при вычислении индекса операция умнржения заменяется операцией сдвига.

4. Особенно важно оптимизировать циклы, что сокращает время выполнения программы лучше других приемов. Приемы оптимизации циклов включают удаление из цикла команд с инвариантными результатами, перемещение безусловных переходов вне цикла, сжатие нескольких команд условных переходов в одну, хранение часто используемых переменных и констант в регистрах процессора, а не в ячейках памяти. Пусть, например, в цикле имеется фрагмент, запоминающий в ячейке МАХ большее из двух чисел, находящихся в ячейках NUM1 и NUM2. Ниже приведена очевидная последовательность команд (предполагается, что регистры Н, L содержат адрес NUM2):



ONE: TWO:

Эту последовательность можно заменить фрагментом: Метка Код Операнд Комментарий

LDA СМР

JNC MOV

ONE: STA

NUMl М

ONE А, М

Загрузка первого числа Сравнение со вторым

числом Первое число больше -Загрузка второго числа

Запоминание максиму-ма

Следующая команда

Для ускорения многократно повторяющегося цикла целесообразно расширить команды, образующие тело цикла. Пусть подпрограммы SUB1 и SUB2 должны выполняться по 10 раз. Стандартное решение имеет следующий вид (регистр С - счетчик):

Метка Код Операнд Комментарий

LOOP:

CALL CALL DCR JNZ

C, 10

SUB 1 SUB 2

LOOP

Инициализация счетчика

Вызовы подпрограмм

Декремент счетчика Зацикливание

В расширенном цикле

Метка Код Операнд

Комментарий

LOOP: CALL CALL CALL CBLL DCR JNZ

C, 5

SUB 1 SUB 2 SUB 1 SUB 2 С

LOOP

Инициализация счетчика

Вызовы подпрограмм

Декремент счетчика Зацикливание

ЧИСЛО выполнений команд DCR и JNZ сокращается вдвое.

LDA NUM1 ; Загрузка первого числа СМР М ; Сравнение со вторым

; числом

JNC ONE ; Первое число больше MOV А, М ; Загрузка второго числа STA МАХ ; Запоминание максиму-; ма

JMP TWO ; Переход STA МАХ ; Запоминание максиму-; ма

*** Следующая команда



7-3. СРЕДСТВА АВТОМАТИЗАЦИИ РАЗРАБОТКИ ПРИКЛАДНЫХ ПРОГРАММ

Для эффективной разработки прикладных программ на языке ассемблера или на языках высокого уровня пользователю, кроме ассемблера или компилятора, потребуется несколько других программ, что иллюстрируется рис. 7-2. Прежде всего необходим редактор текста, позволяющий вводить в машину и модифицировать исходную программу. Результатом последующей трансляции является объектный модуль, который обычно запоминается во внешней памяти. Термин «объектный модуль» подчеркивает тот факт, что программа может состоять из нескольких частей (модулей), допускающих автономную трансляцию. В модулях могут быть внешние обращения (ссылки) к именам, определенным в других модулях. Все внешние обращения оформляются таблицей в самом объектном модуле. Следующая программа - редактор связей, или компоновщик - объединяет объектные модули в единый загрузочный модуль, в котором уже не может быть внешних обращений. Программа-загрузчик размещает загрузочный модуль в памяти и инициирует выполнение программы. Главная функция загрузчика- скорректировать (переместить) адреса в соот-

ЗА

Ввод исходной программы

Редактор текста

Исходная у программа

Ассемблер или компилятор

Редактор связей

Объектный / модуль

Другие объектные модули

Загрузчик

Средства отладки

Программа в основной памяти

I Загрузочный модуль

Машинная .программа

Рис. 7-2. Основные этапы разработки прикладных программ



(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) ( 90 ) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124)