Cap9 - Instruções de multiplicação e divisão

Cap9 - Instruções de multiplicação e divisão

(Parte 1 de 4)

Cap9 – Instruções de multiplicação e divisão

Página 1 de 13

9. Instruções de multiplicação e divisão

9.1 Instruções de multiplicação

MUL fonte IMUL fonte

·MUL (multiply) -> usada com números em representação não-sinalizada

·IMUL (integer multiply) -> usada com números sinalizados

·Multiplicação com números em formato byte: - registradores de 8 bits e variáveis de tipo DB

- segundo operando é assumido em AL

- resultado (destino) pode atingir 16 bits e se encontra em AX

·Multiplicação com números em formato word: - registradores de 16 bits e variáveis de tipo DW

- segundo operando é assumido em AX

- resultado pode atingir 32 bits (tamanho doubleword) e se encontra em

DX -> 16 bits mais significativos (high word) AX -> 16 bits menos significativos (low word)

·Para números positivos (MSB = 0), MUL e IMUL dão o mesmo resultado.

·Flags afetados:

SF, ZF, AF, PF -> indefinidos após MUL, CF/OF (ambos)= 0 , se a metade superior do resultado é 0 = 1 , caso contrário após IMUL, CF/OF (ambos)= 0 , se a metade superior do resultado for extensão do sinal da metade inferior = 1 , caso contrário

Cap9 – Instruções de multiplicação e divisão

Página 2 de 13

Exemplos de casos de multiplição:

antes:AX = 0001 h = 0 0 0 0001b =1ou +1

1) Suponha que AX contenha 0001h BX contenha FFFFh: BX = F h = 1 1 1 1b = 65535 ou -1

Instrução Resultado decimal

Resultado hexadecimal DX AX CF/OF

IMUL BX-1F F hF hF h0

MUL BX655350000 F h0000 hF h0

2) Suponha que AX contenha 0FFF h: antes:AX = 0FFF h = 0 1 1 1 h = 4095 ou + 4095

Instrução Resultado decimal

Resultado hexadecimal DX AX CF/OF

MUL AX1676902500FF E001 h00FF hE001 h1 IMUL AX1676902500FF E001 h00FF hE001 h1

3) Suponha que AL contenha 80h BL contenha FFh:

BL = F h = 1 1 b = 255 ou-1

antes:AL = 80 h = 1000 0 b = 128ou -128

Instrução Resultado decimal

Resultado hexadecimal AH AL CF/OF

MUL BL326407F80 h7F h80 h1 IMUL BL 1280080 h00 h80 h1

Cap9 – Instruções de multiplicação e divisão

Página 3 de 13

9.2 Instruções de divisão

DIV fonte IDIV fonte

·DIV (divide) -> usada com números em representação não-sinalizada

·IDIV (integer divide) -> usada com números sinalizados

·fonte deve ser considerado como divisor (não pode ser uma constante)

Divisão com números em formato byte: - o divisor é assumido ser de 8 bits (1 byte)

- o dividendo é assumido estar em AX (16 bits)

- após a execução: o quociente de 8 bits estará em AL o resto de 8 bits estará em AH

Divisão com números em formato word: - o divisor é assumido ser de 16 bits (1 word)

- o dividendo é assumido ser de 32 bits:

DX -> 16 bits mais significativos do dividendo (high word) AX -> 16 bits menos significativos do dividendo (low word)

- após a execução: o quociente de 16 bits estará em AX o resto de 16 bits estará em DX

·Para números positivos (MSB = 0), DIV e IDIV fornecem o mesmo resultado.

·Flags afetados: todos ficam indefinidos

·Em divisão de números em representação sinalizada, o resto possui o mesmo sinal do dividendo.

(Parte 1 de 4)

Comentários