|
Главная -> Появление первого микропроцессора 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
Рис. 5.2. Структура таблицы управляющих кодов такие же, как и в программе ЗАПЗ, но в регистровых парах- (В,С) и (D, Е) содержатся не начальные, а текущие значения соответствующих переменных. Если ни одно из сравнений полученного кода с управляющими кодами таблицы не дает положительного результата, полученный код записывается в заполняемый массив, значения указателя и счетчика длины массива модифицируются и выполняется следующая итерация. 5.3. копирование массивов 5.3.1. ПЕРЕСЫЛКА ИНФОРМАЦИИ С КОНЦА МАССИВА Необходимость перемещения информации, начиная со старших адресов, т. е. с конца массива, возникает в том случае, когда адрес начала массива-приемника принадлежит области конца массива-источника (рис. 5.3,а). Программа пересылки имеет следующий вид: 2000 С5 2001 D5 2002 Е5 2003 19 222 КОШ: ; ПОЛПРОГРйМНА ПЕРЕСЫЛКИ ЙЙССИБА С КОНЦА МАССИВА. 5 ПАРАМЕТРЫ: <В»С)-АДРЕС МАССИВА-ПРИЕМНИКА(МПР) i. (В.Е)-АД- ; РЕС МАССИВА-ИСТОЧНИКА(MHC)f(H,L)-ДЛИНА МАССИВА. ; ОЦЕНКА: БРЕМЯ-149+41*Н ТАКТОБ.ГДЕ N-ЧИСЛО -ПЕРЕСЫЛАЕМЫХ 5 ЕАЙТ5 ЛЛИ11А-26 БАЙТ! ГЛУБИНА СТЕКА-6 ЕАЙТ. гКККККККККНКККХККУКХКХКХХХКККККУНХКНКККХККУХНКНХКУУКККК 5 СОХРАНЕНИЕ РЕГИСТРОВ Б СТЕКЕ. PUSH В PUSH В PUSH Н ; ОПРЕДЕЛЕНИЕ АДРЕСА КОНЦА МИС BAD В ЕВ XCHG ;<D.E)-АДРЕС КОНЦА ИИС ! ОПРЕДЕЛЕНИЕ АДРЕСА КОНЦА МНР 2006 Е1 POP » 2007 Е5 PUSH Н 2008 09 DftD Б 009 2В PCX Н ;<H»L)-АДРЕС КОНЦА ИПР ооА С1 POP Б ЯВ.С) - ДЛИНА НАССИВА 200Б С5 PUSH Б 5 НЕПОСРЕДСТВЕННАЯ ПЕРЕСЫЛКА 200С 1А иИКЛ1! LDAX D 200D 77 пои М.А 200Е ОВ DCX Е 200F IB DCX D 2010 2В ICX Н 2011 73 MOV А>Б 2012 Bl ORA С 2013 C20C20 JNZ ЦИКЛ1 5 ВОССТАНОВЛЕНИЕ РЕГИСТРОВ 2016 El POP Н 2017 Dl POP D 2018 CI POP E - 2019 C9 RET
Возрастание адресов
Возрастание адресов Рис. 5.3. Схемы расположения массивов в памяти: с - при пересылке с конца массива-источника; б - при пересылке с начала массива-источника В программе предусмотрено сохранение значений входных параметров путем записи их в стек. Перед выполнением цикла непосредственного перемещения вычисляются адреса последних байтов массива-источника и массива-приемника, что осуществляется путем сложения адреса начала массива и его длины командой DAD. Полученные адреса используются как начальные значения для указателей записи и чтения. Пересылка выполняется побайтно, после каждой пересылки значение указателей де-крементируется. Таким образом, первым будет переписан последний байт заполняемого массива, затем - предпоследний и т. д. 5.3.2. ПЕРЕСЫЛКА ИНФОРМАЦИИ С НАЧАЛА МАССИВА Если адрес начала массива-источника принадлежит области памяти массива-приемника, пересылку массива необходимо начинать с младших адресов (рис. 5.3,6). Программа пересылки имеет вид: 201й С5 201Б DG 201С Е5 201D 1ft 201Е 02 201F 03 2020 13 2021 2В 2022 7С 2023 В5 2024 C21D20 2027 Е1 2028 D1 2029 С1 202ft С9 К0П2: : ПОЯПРОГРАМНА ПЕРЕСЫ.ЧКИ HftCCMBft С HftSftflA НАССИЕА. ? ПАРАНЕТРЫ: (В,С)~АДРЕС НИР. (В.Е)-АДРЕС ЖС. (Н.Е)-ЯДИНА i НАССКБА. г ОЦЕНКА: БРЕНЯ-76+48*;Н ТАКТОВ. ГДЕ Н-КОДИЧЕСТЕО ПЕРЕСЫ-. ЛАЕМЫХ БАЙТ; ДЛИНА-17 БАЙТ! ГЛ)ЕИНА СТЕКА-6 ЕАЙТ. J СОХРАНЕНИЕ РЕГИСТРОВ Б СТЕКЕ. PUSH В PUSH В PUSH Н J НЕПОСРЕДСТВЕННАЯ ПЕРЕСЫЛКА ЧИКЛ2: LBAX В STAX Б D H ЦИКЛ2 ! ВОССТАНОВЛЕНИЕ РЕГИСТРОВ POP H POP D POP D RET Структура программы аналогична структуре программы К0П1, но отсутствуют фрагменты, в которых вычисляются адреса последних байтов массива-источника и массива-приемника, так как перемещение начинается с младших адресов и начальными значениями указателей являются значения соответствующих входных параметров. После каждой пересылки значения указателей инкрементируются. Если области памяти, занимаемые 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 0.0185 |
|