File View Run Breakpoints Data Options Window Help




г=[ ]=CPU 80386=======================================1=[ ][ ]

| cs:0100>33C0 xor ax,ax | ax 0000 |c=0|

| cs:0102 A03601 mov al,[0136] | bx 0000 |z=0|

| cs:0105 F6263601 mul byte ptr[0136] cx 0000 |s=0|

| cs:0109 BB0010 mov bx,1000 | dx 0000 |o=0|

| cs:010C F7E3 mul bx | si 0000 |p=0|

| cs:010E A33701 mov [0137],ax | di 0000 |a=0|

| cs:0111 89163901 mov [0139],dx | bp 0000 |i=1|

| cs:0115 A03601 mov al,[0136] | sp FFFE |d=0|

| cs:0118 32E4 xor ah,ah | ds 58D2 | |

| cs:011A BB0020 mov bx,2000 | es 58D2 | |

| cs:011D F7E3 mul bx | ss 58D2 | |

| cs:011F 03063701 add ax,[0137] | cs 58D2 | |

| cs:0123 13163901 adc dx,[0139] | ip 0100 | |

|---------------------------------------------+ | |

| ds:0000 CD 20 00 A0 00 9A F0 FE = а ЪЁ | | |

| ds:0008 1D F0 E8 01 3C 23 B2 01 Ёш <# +------------+-|

| ds:0010 3C 23 7D 02 53 1D D1 0F <#} S_T | ss:0000 20CD|

| ds:0018 01 01 01 00 02 FF FF FF |ss:FFFE>0000 |

==============================================|===============

Рисунок 1 - Окно отладчика

 

В левой верхней части окна отображается реассембированный текст программы (сегмент кода), внизу выводится содержимое сегмента данных, cправа находятся области отображения состояний регистров, флагов и стека.

Для отладки программы в пошаговом режиме используются клавиши F7 и F8, для постановки точек прерывания - ctrl+F8, перемещение по окну выполняется с помощью стрелок и клавиши TAB.

 

 

1.4 ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ

 

1) Просмотрите файл example1.asm, содержащий пример программы на языке Ассемблера. Изучите назначение команд программы.

2) Оттранслируйте программу с помощью средств пакета tasm и

получите исполняемую программу в формате СОМ.

3) Просмотрите пошаговое выполнение программы в отладчике td.

4) Проанализируйте состояния регистров и памяти на каждом шаге.

 

 

1.5 СОДЕРЖАНИЕ ОТЧЕТА

 

1) Постановка задачи.

2) Текст программы.

3) Назначение команд в программе.

4) Результаты отладки.

5) Выводы.

 


 

2 ЛАБОРАТОРНАЯ РАБОТА №2. АРИФМЕТИЧЕСКИЕ

ОПЕРАЦИИ В ЯЗЫКЕ АССЕМБЛЕРА IBM PC

 

Цель работы: изучение арифметических команд языка Ассемблер IBM PC.

 

2.1 ФОРМАТЫКОМАНД ДВОИЧНОЙ И ДЕСЯТИЧНОЙ

АРИФМЕТИКИ

 

Процессор имеет четыре базовые арифметические операции в нескольких различных форматах (таблица 2.1). Операции выполняются

над 8- и 16-битовыми знаковыми и беззнаковыми операндами. Кроме того, в языке Ассемблера предусмотрены команды для обработки десятичных чисел.

 

Таблица 2.1 - Арифметические команды

МНЕМОНИКА КОМАНДЫ ОПИСАНИЕ КОМАНДЫ
ADD (сложить) ADC (сложить с переносом) INC (инкремент) ПРИЕМНИК+ИСТОЧНИК -> ПРИЕМНИК ПРИЕМНИК+ИСТОЧНИК+CF -> ПРИЕМНИК ПРИЕМНИК+1 -> ПРИЕМНИК
SUB (вычесть) SBB (вычесть с переносом) DEC (декремент) NEG (изменить знак) ПРИЕМНИК-ИСТОЧНИК -> ПРИЕМНИК ПРИЕМНИК-ИСТОЧНИК-CF -> ПРИЕМНИК ПРИЕМНИК-1 -> ПРИЕМНИК -ПРИЕМНИК -> ПРИЕМНИК
MUL (умножить) IMUL (умножить со знаком) AL*ИСТОЧНИК(8) -> AX AX*ИСТОЧНИК(16) -> DX,AX Команда MUL, но операнды знаковые
DIV (разделить) IDIV(разделить со знаком) AX/ИСТОЧНИК(8) -> AL DX,AX/ИСТОЧНИК(16) -> AX Команда DIV, но операнды знаковые

 

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

Большинство арифметических команд устанавливают или сбрасывают шесть флагов состояния, показывающих определенные свойства результата:

 

- флаг CF устанавливается, если операция дала беззнаковый результат вне диапазона;

- флаг OF устанавливается, если в операции получился знаковый результат, находящийся вне диапазона (знаковое переполнение);

- флаг ZF устанавливается, если результат операции равен 0;

- флаг SF устанавливается, если старший бит результата операции содержит 1, что соответствует получению отрицательного результата;

- флаг PF устанавливается, если результат операции содержит четное число единичных бит;

- флаг AF устанавливается, если в десятичных операциях требуется коррекция.

 

Перечисленные выше арифметические операции выполняются над

числами в двоичном формате. Этот формат удобен в том случае, если

данные определены в самой программе. Во многих случаях исходные

данные вводятся программой с клавиатуры или из файла в виде ASCII-символов в десятичном формате. Данные поступают в ЭВМ, как правило, в неупакованном формате, т.е. каждый байт содержит только одну цифру. Примером неупакованного десятичного формата

служит код ASCII, в котором каждый символ представляется одним

байтом. Кодирование цифр показано в таблице 2.2.

 

Таблица 2.2 - Представление цифр в коде ASCII

Цифра Код ASCII Цифра Код ASCII
  30H   35H
  31H   36H
  32H   37H
  33H   38H
  34H   39H

С помощью следующих ассемблерных команд можно выполнять

арифметические операции непосредственно над числами в ASCII -

формате:

AAA - коррекция для сложения ASCII - кодов;

AAD - коррекция для деления ASCII - кодов;

AAM - коррекция для умножения ASCII - кодов;

AAS - коррекция для вычитания ASCII - кодов.

 

Эти команды записываются без операндов и выполняют автоматическую коррекцию содержимого регистра AX. Рассмотрим пример. Предположим, что регистр AX содержит 0038H (цифра 8), а регистр BX - 0034H (цифра 4). Сложение и коррекция записываются следующими командами:

 

ADD AL,BL;сложение 34 и 38

AAA;коррекция для сложения ASCII-кодов

 

Команда AAA проверяет правую шестнадцатиричную цифру (4 бита) в регистре AL. Если эта цифра находится между A и F или флаг переноса AF равен 1, то к содержимому регистра AL прибавляется 6, а к содержимому регистра AH прибавляется 1. В нашем примере в регистре AX получаются следующие значения:

после команды ADD: 006C;

после команды AAA: 0102.

Для получения окончательного ASCII-представления достаточно

просто поставить тройки на место левых шестнадцатиричных цифр:

OR AX,3030H;результат 3132

 

Сложение многобайтовых ASCII-чисел требует организации цикла, который выполняет обработку цифр рассматриваемого числа слева направо с учетом переноса. В примере, показанном на рисунке 2, складываются два трехбайтовых ASCII- числа в четырехбайтовую сумму.

ASCADD SEGMENT

ASSUME CS:ASCADD,DS:ASCADD,SS:ASCADD

ORG 100H

START: JMP MAIN

;--------------------------------------------------

ASC1 DB '578';первое слагаемое

ASC2 DB '694';второе слагаемое

ASC3 DB '0000';результат

;--------------------------------------------------

MAIN: CLC;сбросить флаг переноса

LEA SI,ASC1+2;адреса ASCII символов

LEA DI,ASC2+2

LEA BX,ASC3+3

MOV CX,03;Число повторений цикла

A20: MOV AH,00;Очистить регистр AH

MOV AL,[SI];Загрузить ASCII-байт

ADC AL,[DI];Сложить (с переносом)

AAA;Коррекция ASCII-кода

MOV [BX],AL;Сохранение суммы

DEC SI

DEC DI

DEC BX

LOOP A20;Пока CX>0 повторить цикл

MOV [BX],AH;Сохранить перенос

RET

ASCADD ENDS

END START

 

Рисунок 2 - Сложение в ASCII-формате

 

2.2 ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ

 

 

Разработать программу для выполнения заданной арифметической

операции над неотрицательными 80-ти разрядными двоичными

операндами. Исходные данные или результат (в зависимости от варианта задания) представить в распакованном формате в системе счисления с основанием, указанным вариантом задания. Таким образом, при выполнении задания по вариантам 1 - 6 следут запрограммировать последовательность действий:

1) преобразование исходных данных;

2) выполнение арифметической операции;

а по вариантам 7 - 12:

1) выполнение арифметической операции;

2) преобразование результата.

 

Под распакованным форматом в заданной системе счисления следует понимать представление числа в виде последовательности ASCII-кодов арабских цифр, используемых этой системой счисления.

Исходные данные определить с помощью директив определения данных.

Кроме того, в качестве информации о корректности выполнения арифметической операции сложения или вычитания сформировать однобайтовый код ошибки, равный 0, если результат операции представляет собой 80-битовое неотрицательное число, и равный FFH в противном случае.

Выполнить тестирование программы, по крайней мере, для трех типов тестов, соответсвующих ситуациям:

1) операнды и результат выполнения операции представляют собой положительные 80-разрядные двоичные числа;

2) один из операндов равен 0;

3) длина результата выполнения операции сложения превышает 80 бит или результат выполнения операции вычитания – отрицательное число.

Варианты задания представлены в таблице 2.3. Три символа кода варианта задания определяют: арифметическую операцию (С -сложение, В - вычитание); информацию, которую следует представить в заданной системе счисления (Д - данные, Р - результат);

основание системы счисления для представления исходных данных или результата (4,8-ричная или H-16-ричная).

 

Таблица 2.3 - Варианты задания

N вар.                        
Код СД4 ВД4 СД8 ВД8 СДH ВДH СР4 ВР4 СР8 ВР8 СРH ВРH

 

 

2.3 СОДЕРЖАНИЕ ОТЧЕТА

 

1) Постановка задачи в соответствии с заданным вариантом.

2) Краткое описание алгоритма.

3) Текст программы.

4) Результаты тестирования.

5) Выводы: характеристики программы и полноты ее тестирования.

 

 


 

3 ЛАБОРАТОРНАЯ РАБОТА №3. ОБРАБОТКА СТРОКОВЫХ ДАННЫХ В ЯЗЫКЕ АССЕМБЛЕРА IBM PC

 

Цель работы: изучение команд языка Ассемблер, предназначенных для обработки строк символов.

 

 

3.1 ФОРМАТЫКОМАНД ОБРАБОТКИ СТРОКОВЫХ ДАННЫХ

 

В языке Ассемблера имеется пять команд для обработки строковых данных:

movsb(movsw) - переслать байт (слово) из одной области памяти в

другую;

lodsb(lodsw) - загрузить из памяти байт(слово) в регистр al(ax);

stosb(stosw) - записать содержимое регистра al(ax) в память;

cmpsb(cmpsw) - сравнить содержимое двух областей памяти длиной

байт (слово),

scasb(scasw) - сравнить содержимое регистра al(ax) с содержимым

памяти.

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

Повторение выполнения команды может быть обеспечено использованием префикса rep, если предварительно в регистр cx поместить количество таких повторений. Это позволяет указанным командам обрабатывать строки любой длины. При этом флаг направления df определяет направление просмотра и обработки строковых данных: 0 - слева направо (содержимое регистров si и di увеличивается), 1 - справа налево (содержимое регистров si и di уменьшается).

Флаг df установить в 0 можно с помощью команды CLD, а в 1 - с помощью команды STD.

Префикс rep указывается непосредственно перед командой.

Например,

rep movsb

При выполнении этой команды происходит уменьшение на 1 значенияв регистре СХ до 0.

Рассмотрим примеры.

Ниже приведена группа команд, выполняющая пересылку 10 байт

из области NAME1 в область NAME2 в предположении, что регистры

DS и ES инициализированы адресом сегмента данных.

 

 

NAME1 DB 10 DUP('*')

NAME2 DB 10 DUP('?')

...

CLD; сбросить флаг df

MOV CX,10; установить счетчик

LEA DI,NAME2; загрузить относительные адреса

LEA SI,NAME1; областей даных

REP MOVSB; переслать данные

 

Следующая группа команд выполняет пересылку тех же данных, но

в предположении, что пересылка выполняется справа налево и по

словам.

 

STD

MOV CX,5

LEA DI,NAME2+8

LEA SI,NAME1+8

REP MOVSW

...

 

При выполнении команд CMPS и SCAS возможно использование

модификаций префикса REP:

REPZ/REPE - повторять операцию пока флаг zf показывает "равно

или ноль". Прекратить операцию, если zf "не равно или

не ноль" или при CX=0;

REPNE/REPNZ - повторять операцию пока флаг zf показывает "не

равно или не ноль". Прекратить операцию при флаге zf,

указывающем на "равно или ноль" или при CX=0.

 

 

3.2 ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ

 

Разработать программу формирования или распаковки информационного кадра для передачи по локальной вычислительной сети. Формат кадра представлен на риcунке 3.

 

ПП Данные КС КК

ПП - преамбула (4 байта с кодом 55Н);

Данные - поле данных (16 байт);

КС - контрольная сумма (2 байта);

КК - конец кадра (1 байт с кодом 1FН).

 

Рисунок 3 - Формат кадра

 

Под формированием (распаковкой) понимается заполнение (чтение) поля данных кадра и формирование (проверка) контрольной суммы. Данные для передачи (приема) хранятся в области памяти с именем SDATA и представляют собой последовательность 16 символов из набора от A до Z и от 0 до 9. При формировании (распаковке) кадра данные необходимо зашифровать (расшифровать) согласно таблице кодировки, указанной в варианте задания.

Контрольная сумма может формироваться двумя способами:

1) Как арифметическая сумма всех байт поля данных;

2) Каждый бит КС представляет собой дополнение до четного

числа единиц соответствующего байта поля данных.

Способ формирования контрольной суммы указан в варианте

задания.

В лабораторной работе использовать команды работы со строками:

LODS,STOS и др.

Варианты задания к лабораторной работе приведены в таблице 3.1.

Первый символ варианта обозначает операцию (Ф - формирование

кадра, Р - распаковка кадра). Второй символ задает способ формирования контрольной суммы (С - арифметическая сумма, Ч-

контроль по четности). Третья цифра является номером таблицы кодировки.

 

Таблица 3.1 - Варианты задания

 

N вар                        
Код ФС1 ФС2 ФЧ1 ФЧ2 ФС3 ФЧ3 РС1 РС2 РЧ1 РЧ2 РС3 РЧ3

 

Таблицы кодировки:

1. 2.

------------------------------ -------------------------------

| A Q | K 3 | U R | 3 M | | A N | K B | U 4 | 4 X |

| B L | L D | V 9 | 4 V | | B W | L P | V E | 5 8 |

| C O | M X | W B | 5 N | | C 7 | M 3 | W M | 6 J |

| D T | N 7 | X H | 6 E | | D F | N 5 | X 1 | 7 L |

| E W | O 4 | Y 5 | 7 Y | | E O | O I | Y G | 8 2 |

| F G | P U | 9 0 | 8 J | | J Y | T 0 | 3 R | 9 A |

| G Z | Q P | Z 8 | | | F Z | P T | Z Q | |

| H C | R 6 | 0 I | | | G 9 | Q U | 0 V | |

| I 1 | S Z | 1 F | | | H C | R D | 1 6 | |

| J A | T S | 2 K | | | I S | S K | 2 H | |

------------------------------- --------------------------------

3.

-------------------------------

| A 3 | K W | U N | 4 R |

| B L | L C | V 4 | 5 I |

| C X | M U | W D | 6 V |

| D 6 | N Z | X O | 7 Y |

| E Q | O 7 | Y 2 | 8 0 |

| F K | P S | Z 5 | 9 T |

| G B | Q F | 0 A | |

| H J | R 1 | 1 P | |

| I 8 | S M | 2 9 | |

| J E | T G | 3 H | |

--------------------------------

 

3.3 СОДЕРЖАНИЕ ОТЧЕТА

 

1) Постановка задачи.

2) Описание алгоритма.

3) Описание входных и выходных данных.

4) Текст программы.

5) Результаты тестирования.

6) Выводы по работе.

 

БИБЛИОГРАФИЯ

 

1 Абель П. Язык Ассемблера для IBM PC и программирования.- М.: Высшая школа, 1992.-447с.

2 Дао Л. Программирование микропроцессора 8088.- М.: Мир, 1988.- 355с.

3 Джордейн Р. Справочник программиста IBM PC AT.

4 Скэнлон Л. Персональные ЭВМ IBM PC AT и XT. Программирование на языке ассемблера. - М.: Радио и связь, 1989. – 335с.

5 Turbo Assembler. Version 3.2. User's Guide. Borland Internatiodnal INC, 1992. - 386p.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-12-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: