зависимости от того какой тип процедуры мы используем следует осторожно работать со следующими регистрами: ds, ss, sp, bp.
Регистр ds отвечает за сегмент данных, поэтому его изменение без восстановления приведёт к зависанию программы, тоже относится и к остальным перечисленным регистрам, поэтому если вы будете изменять, то их необходимо предварительно сохранить и в конце работы кода на ассемблере восстановить. Регистр bp используется для доступа к параметрам передаваемым в процедуры.
1) Изучить теоретическую часть.
2) Написать подпрограмму на ассемблере выполняющую те же действия, что процедура Insert в Паскале. Проводить контроль выход за пределы размерности строк и производить необходимое отсечение данных.
3) Написать подпрограммы производящую сложение, вычитание, умножение и деление 32-битовых чисел используя 16-битные регистры, предварительно требуется определить на Паскале тип работы с такими данными. Оформить в отдельные процедуры и написать на Паскале процедуры вывода значений данного типа используя процедуру Write и WriteLn.
4) Результатом работы является рабочая программа, и отчет, в котором должен быть представлен листинг и пример работы программы.
Это приложение является справочником по базовой системе команд семейства процессоров Intel. В справочник включены команды для моделей процессоров 80386 и более поздних. Для описания форматов команд используется ряд аббревиатур, представленных в табл. А.1. Сами команды описаны в табл. А.2.
Таблица А.1. Аббревиатуры команд
5)
Обозначение |
Краткое описание |
Reg |
Один из 8-, 16- или 32-разрядных регистров из списка: АН, AL,ВН, BL, СН, CL, АХ, ВХ, СХ, DX, SI, DI, BP, SP, ЕАХ, ЕВХ, ЕСХ,EDX, ESI, EDI, EBP, ESP |
reg8, regl6, reg32 |
Регистр общего назначения, определяемый количеством битов |
Асе |
AL, АХ или ЕАХ |
Mem |
Операнд в памяти |
mem8, meml6, mem32 |
Операнд в памяти, определяемый количеством битов |
Immed |
Непосредственный операнд |
immed8, immedl6, immed32 |
Непосредственный операнд с определенным количеством битов |
Label |
Метка |
Код операции |
Операнды |
Функция |
ааа |
ASCII-коррекция после сложения |
|
aad |
ASCII-коррекция перед делением |
|
aam |
ASCII-коррекция после умножения |
|
aas |
ASCII-коррекция после вычитания |
|
adc |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Сложение с переносом |
add |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Сложение |
and |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Логическое И |
bsf, bsr |
reg 16, reg 16 regl6, meml6 reg32, reg32 reg32, mem32 |
Сканирование битов |
bt, btc, btr, Ms |
reg 16, immed8 reg 16, regl6 meml6, immed8 meml6, regl6 |
Проверка битов |
call |
label reg meml6 mem32 |
Вызов процедуры |
cbw |
Преобразование байта в слово |
|
cdq |
Преобразование двойного слова в учетверенное |
|
clc |
Сброс флага переноса |
|
aas |
ASCII-коррекция после вычитания |
|
adc |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Сложение с переносом |
add |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Сложение |
and |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Логическое И |
bsf, bsr |
reg 16, reg 16 regl6, meml6 reg32, reg32 reg32, mem32 |
Сканирование битов |
bt, btc, btr, Ms |
reg 16, immed8 reg 16, regl6 meml6, immed8 meml6, regl6 |
Проверка битов |
call |
label reg meml6 mem32 |
Вызов процедуры |
cbw |
Преобразование байта в слово |
|
cdq |
Преобразование двойного слова в учетверенное |
|
clc |
Сброс флага переноса |
|
dd |
Сброс флага направления |
|
di |
Сброс флага прерывания |
|
cmc |
Инвертирование флага переноса |
|
cmp |
Сравнение операндов |
|
cmps, cmpsb, cmpsw, cmpsd |
mem, mem |
Сравнение строк |
cwd |
Преобразование слова в двойное слово |
|
daa |
Десятичная коррекция после сложения |
|
das |
Десятичная коррекция после вычитания |
|
dec |
reg mem |
Декремент |
div |
reg mem |
Деление без знака |
idiv |
reg mem |
Деление целых чисел со знаком |
imul |
reg mem |
Умножение целых чисел со знаком |
in |
acc, immed |
Ввод из порта |
inc |
reg mem |
Инкремент |
int |
Генерирование программного прерывания |
|
iret |
Возврат из прерывания |
|
Jcondition |
label |
Переход, если выполнено условие |
jmp |
label |
Безусловный переход |
lahf |
Загрузка флагов в АН |
|
Ids, les, Its, Igs, Iss |
Загрузка дальнего указателя |
|
lea |
reg, mem |
Загрузка текущего адреса |
lods, lodsb, lodsw, lodsd |
mem |
Загрузка строки в аккумулятор |
loop |
label |
Цикл, в котором выполняется декремент регистра СХ и переход на метку, пока СХ больше 0 |
loope, loopz |
label |
Цикл, если равно 0. Декремент регистра СХ и переход на метку, если СХ больше 0 и флаг нуля установлен |
loopne, loopz |
label |
Цикл, если не равно 0. Декремент регистра СХ и переход на метку, если СХ больше 0 и флаг нуля сброшен |
mov |
reg, reg mem, reg reg, mem reg, immed mem, immed |
Пересылка операндов |
movs, movsb, movsw, movsd |
mem, mem |
Пересылка строк |
mul |
reg mem |
Умножение целых чисел без знака |
neg |
reg mem |
Изменение знака операнда |
nop |
Отсутствие операций; используется для организации задержек в циклах |
|
not |
reg mem |
Логическое НЕ; инвертирование каждого бита операнда |
or |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Логическое ИЛИ |
out |
immed, acc DX, acc |
Вывод в порт |
pop |
regl6 reg32 meml6 mem32 |
Извлечение операнда из стека |
popa, popad |
Извлечение из стека регистров общего назначения (рора — 16-разрядных, popad— 32-разрядных) |
|
popf, popfd |
Извлечение флагов из стека |
|
push |
regl6 reg32 meml6 mem32 |
Помещение в стек |
pusha, pushad |
Помещение в стек всех регистров |
|
pushf, pushfd |
Помещение регистра флагов в стек |
|
rd |
reg, immed8 reg, CL mem, immed8 mem, CL |
Циклический сдвиг операнда влево через флаг переноса |
rcr |
reg, immed8 reg,CL mem, immed8 mem, CL |
Циклический сдвиг операнда вправо через флаг переноса |
rep |
Повторение команды для строкового примитива с использованием регистра СХ как счетчика |
|
repcondition |
Повторение команд строковых примитивов по условию |
|
ret |
Возврат из процедуры |
|
retn |
immed8 |
Возврат из процедуры с восстановлением стека. Непосредственный операнд определяет значение, которое должно быть добавлено к регистру-указателю стека |
rol |
reg, immed8 reg, CL mem, immed8 mem, CL |
Циклический сдвиг влево |
ror |
reg, immed8 reg, CL mem, immed8 mem, CL |
Циклический сдвиг вправо |
sahf |
Загрузка регистра флагов из регистра АН |
|
sal |
reg, immed8 reg, CL mem, immed8 mem, CL |
Арифметический сдвиг влево |
sar |
reg, immed8 reg, CL mem, immed8 mem, CL |
Арифметический сдвиг вправо |
sbb |
reg, reg mem, reg reg, mem reg, immed mem, immed |
Вычитание с заемом |
seas, scasb, scasw, scasd |
mem |
Сканирование строки со сравнением значений элементов со значением в аккумуляторе |
SETcondition |
reg8 mem8 |
Установка по условию. Если заданное условие истинно, то байт-получатель устанавливается в 1, если ложно — в 0 |
shl |
reg, immed8 reg,CL mem, immed8 mem, CL |
Логический сдвиг влево |
shr |
reg, immed8 reg, CL mem, immed8 mem, CL |
Логический сдвиг вправо |
stc |
Установка флага переноса |
|
std |
Установка флага направления |
|
sti |
Установка флага прерывания |
|
stos, stosb, stosw, stosd |
mem |
Сохранение содержимого аккумулятора в ячейке памяти, принадлежащей буферу строки |
sub |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Вычитание |
test |
reg, reg mem, reg reg, mem reg, immed mem, immed acc, immed |
Проверка отдельных битов операнда-получателя с соответствующими битами операнда-приемника. Выполняется операция логического И, в результате устанавливаются соответствующие флаги |
wait |
Приостановка процессора |
|
xchg |
reg, reg mem, reg reg, mem |
Обмен содержимым операнда-отправителя и операнда-получателя |
xlat, xlatb |
mem |
Использование значения в регистре ALкак индекса |
таблицы, на которую указывает содержимое |
||
регистра ВХ |
||
xor |
reg, reg |
Логическое исключающее ИЛИ |
mem, reg |
||
reg, mem |
||
reg, immed |
||
mem, immed |
||
acc, immed |
Это приложение является справочником по специальным командам семейства процессоров Intel Pentium. Для описания форматов команд используется ряд аббревиатур, представленных в табл. Б.1. Сами команды описаны в табл. Б.2 и Б.З.
Обозначение |
Краткое описание |
Reg |
Один из 8-, 16- или 32-разрядных регистров из списка: |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.