Библиотека knigago >> Компьютеры: Языки и системы программирования >> Assembler >> Ассемблер в примерах и задачах


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 2231, книга: Рисунок Дароткана
автор: Геннадий Самойлович Гор

Научная фантастика В захватывающем романе Геннадия Гора «Рисунок Дароткана» читатели отправляются в захватывающее путешествие по просторам космоса, где научная фантастика переплетается с древними секретами и судьбами целых планет. История начинается с загадочного рисунка, обнаруженного археологами на далеком мире Даротке. Этот рисунок содержит ключи к величайшему открытию человечества: порталу, позволяющему путешествовать между галактиками. Команду исследователей возглавляет доктор Эрик...

СЛУЧАЙНАЯ КНИГА

Думер. Игорь Нокс
- Думер

Жанр: Альтернативная история

Год издания: 2022

Серия: Как я прыгал между мирами

Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша - Ассемблер в примерах и задачах

Ассемблер в примерах и задачах
Книга - Ассемблер в примерах и задачах.  Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша  - прочитать полностью в библиотеке КнигаГо
Название:
Ассемблер в примерах и задачах
Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша

Жанр:

Учебники и самоучители по компьютеру, Программирование: прочее, Assembler

Изадано в серии:

неизвестно

Издательство:

Кубанский государственный университет

Год издания:

ISBN:

978-5-8209-2052-3

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Ассемблер в примерах и задачах"

Изложены фундаментальные темы: организация современного компьютера, устройство процессоров семейства IA-32, синтаксис языка ассемблера, макросредства, программирование типовых управляющих структур, сложные структуры данных, оптимизация программ. Приведены многочисленные примеры, иллюстрирующие материал. Адресуется студентам факультета компьютерных технологий и прикладной математики, изучающим основы программирования.

Читаем онлайн "Ассемблер в примерах и задачах". [Страница - 13]

которое заранее неизвестно
; Знаковое расширение EAX в EDX:EAX

В языке ассемблера существуют также команды,
позволяющие занести в регистр значение другого регистра или
ячейки памяти со знаковым или беззнаковым расширением.
MOVSX op1, op2; Заполнение знаковым битом
MOVZX op1, op2; Старшие биты заполняются нулём
op1, op2 могут иметь любой размер. Понятно, что op1 должен
быть больше, чем op2. В случае равенства размера операндов
следует использовать обычную команду пересылки MOV, которая

выполняется быстрее.
4.7. КОМАНДЫ УМНОЖЕНИЯ И ДЕЛЕНИЯ
В отличие от сложения и вычитания, умножение и деление
для беззнаковых и знаковых чисел выполняются по разным
алгоритмам.
4.7.1. Команды умножения
Операции умножения для беззнаковых данных выполняются
командой MUL1, а для знаковых – IMUL2.
1
2

Multiply – умножение.
Integer multiply – целочисленное умножение.
42

Команды умножения и деления

Эти команды реализованы для процессора 80186+.
MUL op ; умножение целых без знака
IMUL op ; умножение целых со знаком

Если размерность операнда op 8 бит, то команды MUL и IMUL
умножают содержимого регистра AL на значение операнда и
помещают результат в регистр AX.
Если операнд – 16-битное слово, команды MUL и IMUL
умножают содержимого регистра AX на значение операнда и
помещают результат в пару регистров DX:AX.
Если операнд – двойное слово, команды MUL и IMUL
умножают содержимого регистра EAX на значение операнда и
помещают результат в пару регистров EDX:EAX.
Команда знакового умножения имеет еще две формы.
IMUL op1, op2; op1 = op1 * op2
op1: (r16, r32)
op2: (r16, m16, r32, m32, i8, i16, i32)

Команда выполняет умножение первого операнда на второй
и помещает результат в первый операнд.
Разрядность операндов должна совпадать. Исключением
является использование в качестве второго операнда
непосредственного 8-битного значения.
IMUL op1, op2, op3; op1 = op2 * op3
op1: (r16, r32)
op2: (r16, m16, r32, m32)
op3: (i8, i16, i32)

Команда выполняет умножение второго операнда на третий
операнд и помещает результат в первый операнд.
Разрядность операндов должна совпадать. Исключением
является использование в качестве второго операнда
непосредственного 8-битного значения.
Ответственность за контроль над форматом обрабатываемых
чисел и за выбор подходящей команды умножения лежит на
программисте.
; Пример использования MUL, IMUL
43

Ассемблер в примерах и задачах

.686
include /masm32/include/io.asm
.data
A_DB DB ?
A_DW DW ?
.code
start:
; MUL op = = = = = = = = = = = = = = = = = = = = = =
println "MUL op ; AX = AL * op"
; op1 (r8, r16, r32)
MOV AL,
15
MOV A_DB, 3
print "Res = "
outint8 AL
print "*"
outint8 A_DB
print " = "
MUL A_DB
; AX = AL * A_DB
outint16 AX
newline
MOV AL, -15
MOV A_DB, 3
print "Res = "
outint8 AL
print "*"
outint8 A_DB
print " = "
MUL A_DB
; AX = AL * A_DB
outint16 AX
println "
!!! MUL для op меньше 0 не работает"
newline
; IMUL op1, op2 = = = = = = = = = = = = = = = = = =
println "IMUL op1, op2;
op1 = op1 * op2"
; op1: (r16)
; op2: (r16)
MOV AX, 15
MOV BX, 3
print "Res = "
outint16 AX
print "*"
outint16 BX
44

Команды умножения и деления

print " = "
IMUL AX, BX
outint16 AX
newline

; AX = AX * BX

MOV EAX, 15
MOV EBX, -3
print "Res = "
outint32 EAX
print "*"
outint32 EBX
print " = "
IMUL EAX, EBX
outint32 EAX
newline

; EAX = EAX * EBX

; IMUL op1, op2, op3;
op1 = op2 * op3 = = = = = =
println "IMUL op1, op2, op3; op1 = op2 * op3"
; op1: (r8, r16, r32)
; op2: (i8, i16, i32)
; op3: (r8, r16, r32), (m8,m16,m32), (i8,i16,i32)
MOV AX, 15
MOV A_DW, 3
print "Res = "
outint16 AX
print "*"
outint16 A_DW
print " = "
IMUL BX, AX, 3
outint16 BX
newline
inkey
exit
end start

; BX = AX * 3

; ожидание нажатия клавиши

45

Ассемблер в примерах и задачах

Команда MUL при AL = –15 и op=3 дает результат 723, так как
отрицательное значение –15 представлено в дополнительном коде:
15
Прямой код
00001111(2)
Инверсия
11110000(2)
+1
–15 Дополнительный код
11110001(2) = F1h
В десятичной системе счисления: F1h = 15*16+1 = 241(10),
тогда умножение 241*3=723.

4.7.2. Команды деления
Как и умножение, деление чисел без знака и со знаком также
реализуется двумя командами:
DIV1 op ; деление целых без знака
IDIV2 op ; деление целых со знаком

Деление слова на байт (op DB ?):
AH = АХ % op,

AL = AX / op

Деление двойного слова на слово (op DW ?):

DX = (DX,AX) % op,

AX = (DX,AX) / op

Деление четверного слова на двойное слово (op DD ?):
EDX=(EDX:EAX) % op,

EAX=(EDX:EAX) / op

При делении слова на байт делимое находится в регистре АХ,
а делитель – в байте памяти или в однобайтовом регистре. После
деления остаток получается в регистре АН, а частное – в АL. Так как
однобайтовое частное очень мало – максимально 255 --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.