2. Краткие теоретические сведения.
Арифметические команды
Команды сложения
ADD <операнд1>, <операнд2> - команда сложения с принципом действия: <операнд1>:=<операнд1>+<операнд2>
ADC <операнд1>, <операнд2> - команда сложения с учетом флага переноса. Принцип действия: <операнд1>:=<операнд1>+<операнд2>+ значение CF
INC <операнд1> - операция инкремента, то есть увеличения значения операнда на 1.
В качестве <операнд1> можно использовать любой из регистров общего назначения или переменную в памяти, размерность в 1 байт, слово или двойное слово.
В качестве <операнд2> можно также использовать один из РОН, переменную в памяти.
Команды вычитания
SUB <операнд1>, <операнд2> - команда вычитания. Ее принцип действия: <операнд1>:= <операнд1> – <операнд2>.
SBB <операнд1>, <операнд2> - команда вычитания с учетом заема (флага CF ): <операнд1> := <операнд1> – <операнд2> – <значение_cf>.
DEC <операнд1> - операция декремента, то есть уменьшения значения операнда на 1.
Команды умножения
В составе МП есть две команды умножения, которые можно применять для умножения целых чисел без знака (MUL) и со знаком (IMUL).
Формат команды:
MUL <операнд>
IMUL <операнд>
IMUL <регистр 16/32>, <операнд1>
IMUL <регистр 16/32>, <операнд1>, <const>
В команде беззнакового умножения один сомножитель и произведение являются предопределенными регистрами общего назначения. Второй сомножитель может быть одним из РОН или переменной в памяти. Т.к. при умножении двух сомножителей результат всегда будет превышать размерность любого из них, то в качестве регистра для хранения произведения используется регистр или пара регистров, достаточная, чтобы хранить полный результат команды умножения.
Если в качестве <операнд> используется 8-ми разрядный регистр или байт в памяти, то в качестве второго сомножителя всегда используется регистр AL, а результат помещается в 16-ти разрядный регистр AX.
Если используется 16-ти разрядный регистр или переменная в памяти размерностью в два байта, то в качестве второго сомножителя всегда используется регистр AX, а результат помещается в два 16-ти разрядных регистра DX:AX – старшая часть в регистр DX, младшая – в AX.
Если используется 32-х разрядный регистр или переменная в памяти размерностью в 4 байта, то второй сомножитель всегда находится в регистре EAX, результат записывается в два 32-х разрядных регистра EDX:EAX.
Команды деления
В составе МП есть две команды деления, которые можно применять для деления целых чисел без знака (DIV) и со знаком (IDIV).
Формат команды:
DIV <операнд>
IDIV <операнд>
Операнд команды деления является делителем, делимое и результат операции – частное и остаток – помещаются в предопределенные регистры, зависящие от размерности операнда в команде.
Если длина <операнд> - байт, то предполагается, что делимое слово, находящееся в регистре AX, результат деления будет находится в регистре AL, остаток – в AH.
Если длина <операнд> - слово, то предполагается, что делимое двойное слово, находящееся в паре регистров DX:AX. Частное тогда запишется в регистр AX, остаток – в DX.
