Baixe o app para aproveitar ainda mais
Prévia do material em texto
CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 1 MATA49 Programação de Software Básico Leandro Andrade leandrojsa<at>dcc.ufba.br CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 2 Instruções para operações aritméticas Parte 2 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 3 Operações Aritméticas ● MUL: – Multiplicação de inteiros sem sinal – O operando pode ser um registrador ou variável ● Não pode ser um operador imediato – Sintaxe: MUL <operando> ● O resultado é armazenado AL, AX, EAX (dependendo do tamanho do operando) CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 4 Operações Aritméticas ● MUL: – Exemplos: MUL reg8/mem8 ;AL = AL * reg8/mem8 MUL reg16/mem16 ;AX = AX * reg16/mem16 MUL reg32/mem32 ;EAX = EAX * reg32/mem32 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 5 Operações Aritméticas ● MUL – Quando o produto gera um valor maior que o registrador, o resultado é dividido com outro registrador ● Carry Flag (CF) é marcado um 1 quando isso ocorre CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 6 Operações Aritméticas ● MUL – Exemplos: MOV AL,5h MOV BL,l0h MUL BL ;AL = 50h AH=0 CF=0 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 7 Operações Aritméticas ● MUL – Exemplos: val1 DW 2000h val2 DW 0100h MOV AX, val1 MUL val2 ;DX:AX=00200000h CF=1 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 8 Operações Aritméticas ● MUL – Exemplos: MOV EAX ,12345h MOV EBX , l000h MUL EBX ;EAX=0000000012345000h CF = 0 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 9 Operações Aritméticas ● IMUL: – Usada para multiplicação de números com sinal – Pode-se utilizar operadores imediatos, variáveis e registradores – Sintaxe: IMUL <destino>, <fonte1>, <fonte2> ● Número de operando pode variar CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 10 Operações Aritméticas CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 11 Operações Aritméticas ● IMUL – Exemplos: IMUL ECX ;EAX = EAX * ECX IMUL BX, Bla ;BX = BX * Bla IMUL BX, 10 ;BX = BX * 10 IMUL DX, 10, -2 ;DX = 10 * -2 IMUL BX, CX, Bla ;BX = CX * Bla CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 12 Operações Aritméticas ● IMUL – Quando os bits superiores do resultado são uma extensão do sinal o Flag OverFlow (OF) é 0. Do contrário é 1 ● Em outras palavras: Quando não necessita-se dos bits da metade superior do resultado para representação do sinal o OF=0 – Exemplos: MOV AL, 48 MOV BL, 4 IMUL BL ; AX =+192 = 00C0h OF=1 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 13 Operações Aritméticas ● IMUL – Exemplos: MOV AL, -4 MOV BL, 4 IMUL BL ; AX = -16 = FFF0h OF=0 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 14 Operações Aritméticas ● IMUL – Exemplos: MOV AX, 48 MOV BX, 4 IMUL BX ;DX:AX=000000C0h, OF=0 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 15 Operações Aritméticas ● DIV – Divisão de inteiros sem sinal – O operando pode ser um registrador ou variável ● Não pode ser um operador imediato – Sintaxe: DIV <operando> CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 16 Operações Aritméticas ● DIV – Exemplos MOV AX, 0083h MOV BL, 2 DIV BL ;AL=41h AH=01h CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 17 Operações Aritméticas ● DIV – Exemplos MOV DX, 0 ;É preciso limpar o registrador de resto MOV AX, 8003h MOV CX, 10h DIV CX ;AX = 008Oh, DX = 0003h CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 18 Operações Aritméticas ● IDIV – Divisão de inteiros com sinal ● Preserva o sinal resultante da operação – Mesma estrutura de operandos que o DIV ● Sintaxe: IDIV <operando> – Necessita de instruções para estender o sinal (CBW, CWD, CDQ) CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 19 (CBW, CWD, CDQ... ● São instruções para estender o sinal de números inteiros – CBW (convert byte to word) ● Estende o sinal do AL para o AH ● Exemplo: MOV AL, 9Bh ; -101 CBW ;AX = FF9Bh = -101 – CWD (convert word to double word) ● Estende o sinal de AX para DX ● Exemplo: MOV AX, FF9Bh CWD ;DX:AX = FFFFFF9Bh CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 20 CBW, CWD, CDQ...) – CDQ (convert doubleword to quadword) ● Estende o sinal do EAX para o EDX ● Exemplo: MOV EAX, FFFFFF9Bh CDQ ;EDX:EAX = FFFFFFFFFFFFFF9Bh CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 21 Operações Aritméticas ● IDIV – Para execução do IDIV é necessário estender o sinal do dividendo para conservar o sinal no resto ● Usaremos CBW, CWD, ou CDQ – Exemplo: MOV AL, -48 CBW ;Sinal estendido em AH MOV BL, 5 IDIV BL ; AL = - 9 , AH = -3 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 22 Operações Aritméticas ● IDIV – Exemplo: MOV AX, -5000 CWD ;estende o sinal para DX MOV BX, 256 IDIV BX ;AX= -19 DX=-136 CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 23 Operações Aritméticas ● DIV e IDIV – Se o resultado da divisão for maior o que espaço destinado ou for aplicada uma divisão por zero isso gerará uma interrupção que finalizará o programa MOV AX, 1000h MOV BL, 10h DIV BL ; AL não comporta 100h! CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 24 Operações Aritméticas ● Execícios...”O poder é de vocês...” a) var4 = (var1 * 5 ) / (var2 - 3 ); b) var4 = (var1 * -5) / (-var2 % var3); CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 25 Operações Aritméticas a) var4 = (var1 * 5 ) / (var2 - 3 ); MOV EAX, var1 MOV EBX, 5 MUL EBX MOV EBX, var2 SUB EBX, 3 DIV EBX MOV var4, EAX CIÊNCIA DA COMPUTAÇÃO - UFBA PROF. LEANDRO ANDRADE 26 Operações Aritméticas b) var4 = (var1 * -5) / (-var2 % var3); MOV EAX, var2 NEG EAX CDQ IDIV var3 MOV EBX, EDX MOV EAX, -5 IMUL var1 IDIV EBX MOV var4, EAX Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26
Compartilhar