Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TONIC.DOC
Скачиваний:
0
Добавлен:
19.09.2019
Размер:
74.75 Кб
Скачать

Министерство образования Российской Федерации

Южно-Уральский государственный университет

Кафедра прикладной математики

Отчет по лабораторной работе №2

Выполнили:

Григорьев Д.Б. ПМФ-244

Чепкасова А.И. ПМФ-244

Проверил:

Никитин Г.А.

Челябинск

2002 г.

Цель работы: Изучение особенностей машинного программирования циклических алгоритмов с заданным числом повторений циклов. своение особенностей организации внутрисегментных и межсегментных переходов, правил работы с сегментными регистрами.

Часть 1.

1. Формулировка задачи.

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

2. Исходные данные

Первое слагаемое Chepkasova : 43 68 65 70 6B 61 73 6F 76 61

Второе слагаемое Grigoryev : 47 72 69 67 6F 72 79 65 76

3. Распределение памяти.

Данные: (сегмент данных в DS)

Указатель длины 1-ого слагаемого : 0300

Первое слагаемое : 0301-030A

Указатель длины 2-ого слагаемого : 0400

Второй слагаемое : 0401-0409

Указатель длины результата : 0500

Результат : 0501-050A

Смещение регистра CS относительно DS : 0200

Программа: (сегмент команд в CS)

Программа : 0100-017A

4. Контрольное сложение исходных данных до выполнения программы

43 68 65 70 6B 61 73 6F 76 61

47 72 69 67 6F 72 79 65 76

43 AF D7 D9 D2 D0 E5 E8 DB D7

5. Символическая запись программы и Н-коды.

Машинный Символическая

Адрес код запись программы Комментарии

2252:0100 8CD8 MOV AX,DS ;Сегмент в котором будут

2252:0102 40 INC AX ;расположенны данные

2252:0103 8ED8 MOV DS,AX ;сделаем следующим после CS

2252:0105 A00003 MOV AL,[0300] ;

2252:0108 3A060004 CMP AL,[0400] ;Сравним длины операндов

2252:010C 7C24 JL 0132 ;

2252:010E 31C0 XOR AX,AX ;Если второй операнд

2252:0110 A00003 MOV AL,[0300] ;короче.

2252:0113 2A060004 SUB AL,[0400] ;Найдем разность длин

2252:0117 31D2 XOR DX,DX ;операндов и запишем ее

2252:0119 89C2 MOV DX,AX ;в DX.

2252:011B 31C9 XOR CX,CX ;В регистр CX поместим

2252:011D 8A0E0004 MOV CL,[0400] ;длину короткого операнда.

2252:0121 BE0103 MOV SI,0301 ;Проинициализируем

2252:0124 BF0104 MOV DI,0401 ;регистры.

2252:0127 BB0002 MOV BX,0200 ;

2252:012A A00003 MOV AL,[0300] ;Длину результата

2252:012D A20005 MOV [0500],AL ;установим равной длине

2252:0130 EB22 JMP 0154 ;более длинного операнда.

2252:0132 31C0 XOR AX,AX ;Если первый операнд

2252:0134 A00004 MOV AL,[0400] ;короче.

2252:0137 2A060003 SUB AL,[0300] ;Найдем разность длин

2252:013B 31D2 XOR DX,DX ;операндов и запишем ее

2252:013D 89C2 MOV DX,AX ;в DX.

2252:013F 31C9 XOR CX,CX ;В регистр CX поместим

2252:0141 8A0E0003 MOV CL,[0300] ;длину короткого операнда.

2252:0145 BE0104 MOV SI,0401 ;Проинициализируем

2252:0148 BF0103 MOV DI,0301 ;регистры.

2252:014B BB0001 MOV BX,0100 ;

2252:014E A00004 MOV AL,[0400] ;

2252:0151 A20005 MOV [0500],AL ;

2252:0154 F8 CLC ;Сброс CF.

2252:0155 8A04 MOV AL,[SI] ;Выполним сложение над

2252:0157 1205 ADC AL,[DI] ;текущими байтами.

2252:0159 8800 MOV [BX+SI],AL ;Запишем результат.

2252:015B 46 INC SI ;Увеличим индексы.

2252:015C 47 INC DI ;

2252:015D E2F6 LOOP 0155 ;Повторим сложение.

2252:015F 89D1 MOV CX,DX ;Обработаем оставшиеся

2252:0161 8A04 MOV AL,[SI] ;байты более длинного слова

2252:0163 1400 ADC AL,00 ;

2252:0165 8800 MOV [BX+SI],AL ;

2252:0167 46 INC SI ;

2252:0168 E2F7 LOOP 0161 ;

2252:016A B000 MOV AL,00 ;Проверим не было ли

2252:016C 1400 ADC AL,00 ;переноса из последнего

2252:016E 3C01 CMP AL,01 ;байта.

2252:0170 7508 JNZ 017A ;

2252:0172 8800 MOV [BX+SI],AL ;Если был то запишем

2252:0174 A00005 MOV AL,[0500] ;его и скорректируем

2252:0177 FEC0 INC AL ;длину результата.

2252:0179 A20005 MOV [0500],AL ;

2252:017B C3 RET ;

6. Результаты трассирования введенной в ЭВМ программы

Начальное состояние флагов.

OF DF IF SF ZF AF PF CF

0 0 1 0 0 0 0 0

Производимое Рез-т Флаги

действие OF DF IF SF ZF AF PF CF

61 + 76 D7 1 0 1 1 0 0 1 0

76 + 65 DB 1 0 1 1 0 0 1 0

6F + 79 E8 1 0 1 1 0 1 1 0

72 + 73 E5 1 0 1 1 0 0 0 0

61 + 6F D0 1 0 1 1 0 1 0 0

6B + 67 D2 1 0 1 1 0 1 1 0

70 + 69 D9 1 0 1 1 0 0 0 0

65 + 72 D7 1 0 1 1 0 0 1 0

68 + 47 AF 1 0 1 1 0 0 1 0

43 + 0 43 1 0 1 0 0 0 0 0

Состояние памяти после выполнения программы.

DS:0300 0A 61 76 6F 72 61 6B 70 65 68 43

DS:0400 09 76 65 79 73 6F 67 69 72 47

DS:0500 0A D7 DB E8 E5 D0 D2 D9 D7 AF 43

7. Ошибок обнаружено не было.

Часть 2.

1. Формулировка задачи.

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

2. Исходные данные

Первое слагаемое Chepkasova : 43 68 6 5 70 6B 61 73 6F 76 61

Второе слагаемое Grigoryev : 47 72 69 67 6F 72 79 65 76

3. Распределение памяти.

Данные: (сегмент данных в DS)

Указатель длины 1-ого слагаемого : 0400

Первое слагаемое : 0401-040A

Указатель длины 2-ого слагаемого : 0500

Второй слагаемое : 0501-0509

Указатель длины результата : 0600

Результат : 0601-060A

Адрес перехода в подпрограмму (CS+2) : 0704-0708

Адрес возврата из подпрограммы (CS+2) : 0700-0704

4. Символическая запись программы и Н-коды

Первая часть программы.

Машинный Символическая

Адрес код запись программы Комментарии

2702:0100 8CD8 MOV AX,DS ;Задание сегмента

2702:0102 050200 ADD AX,0002 ;данных.

2702:0105 8ED8 MOV DS,AX

2702:0107 C70600076D01 MOV [0700],016D;Запись адреса

2702:010D 8C0E0207 MOV [0702],CS;возврата в программу.

2702:0111 8CC8 MOV AX,CS ;Запись адреса

2702:0113 40 INC AX ;перехода в

2702:0114 C70604070002 MOV [0704],0200;подпрограмму.

2702:011A A30607 MOV [0706],AX

2702:011D A00004 MOV AL,[0400];Сравнение длин

2702:0120 3A060005 CMP AL,[0500];операндов.

2702:0124 7C24 JL 014A

2702:0126 31C0 XOR AX,AX ;Если второй короче.

2702:0128 A00004 MOV AL,[0400];Найдем разность

2702:012B 2A060005 SUB AL,[0500];длин операндов

2702:012F 31D2 XOR DX,DX ;и запишем ее

2702:0131 89C2 MOV DX,AX ;в регист DX.

2702:0133 31C9 XOR CX,CX ;Длину короткого

2702:0135 8A0E0005 MOV CL,[0500];операнда в CX.

2702:0139 BE0104 MOV SI,0401 ;Инициализация

2702:013C BF0105 MOV DI,0501 ;индексных

2702:013F BB0002 MOV BX,0200 ;регистров.

2702:0142 A00004 MOV AL,[0400];Запишем длину

2702:0145 A20006 MOV [0600],AL;результата.

2702:0148 EB22 JMP 016C

2702:014A 31C0 XOR AX,AX ;Если первый короче.

2702:014C A00005 MOV AL,[0500];Найдем разность

2702:014F 2A060004 SUB AL,[0400];длин операндов

2702:0153 31D2 XOR DX,DX ;и запишем ее

2702:0155 89C2 MOV DX,AX ;в регистр DX.

2702:0157 31C9 XOR CX,CX ;Длину короткого

2702:0159 8A0E0004 MOV CL,[0400];операнда в CX.

2702:015D BE0105 MOV SI,0501 ;Инициализация

2702:0160 BF0104 MOV DI,0401 ;индексных

2702:0163 BB0001 MOV BX,0100 ;регистров.

2702:0166 A00005 MOV AL,[0500];Запишем длину

2702:0169 A20006 MOV [0600],AL;результата.

2702:016C F8 CLC

2702:016D 8A04 MOV AL,[SI] ;Сложим текущие

2702:016F 1205 ADC AL,[DI] ;байты операндов.

2702:0171 8800 MOV [BX+SI],AL;Запись результата.

2702:0173 FF2E0407 JMP Far [0704];Вызов подпрограммы.

2702:0177 C3 RET

Первый фрагмент подпрограммы.

2702:0200 46 INC SI ;Увеличение индексных

2702:0201 47 INC DI ;регистров.

2702:0202 E20B LOOP 020F ;Повторить сложение.

2702:0204 89D1 MOV CX,DX ;Обработаем оставшиеся

2702:0206 8A04 MOV AL,[SI] ;байты более длинного

2702:0208 1400 ADC AL,00 ;опранда.

2702:020A 8800 MOV [BX+SI],AL

2702:020C E9F100 JMP 0300 ;Вызов второго фрагмента.

2702:020F FF2E0007 JMP Far [0700];Возврат в основную

;программу.

Второй фрагмент подпрограммы.

2702:0300 46 INC SI ;Если остались еще

2702:0301 E202 LOOP 0305 ;необработанные байты.

2702:0303 EB03 JMP 0308 ;Если нет.

2702:0305 E9FEFE JMP 0206 ;

2702:0308 B000 MOV AL,00 ;Проверим не было ли

2702:030A 1400 ADC AL,00 ;переноса из последнего

2702:030C 3C01 CMP AL,01 ;байта.

2702:030E 7508 JNZ 031A

2702:0310 8800 MOV [BX+SI],AL;Если был, то запишем

2702:0312 A00006 MOV AL,[0600];его и скорректируем

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]