Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2022-10-05 | 27 |
5.00
из
|
Заказать работу |
|
|
Действия:
· сравнивает байт или слово, адресованные регистрами ES:DI с содержимым регистров AL или AX соответственно; если перед командой не стоит префикс repxx, то завершает работу. В противном случае
· увеличивает или уменьшает на 1 (на 2 для слова) в зависимости от флага направления адрес в регистре DI;
· уменьшает содержимое регистра CX на 1;
· если содержимое регистра CX не равно нулю и выполнилось условие, определяемое префиксом repxx, повторяет действия с первого шага. В противном случае выполняется очередная команда.
Форматы команд.
Код | Операнд | |
<метка>: | [rep ]scasb | |
<метка>: | [rep ]scasw | |
<метка>: | [rep ]scas | m |
Флаги. Команды воздействуют на флаги A, C, O, P, S, Z.
Замечание 6.1 также справедливо для команды scas.
Использование строковых команд.
page 60,132
;--------------------------------------------------------------------
stacksg segment para stack 'Stack'
dw 32 dup(?)
stacksg ends
;--------------------------------------------------------------------
datasg segment para 'Data'
name1 db 'Assemblers'
name2 db 10 dup(' ')
name3 db 10 dup(' ')
datasg ends
;--------------------------------------------------------------------
codesg segment para 'Code'
begin proc far
assume CS:codesg,DS:datasg,
SS:stacksg,ES:datasg
push DS
sub AX,AX
push AX
mov AX,datasg
mov DS,AX
mov ES,AX
call c10mvsb
call d10mvsw
call e10lods
call f10stos
call h10scas
ret
begin endp
; Использование MOVSB
; ------------------------------
c10mvsb proc near
cld
lea SI,name1
lea DI,name2
mov CX,10;Переслать 10 байтов
rep movsb ; из name1 в name2
ret
c10mvsb endp
; Использование MOVSW
; ------------------------------
d10mvsw proc near
cld
lea SI,name2
lea DI,name3
mov CX,5;Переслать 5 слов
rep movsw ; из name2 в name3
ret
d10mvsw endp
; Использование LODSW
; ------------------------------
e10lods proc near
cld
lea SI,name1;Загрузить 1-е слово
lodsw ; из name1 в AX
ret
e10lods endp
; Использование STOSW
; ------------------------------
f10stos proc near
cld
lea DI,name3
mov CX,5
mov AX,2020h;Заполнить пробелами
rep stosw ; поле name3
ret
f10stos endp
; Использование CMPSB
; ------------------------------
g10cmps proc near
cld
|
lea SI,name1
lea DI,name2
mov CX,10
repe cmpsb ;Сравнить name1 и name2
jne g20 ;если не равны
mov BH,01
g20: mov CX,10
lea SI,name2
lea DI,name3
repe cmpsb ;Сравнить name2 и name3
je g30 ;если равны
mov BL,02
g30: ret
g10cmps endp
; Использование SCASB
; ------------------------------
h10scas proc near
cld
lea DI,name
mov CX,10
mov AL,'m';Поиск символа ‘m’
repne scasb ; в name1
jne h20 ;если нет
mov BH,03
h20: ret
h10scas endp
codesg ends
end begin
6.3. Задания для самостоятельной работы
1. В сегменте данных представлена строка символов длиной N. Написать программу замены в этой строке первого встретившегося слева и первого встретившегося справа символов ‘*’ на пробел.
2. В сегменте данных представлена строка символов, конец которой отмечен ноль-символом (символом с кодом 0). Написать программу подсчета количества символов ‘*’ в этой строке.
3. В сегменте данных объявлены два подряд идущих поля
pattern db '***---'
disarea db 42 dup(?)
Напишите программу, которая заполнит все поле disarea следующим образом
***---***---***---***---... ***---
Для заполнения разрешается использовать только одну команду movsw с соответствующими подготовительными операциями.
4. Используя определение сегмента данных с базированием по абсолютному адресу видеобуфера, напишите программы
№ | Задание |
1 | перемещения содержимого экрана на n строк вверх (нижние освободившиеся строки очищаются); |
2 | перемещения содержимого экрана на n строк вниз (верхние освободившиеся строки очищаются); |
3 | перемещения содержимого экрана на n колонок вправо (левые освободившиеся колонки очищаются); |
4 | перемещения содержимого экрана на n колонок влево (правые освободившиеся колонки очищаются); |
5 | перестановки между собой строк с заданными номерами m и n; |
6 | замены цвета на экране у всех символов ‘*’, имеющих белый цвет на черном фоне, на желтый цвет на голубом фоне; |
7 | уплотнения текста на экране путем удаления в каждой строке слева от текста всех пробелов, имеющих атрибут цвета «белый на черном»; |
8 | циклического перемещения содержимого экрана на n строк вверх (нижние освободившиеся строки заполняются вышедшими за границу верхними строками); |
9 | циклического перемещения содержимого экрана на n строк вниз (верхние освободившиеся строки заполняются вышедшими за границу нижними строками); |
10 | циклического перемещения содержимого экрана на n колонок вправо (левые освободившиеся колонки заполняются вышедшими за границу правыми колонками); |
11 | циклического перемещения содержимого экрана на n колонок влево (правые освободившиеся колонки заполняются вышедшими за границу левыми колонками); |
12 | очистки прямоугольного фрагмента экрана с заданными координатами левого верхнего угла и длинами сторон с обрамлением фрагмента в рамку; |
13 | копирования прямоугольного фрагмента экрана с заданными координатами левого верхнего угла и длинами сторон в область экрана с координатами левого верхнего угла; |
14 | очистки экрана под ее диагональю (очистку производить пробелами с заданным атрибутом цвета); |
15 | очистки экрана над ее диагональю (очистку производить пробелами с заданным атрибутом цвета). |
|
ПРИЛОЖЕНИЕ A. Директивы
Таблица A. 1 Основные директивы ассемблера
Директива | Назначение |
1 | 2 |
assume <ср>:<ис>{,<ср>:<ис>} | Связывает сегментный регистр <ср> с сегментом с именем <ис> |
extrn <ви>:<тп>{,<ви>:<тп>} | Информирует ассемблер о том, что переменные и метки <ви>, имеющие тип <тп>, определены в других модулях |
group <ис>{,<ис>} | Объединяет однотипные сегменты под одно имя. Общий их объем не должен превышать 64 Кбайт |
include <иф> | Включает файл с именем <иф> в исходный текст программы |
<имя> label <тип> | Назначает имени, определенному за данным оператором, новое <имя> и <тип> |
name <им> | Назначает имя <им> модулю |
Продолжение таблицы A.1
|
1 | 2 |
org <кв> | Назначает значение константного выражения <кв> адресному счетчику и соответственно изменяет адрес следующего определяемого элемента. В выражении можно использовать символ ‘$’, обозначающий текущее значение адреса |
page m,n | Предписывает компилятору формировать листинг, имеющий m строк на странице и n символов в каждой строке |
<ип> proc [ near |far] | Отмечает начало процедуры с именем <ип> |
<ип> endp | Отмечает конец процедуры с именем <ип> |
public <ви>{,<ви>} | Информирует ассемблер о том, что имя <ви> должно быть доступно для других модулей |
<ис> segment <параметры> | Отмечает начало сегмента с параметрами <параметры> (см. разд.3.3) |
<ис> ends | Отмечает конец сегмента. |
Продолжение таблицы A.1
1 | 2 |
title <текст> | Предписывает компилятору вверху каждой страницы листинга выводить <текст> |
ПРИЛОЖЕНИЕ B. КомаНдЫ
Таблица B. 1 Арифметические операции
Код | Оп1 | Оп2 | Флаги | Примечание |
1 | 2 | 3 | 4 | 5 |
adc | r r,m | r,m v | A,C,O, P,S,Z | Если флаг C=1, то Оп1:=Оп1+1, иначе - нет. Затем Оп1:=Оп1+Оп2. Операция используется при сложении многословных величин для учета бита переполнения в последующих фазах операции |
add | r r,m | r,m v | A,C,O, P,S,Z | Оп1:=Оп1+Оп2 |
cmp | r r,m | r,m v | A,C,O, P,S,Z | Сравнивает содержимое двух полей данных |
dec | r,m | - | A,O,P,S,Z | Оп1:=Оп1-1 |
div | r,m | - | A,C,O, P,S,Z | Беззнаковое деление. Если Оп1 - однобайтный, то AL:=AX/Оп1; AH:=AX mod Оп1. Если Оп1 - двухбайтный, то AX:=<DX:AX>/Оп1 и DX:=<DX:AX> mod Оп1 |
idiv | r,m | - | A,C,O, P,S,Z | Знаковое деление. Выполняется аналогично команде div над знаковыми операндами |
Продолжение таблицы B.1
1 | 2 | 3 | 4 | 5 |
imul | r,m | - | C,O | Знаковое умножение. Если Оп1 - однобайтный, то AX:=AL*Оп1. Если Оп1 - двухбайтный, то <DX:AX>:=AX*Оп1 |
inc | r,m | - | A,O,P,S,Z | Оп1:=Оп1+1 |
mul | r,m | - | Беззнаковое умножение. Если Оп1 - однобайтный, то AX:=AL*Оп1. Если Оп1 - двухбайтный, то <DX:AX>:=AX*Оп1 | |
neg | r,m | - | A,C,O, P,S,Z | Изменяет знак числа на противоположный |
sbb | r r,m | r,m v | A,C,O, P,S,Z | Если флаг C=1, то Оп1:=Оп1-1, иначе - нет. Затем Оп1:=Оп1-Оп2. Операция используется при сложении многословных величин |
sub | r r,m | r,m v | A,C,O, P,S,Z | Оп1:=Оп1-Оп2 |
|
Таблица B. 2. Команды передачи управления
Код | Переход, если | Примечание |
1 | 2 | 3 |
call | -- | Вызов процедуры |
Продолжение таблицы B.2
1 | 2 | 3 |
ja/jnbe | C=0, Z=0 | Переход по «выше» или «не ниже или равно» |
jae/jnb | C=0 | Переход по «выше или равно» или «не ниже» |
jb/jnae | C=1 | Переход по «ниже» или «не выше или равно» |
jbe/jna | C=1 or A=1 | Переход по «ниже или равно» или «не выше» |
jc | C=1 | Переход по переносу |
jcxz | Регистр CX=0 | Переход по CX=0 |
je/jz | Z=1 | Переход по «равно» или по «нулю» |
jg/jnle | Z=0 and S=O | Переход по «больше» или «не меньше или равно» |
jge/jnl | S=O | Переход по «больше или равно» или «не меньше» |
jl/jnge | S O | Переход по «меньше» или «не больше или равно» |
jle/jng | Z=1 and S O | Переход по «меньше или равно» или «не больше» |
jmp | -- | Безусловный переход |
jnc | C=0 | Переход, если нет переноса |
jne/jnz | Z=0 | Переход по «не равно» или по «не ноль» |
jno | O=0 | Переход, если нет переполнения |
jnp/jpo | P=0 | Переход, если нет паритета или паритет нечетный |
jns | S=0 | Переход, если нет знака |
jo | O=1 | Переход по переполнению |
Продолжение таблицы B.2
1 | 2 | 3 |
jp/jpe | P=1 | Переход, если есть паритет или паритет четный |
js | S=1 | Переход, если есть знак |
loop | CX 0 | CX:=CX-1; Затем, если CX 0, передает управление |
loope loopz | CX 0 and Z=1 | CX:=CX-1; Затем, если CX 0 и результат сравнения - ноль (равно), передает управление |
loopne loopnz | CX 0 and Z=0 | CX:=CX-1; Затем, если CX 0 и результат сравнения - не ноль (не равно), передает управление |
Таблица B. 3. Команды загрузки и пересылки
Код | Оп1 | Оп2 | Примечание |
1 | 2 | 3 | 4 |
lea | r | m | Загружает адрес поля Оп2 в регистр Оп1 |
lds | r | m | Загружает 4-байтовое значение из памяти Оп2 в регистр DS (2 байта) и в регистр Оп1 (2 байта) |
les | r | m | Загружает 4-байтовое значение из памяти Оп2 в регистр ES (2 байта) и в регистр Оп1 (2 байта) |
mov | r r,m | r,m v | Оп1:=Оп2 |
Таблица B. 4. Строковые операции
Предикаты * | Код | Флаги | Примечание |
1 | 2 | 3 | 4 |
repe, repz, repne, repnz | cmps | A,C,O, P,S,F | Сравнивает строки любой длины, адресуемые регистровыми парами DS:SI и ES:DI. Сравнение происходит побайтно, если в операндах указана ссылка на поле байт, или по словам, если - на массив слов |
repe, repz, repne, repnz | cmpsb | A,C,O, P,S,F | Сравнивает строки любой длины, адресуемые регистровыми парами DS:SI и ES:DI. Сравнение происходит побайтно. Операндов нет |
repe, repz, repne, repnz | cmpsw | A,C,O, P,S,F | Сравнивает строки любой длины, адресуемые регистровыми парами DS:SI и ES:DI. Сравнение происходит по словам. Операндов нет |
Продолжение таблицы B.4
1 | 2 | 3 | 4 |
Lods | -- | Загружает из памяти, адресуемой регистровой парой DS:SI, байт в регистр AL, если в операнде имеется ссылка на байтовое поле, или слово в регистр AX, если в операнде имеется ссылка на массив слов | |
lodsb | -- | Загружает из памяти, адресуемой регистровой парой DS:SI, байт в регистр AL. Операндов нет | |
lodsw | -- | Загружает из памяти, адресуемой регистровой парой DS:SI, слово в регистр AX. Операндов нет |
Продолжение таблицы B.4
|
1 | 2 | 3 | 4 |
rep | movs | -- | Пересылает данные из области памяти, адресуемой регистровой парой ES:DI, в область памяти, адресуемую парой DS:SI. Пересылка происходит побайтно, если в операндах указана ссылка на поле байт, или по словам, если в операндах имеется ссылка на массив слов |
rep | movsb | -- | Пересылает данные из области памяти, адресуемой регистровой парой ES:DI, в область памяти, адресуемую парой DS:SI. Пересылка происходит побайтно. Операндов нет |
rep | movsw | -- | Пересылает данные из области памяти, адресуемой регистровой парой ES:DI, в область памяти, адресуемую парой DS:SI. Пересылка происходит по словам. Операндов нет |
Продолжение таблицы B.4
1 | 2 | 3 | 4 |
repe, repz, repne, repnz | scas | A,C,O, P,S,Z | Выполняет сравнение байта, адресуемого регистровой парой DS:SI, с содержимым регистра AL, если в операнде имеется ссылка на байтовое поле, или слова с содержимым регистра AX, если в операнде имеется ссылка на массив слов |
repe, repz, repne, repnz | scasb | A,C,O, P,S,Z | Выполняет сравнение байта, адресуемого регистровой парой DS:SI, с содержимым регистра AL. Операндов нет |
repe, repz, repne, repnz | scasw | A,C,O, P,S,Z | Выполняет сравнение слова, адресуемого регистровой парой DS:SI, с содержимым регистра AX. Операндов нет |
Продолжение таблицы B.4
1 | 2 | 3 | 4 |
rep | stos | -- | Сохраняет в памяти, адресуемой регистровой парой DS:SI, байт из регистра AL, если в операнде имеется ссылка на байтовое поле, или слово из регистра AX, если в операнде имеется ссылка на массив слов |
rep | stosb | -- | Сохраняет в памяти, адресуемой регистровой парой DS:SI, байт из регистра AL |
rep | stosw | -- | Сохраняет в памяти, адресуемой регистровой парой DS:SI, слово из регистра AX |
Таблица B. 5 Операции над флагами.
Код | Примечание |
1 | 2 |
clc | Сброс флага переноса (C:=0) |
cld | Сброс флага направления (D:=0) |
cli | Сброс флага прерывания (I:=0) |
cmc | Переключение флага переноса (C:=not C) |
stc | Установка флага переноса (C:=1) |
Продолжение таблицы B.5
1 | 2 |
std | Установка флага направления (D:=1). |
sti | Установка флага прерывания (I:=1). |
Таблица B. 6 Команды работы со стеком.
Код | Оп | Примечание |
pop | r, m | Извлекает из стека слово и помещает в Оп |
popa | -- | Извлекает из стека восемь слов и помещает в регистры DI, SI, BP, SP, BX, DX, CX, AX |
popf | -- | Извлекает из стека слово и помещает в регистр флагов |
push | r, m | Помещает слово из Оп в стек |
pusha | -- | Помещает в стек восемь слов из регистров AX, CX, DX, BX, SP, BP, SI, DI |
pushf | -- | Помещает в стек содержимое регистра флагов |
Таблица B. 7 Побитовые логические операции.
Код | Оп1 | Оп2 | Флаги | Примечание |
1 | 2 | 3 | 4 | 5 |
and | r r, m | r, m v | C, O, P, S, Z | Выполняет поразрядную конъюнкцию двух операндов Оп1:=Оп1 & Оп2 |
not | r, m | -- | -- | Выполняет поразрядную инверсию Оп1:=ØОп1 |
Продолжение таблицы B.7
1 | 2 | 3 | 4 | 5 |
or | r r, m | r, m v | C, O, P, S, Z | Выполняет поразрядную дизъюнкцию двух операндов Оп1:=Оп1 Ú Оп2 |
test | r r, m | r, m v | C, O, P, S, Z | Выполняет проверку байта или слова на определенную битовую комбинацию. Действует, как команда and, но не изменяет операнда. |
xor | r r, m | r, m v | C, O, P, S, Z | Выполняет поразрядное сложение по модулю 2 Оп1:=ØОп1&Оп2 Ú Оп1&ØОп2 |
библиографический список
1. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В. Сальникова. М.: Высш. шк., 1992. 447 с.
2. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ. / Предисл. Н.В. Гайского. М.: Финансы и статистика, 1992. 544 с.
3. Каган Б.М. Электронные вычислительные машины и системы: Учеб. пособие для вузов. М.: Энергоатомиздат, 1985. 552 с.
4. Орловский Г.В. Введение в архитектуру микропроцессора 80386. - С.-Пб.: Сенанс-Пресс LTD, 1992. 240 с.
Оглавление
Введение.................................................................................... 3
Работа 1. Системы счисления................................... 4
1.1. Позиционные системы счисления................................ 4
1.2. Двоичная арифметика...................................................... 5
1.3. Прямой, обратный и дополнительный коды................ 5
1.4. Формы представления чисел в ЭВМ.............................. 7
1.5. Задания для самостоятельной работы......................... 8
Работа 2. Адресация памяти..................................... 10
2.1. Адресные структуры........................................................ 10
2.2. Способы адресации......................................................... 10
Подразумеваемый операнд................................................... 11
Непосредственная адресация.............................................. 11
Прямая адресация................................................................. 11
Относительная адресация или базирование...................... 11
Укороченная адресация........................................................ 11
Регистровая адресация........................................................ 11
Автоинкрементная (автодекрементная) адресация........ 11
2.3. Особенности адресации памяти процессором семейства Intel 80x86 (реальный режим) 11
Сегментация памяти........................................................... 11
Регистровая адресация........................................................ 12
Формирование адресного кода............................................ 14
2.4. Задания для самостоятельной работы....................... 15
Работа 3. Форматы команд и структура программы 17
3.1. Кодирование команд...................................................... 17
3.2. Формат команд языка Assembler................................ 17
3.3. Основные директивы компилятора............................. 18
Директива SEGMENT....................................................... 18
Директива GROUP.............................................................. 20
Директива ASSUME........................................................... 20
Директивы определения данных.......................................... 21
Директива EQU................................................................... 22
Директива PROC................................................................. 22
Директивы EXTRN и PUBLIC......................................... 22
Директива END................................................................... 23
3.4. Мнемонические команды............................................. 23
3.5. Структура программы..................................................... 24
Структура и инициализация EXE-программ..................... 24
Структура и инициализация COM-программ.................... 25
3.6. Задания для самостоятельной работы....................... 26
Работа 4. Арифметические операции................. 30
4.1. Форматы и назначение команд.................................... 30
Сложение двоичных чисел (ADD)....................................... 30
Вычитание двоичных чисел (SUB)..................................... 30
Сложение с переносом (ADC)............................................. 30
Вычитание с заемом (SBB)................................................. 30
Умножение (MUL)............................................................... 30
Деление (DIV)........................................................................ 31
Знаковое умножение и знаковое деление (IMUL и IDIV) 31
Инкремент (INC)................................................................. 31
Декремент (DEC)................................................................. 31
Сравнение (CMP).................................................................. 32
4.2. Отображение арифметических значений (пример программы) 32
4.3. Задания для самостоятельной работы....................... 33
Работа 5. Команды передачи управления...... 35
5.1. Команды перехода........................................................... 35
Безусловный переход (JMP)................................................. 35
Условный переход (Jnnn).................................................... 36
5.2. Команды организации цикла........................................ 37
Команда (LOOP).................................................................. 37
Команда проверки регистра CX (JCXZ)........................ 38
5.3. Вызов процедуры.............................................................. 38
Команда вызова процедуры (CALL).................................. 38
Команда возврата из процедуры (RET)............................ 38
5.4. Задания для самостоятельной работы....................... 39
Работа 6. Обработка строковых данных......... 41
6.1. Команды пересылки........................................................ 41
Пересылка байтов (MOVSB)............................................. 41
Пересылка слов (MOVSW).................................................. 41
Пересылка байтов или слов (MOVS)................................. 42
Загрузка байта/слова (LODSB/LODSW)............................. 42
Загрузка байта или слова (LODS)...................................... 43
Запись байта/слова (STOSB/STOSW).................................. 43
Запись байта или слова (STOS).......................................... 43
6.2. Команды сравнения........................................................ 43
Сравнение байтов (CMPSB).............................................. 44
Сравнение слов (CMPSW)................................................... 44
Сравнение байтов или слов (CMPS).................................. 44
Сканирование строки (SCASB/SCASW/SCAS).................... 44
6.3. Задания для самостоятельной работы....................... 47
ПРИЛОЖЕНИЕ A. Директивы.......................................... 49
ПРИЛОЖЕНИЕ B. КомаНдЫ.............................................. 51
библиографический список.................................... 58
Лицензия №0243 от 20.01.99 г.
Подписано в печать 14.05.2000 Формат 60x84 1/16.
Бумага писчая. Печать RISO. 6,5 усл.печ.л.
Тираж 100 Заказ 153
Издательство Казанского математического общества.
420008, Казань, Университетская, 17.
Офсетная лаборатория Нижнекамского химико-технологического института.
423550, Нижнекамск, пр. Строителей, 47
* Предикаты повторения, если они есть, требуют выполнения команды, пока счетчик CX0 и выполняется условие, определенное предикатом. При этом происходит автоматическое увеличение индексных регистров SI и/или DI, если флаг направления D =0, и происходит их уменьшение, если D =1.
|
|
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!