- •4) Пpинципы оpганизации основных аппаpатных сpедств эвм (расслоение памяти, регистр перемещений, прерывания и опрос состояний, буферизация).
- •6) Организация ввода-вывода.
- •7) Методы повышения производительности эвм.
- •9) Микроархитектура современных пэвм. Гиперконвейерная организация процессора.
- •Регистры.
- •Сегментные регистры.
- •17) Основы языка Ассемблер
- •18) Команды логических операций. Сдвиговые команды.
- •19) Цепочечные команды. Префиксы повторения в цепочечных командах.
- •Insb считать из входного порта в приемник по адресу [di]
- •2. Команды умножения (mul, imul)
- •23) Команды условного и безусловного переходов.
- •Формат купу
- •Формат кбпу.
- •Передача параметров в п/п
- •Можно собрать макросы в отдельную библиотеку и писать программы, используя имена макросов в библиотеке.
- •3. Типы класса – имена, фиксированные (code, data, stack).
- •30) Базовая система ввода/вывода bios. Прерывания операционной системы dos. Средства
- •Прерывания ос
2. Команды умножения (mul, imul)
MUL <операнд> - умножает значение в регистре AL или AX на значение операнда <операнда>. Множимые числа должны быть одного типа, т.е. либо байт умножается на байт, либо слово умножается на слово. В первом случае произведение помещается в AX во втором в регистровую пару DX,AX.
Покажем фрагмент программы, реализующей умножение двух чисел. Первое число размером в 2 слова, а размер второго – слово.
AAM - Команда коррекции умножения чисел , представленных в ASCI формате. Перед перемножением необходимо избавиться от троек, т.е. представить код в распакованном десятичном формате. Команда коррекции умножения AAM выполняет корректировку результата умножения в регистре AX. Содержимое регистра делится на 10, результат помещается в AH а остаток в AL.
IMUL <операнд> - умножает значение в регистре AL или AX на значение <операнд>. Используется для умножения чисел с учетом их знака.
22) Арифметические команды: вычитание и деление двоичных и двоично-десятичных чисел.
Вычитание:
SUB Вычитание операндов
SBB Вычитание операндов и признака СF (заем)
DЕС Декремент операнда
СМР Сравнение операндов
NEG Изменение знака операнда
AAS АSCII-коррекция результата вычитания
DAS Десятичная коррекция результата вычитания
Деление:
DIV Беззнаковое деление
IDIV Знаковое (целочисленное) деление
AAD ASCII-коррекция результата деления
Команды вычитания
SUB <приемник>, <источник> вычитает содержимое источника из приемника, результат помещает в приемник. Действие: <приемник> = <приемник> - <источник>.
SBB <приемник> - <источник> - вычитание с заемом. Используется при вычитании длинных чисел. Действие: <приемник> = <приемник> - <источник> CF .
DAS - коррекция вычитания упакованных двоично-десятичных чисел.
Правило действия команды DAS: если в результате операции вычитания значение 4-х младших бит регистра AL>9, то из AL вычитается 6.
Например, необходимо вычислить разницу 55 - 26 (=29)
Пусть содержимое регистров AL=55h и BL=-26h
SUB AL, BL ; получим значение AL = 2Fh
DAS ; после коррекции AL = 29h
Проверьте действие команд с помощью AFDPRO.
Первая команда даст в результате число 2Fh. Так как полученное число значение младшей тетрады > 9, то команда DAS вычтет из результата число 6.
00101111 2Fh
+11111010 (-6 )
=00101001 (29h) получим окончательный результат 29h.
AAS - коррекция вычитания неупакованных десятичных чисел. Правило действия команды AAS:
если в регистре AL в результате операции вычитания значение 4 младших бита результата >9, то из AL вычитается 6.
CMP <приемник>, <источник> - команда сравнения аналогична команде вычитания,
но результат не запоминается. Результат отображается в состоянии флагов.
NEG <операнд> изменяет знак операнда.
Команды деления ( DIV, IDIV)
Делимое должно быть двойным по размерности типом данных по сравнению с делителем. Размер частного и остатка должен быть равен делителю. Если делитель равен 0 или частное не помещается в назначенный регистр, то операционная система реагирует на подобную ситуацию и выбирает тип ошибки “деление на ноль”.
Если делим на слово, то делимое размещается в регистрах DX, AX. Частное размещается в AX, а остаток в DX. Если делим на байт, то делимое размещается в регистре AX, частное размещается в AL, а остаток в AH. Нельзя делить на непосредственное число.
Формат команды:
DIV BL (AL = AX/BL )
DIV BX (AX= <DX,AX>/BX )
DIV MEMW (AX= <DX,AX>/MEMW )
SBW- преобразование байта в слово.
SBD- преобразование слова в двойное слово.
Деление в ASCI кодах.
AAD - Команда коррекции деления в неупакованной форме.
Команда коррекции деления AAD выполняется до непосредственного деления. Предварительно слова переводятся в распакованный десятичный формат. Содержимое AH умножается на 10 и прибавляется к содержимому AL, то есть получается двоичный код.