Você está na página 1de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7. Instrues lgicas, de deslocamento e de rotao

So instrues que permitem mudar o padro de bits num byte (8 bits) ou numa palavra (16 bits). Linguagens de alto nvel (exceto C) no permitem manipular diretamente bits. Instrues lgicas AND, OR, XOR e NOT so usadas para: - resetar (reset) ou limpar (clear) um bit: 1 -> 0 - setar (set) um bit: 0 -> 1 - examinar bits - realizar mscaras para manipular bits em determinadas posies Operadores lgicos: a 0 0 1 1 b 0 1 0 1 a AND b 0 0 0 1 a OR b 0 1 1 1 a XOR b 0 1 1 0 a 0 1 NOT a 1 0

Obs: em bytes ou palavras, os operadores lgicos so aplicados bit a bit.

Instrues de deslocamento (shift): - deslocar para a esquerda 1 casa bimria => multiplicar por dois - deslocar para a direita 1 casa binria => dividir por dois - os bits deslocados para fora so perdidos Instrues de rotao (rotate): - deslocar de forma circular (em anel) para a esquerda ou para a direita - nenhum bit perdido, pois aquele que for deslocado para fora de um lado reintroduzido no outro lado.

Pgina 1 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.1 Instrues lgicas

AND destino,fonte OR destino,fonte XOR destino,fonte

Usadas para aplicar os operadores lgicos correspondentes bit a bit entre: registrador e registrador registrador e uma posio de memria o operando fonte pode ser tambm uma constante Combinaes legais de operandos: Operando destino Registrador Posio de de dados memria sim sim sim no sim sim

Operando fonte Reg. de dados Posio de memria Constante

Flags afetados: SF, ZF, PF refletem o resultado (armazenado no operando destino) AF no afetado CF e OF ficam em zero, ou seja, so resetados

Exemplos de instrues vlidas: XOR AX,BX AND CH,01h OR WORD1,BX ;operador XOR aplicado aos contedos de AX e BX, ;resultado em AX ;operador AND aplicado ao contedo de CH, tendo ;como fonte o valor imediato 01h = 0000 0001b ;operador OR entre contedos da posio de memria ;WORD1 e de BX, resultado armazenado em WORD1

Pgina 2 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Graficamente: suponha a instruo AND BL,AL Antes BL AAh = 1010 1010b AL 0Fh = 0000 1111b Depois BL 0Ah = 0000 1010b AL 0Fh = 0000 1111b

Obs: Propriedades dos operadores lgicos aplicados bit a bit: bit(x) AND 0 bit(x) OR 0 bit(x) XOR 0 =0 = bit(x) = bit(x) bit(x) AND 1 bit(x) OR 1 bit(x) XOR 1 = bit(x) =1 = complemento do bit(x)

Criao de mscaras: padro de "0" e "1" para manipular bits por meio de operaes lgicas.

AND pode ser utilizado para zerar (clear ou reset) bits especficos: basta ter um 0 na posio que se deseja este efeito. OR pode ser utilizado para setar (set) bits especficos: deve-se ter um 1 na posio em que se deseja este efeito. XOR pode ser utilizado para complementar (inverter) bits especficos: deve-se ter um 1 na posio em que se deseja este efeito.

Pgina 3 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Exemplos de mscaras: 1) Setar os bits MSB e LSB do registrador AX, dado AX = 7444h: OR AX,8001h AX (antes) 8001h AX (depois) -> -> -> 0111 0100 0100 0100b 1000 0000 0000 0001b -> -> 7444h F445h

OR______________________________________

1111 0100 0100 0101b

2) Convertendo o cdigo ASCII de um dgito numrico em seu valor binrio: AND AL,0Fh AL (antes) 0Fh AL (depois) -> -> -> (em substituio a: SUB AL,30h) -> -> 37h = "7" = 55d 07h = 7d (valor sete)

AND_______________________

0011 0111b 0000 1111b 0000 0111b

Obs: nesta converso, tem-se apenas que zerar (resetar) os 4 ltimos bits. 3) Convertendo letra minscula em maiscula, supondo o caracter em AL: AND AL,0DFh AL (antes) DFh AL (depois) -> -> -> 0110 0001b 1101 1111b 0100 0001b -> -> 61 h = "a" 41h = "A"

AND_______________________

Obs: para esta converso, tem-se apenas que zerar (resetar) o bit 5 de AL.

Pgina 4 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Mais exemplos de aplicao de operaes lgicas: 1) Limpando (zerando) um registrador: XOR AX, AX AX (antes) AX (depois) -> -> -> 0111 0100 0100 0100b 0111 0100 0100 0100b -> -> 7444h 0000h = 0

XOR_____________________________________

0000 0000 0000 0000b

Obs: esta forma mais rpida de executar do que as outras opes MOV AX,0000h e SUB AX,AX

2) Testando se o contedo de algum registrador zero: OR CX,CX CX (antes) CX (depois) -> -> -> 0111 0100 0100 0100b 0111 0100 0100 0100b 0111 0100 0100 0100b -> -> 7444h 7444h (no 0)

OR______________________________________

Obs: esta operao deixa o registrador CX inalterado modifica o FLAG ZF somente quando o contedo de CX realmente zero esta forma mais rpida de executar do que CMP CX,0000h.

Pgina 5 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

NOT destino Usada para aplicar o operador lgico NOT em todos os bits de: um registrador uma posio de memria o resultado a complementao (inverso) de todos os bits Flags afetados: nenhum Exemplos de instrues vlidas: NOT AX NOT AL NOT BYTE1 ;inverte todos os bits de AX ;inverte todos os bits de AL ;inverte todos os bits do contedo da posio de ;memria definida pelo nome BYTE1

Graficamente: suponha a instruo NOT WORD1 Antes BYTE1 81h = 1000 0001b Depois BYTE1 7Eh = 0111 1110b

Pgina 6 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

TEST destino,fonte Usada para aplicar o operador lgico AND entre: registrador e registrador registrador e uma posio de memria o operando fonte pode ser tambm uma constante sem afetar o operando destino (no armazena o resultado do AND). Combinaes legais de operandos: Operando destino Registrador Posio de de dados memria sim sim sim no sim sim

Operando fonte Reg. de dados Posio de memria Constante Flags afetados:

SF, ZF, PF refletem o resultado (armazenado no operando destino) AF no afetado CF e OF ficam em zero Exemplos de instrues vlidas: TEST AX,BX TEST AL,01h ;operao AND entre AX e BX, no h resultado, mas ;apenas alterao dos FLAGS ZF, SF e PF ;operao AND entre AL e o valor imediato 01h

Pgina 7 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Graficamente: suponha a instruo TEST AX,0001h Antes AX 4444h = 0100 0100 0100 0100b ZF 0 Depois AX 0100 0100 0100 0100b ZF 1

Neste exemplo, a mscara 0001h serve para testar se o contedo de AX PAR (todo nmero binrio PAR possui um zero no LSB)

O nmero 4444h PAR pois o seu LSB vale zero 4444h AND 0001h produz como resultado 0000h que faz ZF = 1 o resultado no armazenado em AX, somente ZF modificado por TEST

Exemplo: escreva um trecho de programa que salte para o rtulo PONTO2 se o contedo de CL for negativo: .... TEST CL,80h ;80h a mscara 1000 0000b JNZ PONTO2 .... (o programa prossegue, pois o nmero positivo) .... PONTO2: .... (o programa opera aqui com o nmero negativo) ....

Pgina 8 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.2 Atividades prticas. 1) D a operao lgica e a mscara correspondente para cada item abaixo, tal que: a) Limpe (clear) os bits pares de AX, deixando os restantes sem alterao; b) Sete (set) o MSB de BL, permanecendo os restantes como esto; c) Complemente o MSB de DX, deixando os restantes intocados; d) Remova os quatro bits mais significativos de AL, permanecendo os restantes inalterados; e) Faa o complemento de 2 de BX sem utilizar a instruo NEG (talvez seja necessrio um trecho de programa ao invs de uma nica operao lgica).

2) Use a instruo TEST em cada item abaixo para: a) Fazer ZF = 1 caso o contedo de AX seja zero; b) Zerar ZF caso o o contedo de BL seja IMPAR; c) Setar SF caso o contedo de DX seja um nmero negativo; d) Setar ZF caso o contedo de DX seja zero ou um nmero positivo; e) Setar PF caso BL contenha um nmero PAR de bits 1.

Pgina 9 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.3 Instrues de deslocamento: Sxx destino, 1 Sxx destino, CL Usada para deslocar para a esquerda ou para a direita: - 1 bit - tantos quantos CL indicar um registrador uma posio de memria Sxx SHL SAL SHR SAR Significado Shift Left - deslocamento para a esquerda Shift Arithmetic Left - deslocamento aritmtico para a esquerda Shift Right - deslocamento para a direita Shift Arithmetic Right - deslocamento aritmtico para a direita

Flags afetados: SF, ZF, PF refletem o resultado da ltima rotao AF no afetado CF contem o ltimo bit deslocado para fora OF = 1 se ocorrer troca de sinal aps o ltimo deslocamento Exemplos de instrues vlidas: SHL AX,1 SAL BL,CL ;desloca os bits de AX para a esquerda 1 casa binria, ;sendo o LSB igual a zero ;desloca os bits de BL para a esquerda tantas casas ;binrias quantas CL indicar, os bits menos ;significativos so zero (mesmo efeito de SHL) ;desloca os bits de DH para a direita 1 casa binria, ;sendo que o MSB mantem o sinal

SAR DH,1

Pgina 10 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Mecnica de deslocamento

(ver figura 7.2 na pgina 123, figura 7.3 na pgina 124 e 7.4 na pgina 125 do livro-texto)

Pgina 11 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Exemplos: 1) Multiplique o contedo de AX por 8, supondo AX contendo 0005h = 5d: AX (original) aps o 1o. deslocamento aps o 2o. deslocamento aps o 3o. deslocamento trecho de programa: ... MOV SHL ... 0000 0000 0000 0101 0000 0000 0000 1010 0000 0000 0001 0100 0000 0000 0010 1000 = 5d = 10d = 20d = 40d

CL,3 AX,CL

;poderia ser SAL AX,CL

2) Divida o contedo de DH por 4, supondo DH contendo 12h = 18d: DH (original) aps o 1o. deslocamento aps o 2o. deslocamento 0001 0010 = 18d 0000 1001 = 9d 0000 0100 = 4d CF = 1

Obs: pelo fato do nmero 9 ser impar, sua diviso por dois foi arredondada para o inteiro imediatamente inferior. trecho de programa: ... MOV SAR ...

CL, 02 DH,CL

Pgina 12 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.4 Instrues de rotao: Rxx destino, 1 Rxx destino, CL Usada para rodar (deslocar em anel) para a esquerda ou para a direita: - 1 bit - tantos quantos CL indicar um registrador uma posio de memria Rxx ROL ROR RCL RCR Significado Rotate Left - rodar para a esquerda Rotate Right - rodar para a direita Rotate Carry Left - rodar para a esquerda atravs do flag CF Rotate Carry Right - rodar para a direita atravs do flag CF

Flags afetados: SF, ZF, PF refletem o resultado da ltima rotao AF no afetado CF contem o ltimo bit deslocado para fora OF = 1 se ocorrer troca de sinal aps a ltima rotao Exemplos de instrues vlidas: ROL AX,1 ROR BL,CL ;desloca os bits de AX para a esquerda 1 casa binria, ;sendo o MSB reinserido na posio LSB ;desloca os bits de BL para a direita tantas casas ;binrias quantas CL indicar, os bits menos ;significativos so reinseridos um-a-um no MSB ;desloca os bits de DH para a direita 1 casa binria, ;sendo que o MSB recebe CF e o LSB salvo em CF

RCR DH,1

Pgina 13 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Mecnica de rotao

(ver figura 7.5 na pgina 126, figura 7.6 na pgina 127, 7.7 na pgina 128 e figura 7.8 na pgina 129 do livro-texto)

Pgina 14 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Exemplos: 1) Conte o nmero de bits "1's" presentes em AX, sem destru-lo: Utilizando: - CX como contador de bits - BL como contador de "1's" ... XOR BL,BL MOV CX,16 ROL AX, 1 JNC PT1 INC BL LOOP TOPO ... ;inicializa-se BL com zero ;inicializa-se contador de bits (AX tem 16 bits) ;roda-se AX 1 casa a esquerda e ;CF contem uma cpia do bit deslocado ;se CF = 1 ;conta-se 1 em BL ;seno, processegue-se no lao ;at que CX = 0

TOPO:

PT1:

2) Invertendo o padro de bits de AL: Se AL (antes) = 1000 1100b, AL (depois) = 0011 0001b ... XOR BL,BL MOV CX,8 SHL AL,1 RCR BL,1 LOOP TOPO MOV AL,BL ... ;inicializa-se BL com zero ;inicaliza-se contador de bits (AL tem 8 bits) ;desloca-se AL 1 casa para a esquerda ;CF contem o bit deslocado para fora ;roda-se BL para a direita atravs de CF ;enquanto CX no for zero, repete TOPO ;quando CX = 0, AL recebe o padro

TOPO:

Pgina 15 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.5 Entrada e sada de nmeros binros e hexadecimais:

Entrada de nmeros binrios: - string de caracteres "0's" e "1's" fornecidos pelo teclado; - CR o marcador de fim de string; - BX assumido como registrador de armazenamento; - mximo de 16 bits de entrada.

Algoritmo bsico em linguagem de alto nvel: Limpa BX Entra um caracter "0" ou "1" WHILE caracter diferente de CR DO Converte caracter para valor binrio Desloca BX 1 casa para a esquerda Insere o valor binrio lido no LSB de BX Entra novo caracter END_WHILE Trecho de programa implementado em Linguagem Montadora: ... MOV CX,16 ;inicializa contador de dgitos MOV AH,1h ;funo DOS para entrada pelo teclado XOR BX,BX ;zera BX -> ter o resultado INT 21h ;entra, caracter est no AL ;while TOPO: CMP AL,0Dh ; CR? JE FIM ;se sim, termina o WHILE AND AL,0Fh ;se no, elimina 30h do caracter ;(poderia ser SUB AL,30h) SHL BX,1 ;abre espao para o novo dgito OR BL,AL ;insere o dgito no LSB de BL INT 21h ;entra novo caracter LOOP TOPO ;controla o mximo de 16 dgitos ;end_while FIM: ...

Pgina 16 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Sada de nmeros binrios: - BX assumido como registrador de armazenamento; - total de 16 bits de sada; - string de caracteres "0's" e "1's" exibido no monitor de vdeo.

Algoritmo bsico em linguagem de alto nvel: FOR 16 vezes DO rotao de BX esquerda 1 casa binria (MSB vai para o CF) IF CF = 1 THEN exibir no monitor caracter "1" ELSE exibir no monitor caracter "0" END_IF END_FOR Trecho de programa implementado em Linguagem Montadora: ... MOV CX,16 MOV AH,02h ROL BX,1 JNC PT2 MOV DL, 31h INT 21h PT2: MOV DL, 30h INT 21h LOOP PT1 ... ;inicializa contador de bits ;prepara para exibir no monitor ;desloca BX 1 casa esquerda ;salta se CF = 0 ;como CF = 1 ;exibe na tela "1" = 31h ;como CF = 0 ;exibe na tela "0" = 30h ;repete 16 vezes

;for 16 vezes do PT1: ;if CF = 1 ;then ;else

;end_if ;end_for

Pgina 17 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Entrada de nmeros hexadecimais: - BX assumido como registrador de armazenamento; - string de caracteres "0" a "9" ou de "A" a "F", digitado no teclado; - mximo de 16 bits de entrada ou mximo de 4 dgitos hexa.

Algoritmo bsico em linguagem de alto nvel: Inicializa BX Entra um caracter hexa WHILE caracter diferente de CR DO Converte caracter para binrio Desloca BX 4 casas para a esquerda Insere valor binrio nos 4 bits inferiores de BX Entra novo caracter END_WHILE Trecho de programa implementado em Linguagem Montadora: ... XOR BX,BX ;inicializa BX com zero MOV CL,4 ;inicializa contador com 4 MOV AH,1h ;prepara entrada pelo teclado INT 21h ;entra o primeiro caracter ;while TOPO: CMP AL,0Dh ; o CR ? JE FIM CMP AL, 39h ;caracter nmero ou letra? JG LETRA ;caracter j est na faixa ASCII AND AL,OFh ;nmero: retira 30h do ASCII JMP DESLOC LETRA: SUB AL,37h ;converte letra para binrio DESLOC: SHL BX,CL ;desloca BX 4 casas esquerda OR BL,AL ;insere valor nos bits 0 a 3 de BX INT 21h ;entra novo caracter JMP TOPO ;faz o lao at que haja CR ;end_while FIM: ...

Pgina 18 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Sada de nmeros hexadecimais: - BX assumido como registrador de armazenamento; - total de 16 bits de sada; - string de caracteres HEXA exibido no monitor de vdeo.

Algoritmo bsico em linguagem de alto nvel: FOR 4 vezes DO Mover BH para DL Deslocar DL 4 casas para a direita IF DL < 10 THEN converte para caracter na faixa 0 a 9 ELSE converte para caracter na faixa A a F END_IF Exibio do caracter no monitor de vdeo Rodar BX 4 casas esquerda END_FOR

Pgina 19 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

Trecho de programa implementado em Linguagem Montadora: ... MOV CH,4 MOV CL,4 MOV AH,2h MOV DL,BH SHR DL,CL ;if DL , 10 ;then ;else ;end_if CMP DL, 0Ah JAE LETRA ADD DL,30h JMP PT1 LETRA: PT1: ADD DL,37h INT 21h ROL BX,CL DEC CH JNZ TOPO ... ;BX j contem nmero binrio ;CH contador de caracteres hexa ;CL contador de delocamentos ;prepara exibio no monitor ;captura em DL os oito bits mais ;significativos de BX ;resta agora em DL somente os 4 ;bits mais significativos de BX ;testa se letra ou nmero ; nmero: soma-se 30h ;ao valor soma-se 37h -> ASCII ;exibe ;roda BX 4 casas para a direita ;faz o FOR 4 vezes ;programa continua

;for 4 vezes do TOPO:

;end_for

Pgina 20 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

7.6 Atividades prticas. 1) Suponha as condies iniciais AL = 11001011b e CF = 1. D o novo contedo de AL aps cada uma das seguintes instrues, sempre com base nas condies iniciais acima: a) SHL AL,1 b) SHR AL,1 c) ROL AL,CL ;CL contendo 2 d) ROR AL,CL ;CL contendo 3 e) SAR AL,CL ;CL contendo 2 f) RCL AL,1 g) RCR AL,CL ;CL contendo 3 2) Escreva um programa que pea ao usurio para entrar um caracter ASCII, na prxima linha exiba no monitor uma mensagem apresentando o valor binrio deste cdigo e numa segunda linha exiba outra mensagem que apresente o nmero de bits "1" existentes no cdigo ASCII. 3) Escreva um programa que pea ao usurio para entrar um caracter ASCII, na prxima linha exiba no monitor o caracter lido e numa segunda linha exiba outra mensagem que apresente o valor hexadecinal correspondente ao cdigo ASCII. Repita este procedimento at que o usurio entre comum carriage return CR. Exemplo: Digite um caracter: Z O codigo ASCII de Z em hexa vale: 5Ah Digite um caracter: ... 4) Escreva um programa que pea ao usurio para entrar um nmero hexadecimal de 4 dgitos ou menos, terminado com CR, e exiba na prxima linha do monitor o mesmo nmero expandido em binrio. Na leitura, faa com que o apenas letras maisculas de A a F sejam aceitas. Se houver um caracter ilegal, o programa deve emitir uma mensagem instruindo o usurio a tentar novamente.

Pgina 21 de 22

Cap7 Instrues lgicas, de deslocamento e de rotao

5) Escreva um programa que pea ao usurio para entrar um nmero binrio de 16 dgitos ou menos, terminado com CR, e exiba na prxima linha do monitor o mesmo nmero compactado em hexadecimal. Se houver um caracter ilegal durante a entrada do nmero binrio, o programa deve emitir uma mensagem instruindo o usurio a tentar novamente. 6) Escreva um programa que pea ao usurio para entrar dois nmeros binrios, cad um com 8 dgitos ou menos, terminado com CR, e exiba na prxima linha do monitor o valor binrio da soma destes nmeros. Se houver um caracter ilegal durante a entrada dos nmeros binrios, o programa deve emitir uma mensagem instruindo o usurio a tentar novamente. Considere representao no sinalizada para os nmeros. Considere que o 9o. bit (vai um), se houver, estar em CF e poder ser exibido, tal como no exemplo abaixo: Entre o primeiro nmero binrio (at 8 bits): 11001010 Entre o segundo nmero binrio (at 8 bits): 10011100 A soma binria vale: 101100110 -> resultado de 9 bits 7) Considerando o exemplo 2 da pgina 6.12, que divide o contedo de DH por 4, suponha um nmero genrico sem sinal menor que 255 e escreva um trecho de programa que faa a diviso inteira indicando o quociente e o resto. Coloque o quociente em BH e o resto em BL, sem destruir o dividendo DH. Exemplo: DH (original) aps a diviso por 4: quociente BH = com resto BL = 0001 0010 = 18d 0000 0100 = 4d 0000 0010 = 2d

Pgina 22 de 22