Você está na página 1de 52

Jos Augusto Fabri

Assembly Bsico

Aritmtica em Modo Hexadecimal


Operaes da adio e subtrao em hexadecimal (comando H)

Aritmtica em Modo Hexadecimal


Nmero negativos: Que nmero representa o FFFF?

Clculo em Cdigos de Mquina


O comando register - r

Registradores de propsito geral 16 bits


Acesso a parte alta e a parte baixa, por exemplo
AH ou AL

Registradores de segmentos
DS rea de memria que est sendo utilizada

Ponteiros: IP = PC

FLAGS, por exemplo


overflow

Parnteses - Segmentao de Memria

216 segmentos

0000-0000
.
216endereos
.
0000-FFFF
.
.
.
.
FFFF-0000
.
.
Qual o tamanho memria?
FFFF-FFFF

Clculo em Cdigos de Mquina


Somando valores
Endereos de memria

Cdigo instruo de adio (utilizao: 0000 0001 1100 1000)

Segmento de memria utilizado

Clculo em Cdigos de Mquina


Como adicionar:
Operao:
Opcode
00d8
01d8
02d8
03d8

adio
Registradores gerais
AL, BL
AX,BX
BL,AL
BX,AX

operao
AL = AL + BL
AX = AX + BX
BL = BL + AL
BX = BX + AX

Utilizando o debug, desenvolva um programa que efetue todos os clculos a


partir do endereo 0100 de memria.

Clculo em Cdigos de Mquina


Correo do exerccio (1)

Clculo em Cdigos de Mquina


Correo do exerccio (2)

Clculo em Cdigos de Mquina


Como subtrair:
Operao:
Opcode
28d8
29d8
2ad8
2bd8

adio
Registradores gerais
AL, BL
AX,BX
BL,AL
BX,AX

operao
AL = AL - BL
AX = AX - BX
BL = BL - AL
BX = BX - AX

Utilizando o debug, desenvolva um programa que efetue todos os clculos a


partir do endereo 0100 de memria.

Clculo em Cdigos de Mquina


Correo do exerccio (1)
Barra de espao

Clculo em Cdigos de Mquina


Correo do Exerccio (2)

Clculo em Cdigos de Mquina


Como multiplicar:

Cdigo da multiplicao

Multiplica AX por BX e armazena o resultado em AX

Clculo em Cdigos de Mquina


No exemplo anterior, multiplicados poucos bits.
Se multiplicarmos um nmero de 16 bits por outro nmero de 16 bits,
poderemos ter como resultado um nmero de 32 bits.
Veja o exemplo com a multiplicao de 2 nmeros com 2 bits cada:
11 * 11 = 1001.

Implicao: No temos um registrador de 32 bits para armazenar o valor do


resultado. E agora?

Veja s o problema proposto:

Clculo em Cdigos de Mquina

32060
7d3c00
256

AX armazena os 16 bits menos significativos

DX armazena os 16 bits mais significativos

Clculo em Cdigos de Mquina


Desenvolva a multiplicao com base nos opcodes:
Operao
Opcode
F6E3
F7E3

Multiplicao
Registradores Gerais
BL
BX

operao
AX = AL * BL
DX:AX = AX*BX

Clculo em Cdigos de Mquina


Diviso
Operao
Opcode
F6F3
F7F3

Diviso
Registradores Gerais
BL
BX

operao
AX = AL / BL
DX:AX = AX/BX

Faa um exemplo utilizando tais conceitos.

AL = quociente AH = resto
AX = quociente DX = resto

Apresentao de Dados

Utilizao do conceito de interrupo.


int 21: interrupo utilizada para exibio de um caractere no vdeo.
AH = 02 - Indica ao SO que algo ser apresentado na tela.
Se AH tivesse outro valor, o SO executaria outro valor.
Valor ASCII do caractere @ - DL = 40

Conclu-se ento que a parte mais significativa de AX, quando


possui o valor 02 exibe o caractere ASCII, armazenado na
parte menos significativa de DX.
Cdigo de mquina para interrupo 21

Questo Por que no utilizar todos os bits do registrador DX


para apresentao dos caracteres? tb. ascii

Apresentao de Dados

Observe que utilizamos o comando g, ao invs de t. O comando T executa o programa


linha a linha, e isto gera uma execuo inconveniente, pois aos ser executada a int 21,
necessrio executar uma sub-rotina interna na qual dar muito trabalho.
O comando g age de forma direta, porm ele necessita ser informado at que ponto do
deslocamento ele deve caminhar, em nosso caso 0102

Apresentao de Dados
A interrupo 20 (int 20) objetivo: retornar do controle do computador para
o sistema operacional (ou seja o encerramento do programa).
Caso um programa no possua a interrupo int 20 o mesmo pode ficar em
estado de bloqueado, eternamente, pois para aquele processo o SO no
recebeu o comando de volta.
Continuando o programa entrando
com a instruo int 20

Apresentao de Dados
Apresentao do comando U

Faa um programa para imprimir os seguintes caracteres: F E M A

Apresentao de Dados
O comando mov

DESCUBRA O CDIGO HEXA DO COMANDO MOV

Apresentao de Dados
Gravando programa

Programa: O ele faz mesmo?

Tamanho do programa (bytes) = endereo final endereo inicial


Armazenando o tamanho do programa no registrador CX. BX
ser utilizado se CX ultrapassar o valor de 216

Avisando o shell sobre o nome do programa w gravando

Apresentao de Dados
Abrindo programa

Apresentao de Dados
Programa para imprimir na tela a string alo mundo!

Posicionado as informaes na memria a partir do endereo 0200

Caracteres ASCII, referentes a sting alo mundo

AX = 0900, informa ao SO que ser impresso uma


seqncia de caracteres, a partir do endereo,
armazenado em DX
Termina a String

Apresentao de Dados
Veja s o que o comando D (dump) faz:
Fim da mensagem

possvel gerar um arquivo .com a partir deste programa?

Apresentao de Dados
Salvando o programa al mundo.

Incio do programa:
Transparncia 25

Desenvolva um programa em asm que escreva o seu primeiro nome na tela

Apresentao de Dados
O flag carry (CY e NC)

10000

Estouro da capacidade mxima da representao numrica

1111 1111 1111 1111


+ 0000 0000 0000 0001

Apresentao de Dados
Uma nova adio, sobreposta a anterior, gerou NC para o carry.

Apresentao de Dados
Apresentando valores em binrio:
Comando RCL (Rotao, por meio do carry, para esquerda.

Exemplo
BX = 00AA tal que BL = AA.
Em binrio:
BX = 0000 0000 1010 1010
BL = 1010 1010
RCL BL, 1
Rotao para a esquerda
Soma 1 em BL (quando no estoura flag CY)

Apresentao de Dados
CONTINUANDO
Valor inicial de BX: 00AA (ou apenas AAh)
Ao
IP
Execuo Carry
1
r IP
t
0100
2
r IP
t
0100
3
r IP
t
0100
4
r IP
t
0100
5
r IP
t
0100
6
r IP
t
0100
7
r IP
t
0100
8
r IP
t
0100

Flag
CY

Anotao
1

(BX)BL
0054

NC

00A9

CY

0052

NC

00A5

CY

004A

NC

0095

CY

002A

NC

0055

Apresentao de Dados
Veja o exemplo ilustrativo

1
10
101
1010

10101010
01010100
10101000 + 1 =
10101001
01010010
10100100 + 1 =
10100101

54

Carry no estoura, com isto realiza soma

A9
52
Carry no estoura com isto realiza soma

A5

Apresentao de Dados
Desenvolvendo o mesmo programa com um loop:

Contador armazenado em CX o loop decrementa-o, automaticamente

Apresentao de Dados
Executando:

Apresentao de Dados
Executando

E assim por diante at zerar CX

Apresentao de Dados
Um verso um pouco melhor do mesmo programa:
Informa o SO para imprimir um caractere armazenado em DL
DL = 30 + Carry

se Carry = NC ento 30 + 0
se Carry = CY ento 30 + 1

30 o caractere ASCII ZERO


31 o caractere ASCII UM

No esquea de executar o comando G,


a partir de IP = 0100

Apresentao de Dados
Outros Flags
Zero Flag (ZF) Sinalizado com ZR (zero) ou NZ (no zero)
Sign Flag (SF) Sinalizado com NG (negativo) ou PL (positivo)
Over Flag (OF) Sinalizado com OV (overflow) ou NV (no overflow)

Apresentao de Dados
Analisando o Flag ZF

Operao executada zerou o valor do registrador de estado

Apresentao de Dados
Analisando os Flags: Sign Flag (SF) e Over Flag (OF)

0111 0000 0000 0000


+ 0110 0000 0000 0000

Apresentao de Dados Instrues de Saltos Condicionais


Saltos a partir da verificao dos registradores de estados:
Jump on Zero (JZ): Salta para um endereo caso o registrador Zero Flag
esteja sinalizado como zerado (ZR)
Jump not Zero (JNZ): Salta para um endereo caso o registrador de
estado Zero Flag no esteja sinalizado com zero (NZ).

Exemplo de programa: Apresentar na tela a letra A enquanto BL >


0, quando BL atingir Zero apresentar a letra B.

Apresentao de Dados Instrues de Saltos Condicionais


O Programa

Quantidade de letras que ser apresentado


AX = 0200, vou imprimir alguma coisa, Hein!!!
DX = 0041, valor ASCII do caractere A
Interrupo utilizada para imprimir
BL = BL - 1
Salta para o endereo 106 eqto ZF = NZ
Valor ASCII do caractere B

Ajuste o IP 0100 e execute o comando G.


Sada emitida: AAAB

Apresentao de Dados Verificando o CMP


Configura seu computador da seguinte forma:

Execute o comando T do shell

Saia do debug e retorne com ele na memria.


Entre com AAAA em AX e BX
Adiciona o endereo 0100 a linha de cdigo CMP AX, BX.
Verifique o valor de IP

Apresentao de Dados Instrues de Saltos Condicionais


Veja s o que fizemos:

Execute o comando T e veja o resultado

Apresentao de Dados Instrues de Saltos Condicionais


Executando ....

Esta instruo tambm est presente no MIPS como nome de SLT.

Apresentao de Dados
Objetivo: mostrar um valor de um dgito expresso em notao hexadecimal.
0aF

Tabela ASCII para esses valores


0
30
:
1
31
;
2
32
<
3
33
=
4
34
>
5
35
?
6
36
@
7
37
A
8
38
B
9
39
C

Parte numrica 30 a 39
Parte alfabtica de 41 a 46

3A
3B
3C
3D
3E
3F
40
41
42
43

D
E
F

44
45
46

Apresentao de Dados
Utilizar dois grupos de caracteres
30 a 39
40 a 46

Diferena de 7 posies.

Soma 30 em DL, pois 0 comea no trinta vide tabela ASCII


DL 39
Salta para 010f se
zf = zr

010F

Apresentao de Dados
O comando SHR Rotaciona para direita um nmero X de bits. Este nmero
deve estar armazenado em CL. Valor mximo da rotao = 16 (10hex).

Apresentao de Dados
Exibindo valores em hexadecimal (nibble a esquerda da parte baixa de bx).
[Escreva em seu caderno qual o processamento realizado por cada linha].

Apresentao de Dados
Utilizando comando e para exibir um valor em hexa (nibble a direita de part
baixa de bx).
0B45:0100 mov ah,02

Apresentao de Dados
Exibindo dos dgitos em hexa na tela (toda parte baixa de bx).

Utilizando shr para exibir


o nibble mais a esquerda

Utilizando shr para exibir


o nibble mais a direira

Entrada de Dados
Utilizar a int 21 com controle de entrada 01 em AH. Exemplo

Leitura e armazenamento
do valor hexadecimal,
armazenando em AL
Leitura do valor 05,
Armazenado em al com
35 (ascii ref a 5)
35 30 = 5
AL - 09
Salta para 010c se
zf = zr
Subtrai 07 em al, encontrando as
letras.

Entrada de Dados
Leitura de dois caracteres em Hexa

Possibilita leitura
Realiza a leitura ex: A = 61
Realiza a leitura ex: DL = AL
Realiza a leitura ex: DL = 31
DL - 9
Se zf = zr
DL - 7 = 2A
CL = 4
Move para esquerda (L) um nibble de DL
Nova leitura ex: A = 61
AL = AL 30
AL - 9
Se zf = zr
AL 7 = 2A
DL = A + 2A

Você também pode gostar