O documento apresenta exemplos de operações aritméticas e lógicas em assembly e código de máquina utilizando o programa DEBUG, incluindo adição, subtração, multiplicação e divisão de valores hexadecimais nos registradores e memória do computador.
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
ASSEMBLY - AULA PRÁTICA
1. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
ASSEMBLY – AULA PRÁTICA
1. Entrar no programa CMD.EXE
2. Digitar CD.. e apertar enter
3. Digitar novamente CD.. e apertar enter
4. Digitar DEBUG e apertar enter
Obs.: para sair do programa DEBUG, basta digitar a tecla Q e apertar enter
ARITMÉTICA EM MODO HEXADECIMAL
Não é possível trabalhar com números decimais
Exemplo1: Adição e Subtração
Informar os dois operandos em formato hexadecimal: H 0005 0001
Resultado: 0006 0004
Pois: (0005 + 0001 = 0006) e (0005 – 0001 = 0004)
Na matemática real: (5 + 1 = 6) e (5 – 1 = 4)
Exemplo 2: Adição e Subtração
Informar dois operandos em formato hexadecimal: H 0009 0001
Resultado: 000A 0008
Pois: (0009 + 0001) = 000A e (0009 – 0001 = 0008)
Na matemática real: (9 + 1 = 10) e (9 – 1 = 8)
Todos os números hexadecimais são representados com 4 posições pois a capacidade de cálculo do
DEBUG usa o tipo de dados WORD para armazenamento e processamento.
Exemplo3: “ Adição e Subtração com Estouro de capacidade”
Informar dois operandos em formato hexadecimal: H B000 A000
Resultado: 5000 1000
Pois: (B000 + A000 = 15000) e (B000 – A000 = 1000)
Na matemática real: (45.056 + 40.960 = 86.016) e (45.056 – 40.960 = 4096)
Exemplo 4: Representação de Valores Negativos
Informar dois operandos em formato hexadecimal: H 0005 0006
Resultado: 000B FFFF
Pois: (0005 + 0006 = 000B) e (0005 – 0006 = FFFF), em que FFFF é o número decimal -1
Na matemática real: (5 + 6 = 11) e (5 – 6 = –1)
Exemplo 5: “Prova do Exemplo 4”
Informar dois operandos em formato hexadecimal: H 0005 FFFF
Resultado: 0004 0006
Pois: (0005 + FFFF = 0004) e (0005 – FFFF = 0006)
Na matemática real: (5 + (–1) = 4 ) e (5 – (–1) = 6)
2. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
CÁLCULO EM CÓDIGO DE MÁQUINA
Exemplo 1: Adição de valores hexadecimais (01D8 = AX AX + BX)
É necessário informar dois códigos para cada operação aritmética!
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0001
Digitar R
Digitar E 0100
Digitar 01
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
COMANDOS:
R mostra o estado de todos os registradores e atribui valores aos registradores
E permite a entrada de valores em um determinado endereço de memória.
E 0100
0D0B:0100 70.01
E 0101
0DAB:0101 61.D8
• 0D0B é o valor do segmento eleito pelo programa DEBUG
• 0100 e 0101 são os valores de deslocamento que nós informamos
• 01 e D8 são os códigos que representam a operação de adição (OPCODES),
portanto, 01D8 é o código correto (ADD em Assembly = ADD AX, BX)
• 70 e 61 são valores que existem na memória naquele momento, naquela
posição
Exemplo 2: Adição de valores hexadecimais (00D8 = AL AL + BL)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0001
Digitar R
3. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar E 0100
Digitar 00
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 3: Adição de valores hexadecimais (02D8 = BL BL + AL)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0001
Digitar R
Digitar E 0100
Digitar 02
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 4: Adição de valores hexadecimais (03D8 = BX BX + AX)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0001
Digitar R
Digitar E 0100
Digitar 03
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 5: Subtração de Valores Hexadecimais (29D8 = AX AX – BX)
Digitar R
Digitar R AX
4. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar 000A
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar 29
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 6: Subtração de Valores Hexadecimais (29D8 = AX AX – BX)
Digitar R
Digitar R AX
Digitar 0008
Digitar R
Digitar R BX
Digitar 000A
Digitar R
Digitar E 0100
Digitar 29
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Obs.: FFFE = -2
Exemplo 7: Subtração de Valores Hexadecimais (28D8 = AL AL – BL)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar 28
Digitar R
Digitar E 0101
Digitar D8
Digitar R
5. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar T
Digitar R
Digitar Q
Exemplo 8: Subtração de Valores Hexadecimais (2AD8 = BL BL – AL)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar 2A
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 9: Subtração de Valores Hexadecimais (2BD8 = BX BX – AX)
Digitar R
Digitar R AX
Digitar 000A
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar 2B
Digitar R
Digitar E 0101
Digitar D8
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 10: Multiplicação de Valores Hexadecimais (F7E3 = DX:AX AX * BX)
Digitar R
Digitar R AX
Digitar 0005
Digitar R
Digitar R BX
Digitar 0003
Digitar R
Digitar E 0100
6. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar F7 E3
Digitar R
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 11: Multiplicação de Valores Hexadecimais (F7E3 = DX:AX AX * BX)
Digitar R
Digitar R AX
Digitar 7D3C
Digitar R
Digitar R BX
Digitar 0100
Digitar R
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
A multiplicação de dois valores numéricos de 16 bits (word) pode resultar em um valor de
32 bits (double word). 7D3C = 32.060 em decimal, e 0100 = 256 em decimal. O resultado de 7D3C
* 0100 é maior que 16 bits. Portanto, uma parte do resultado é armazenado em AX e outra parte em
DX. Portanto, DX:AX AX * BX, em que DX são os bits mais significativos e AX os menos
significativos: 007D3C00 (8.207.360).
Exemplo 12: Multiplicação de Valores Hexadecimais (F6E3 = AX AL * BX)
Digitar R
Digitar R AX
Digitar 0005
Digitar R
Digitar R BX
Digitar 0003
Digitar R
Digitar E 0100
Digitar F6 E3
Digitar R
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
7. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Exemplo 13: Divisão de Valores Hexadecimais (F7F3 = DX:AX AX /BX em que AX é o
quociente e DX é o resto)
Digitar R
Digitar R AX
Digitar 0009
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar F7 F3
Digitar R
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 14: Divisão de Valores Hexadecimais (F6F3 = AX AL /BL em que AL é o
quociente e AH é o resto)
Digitar R
Digitar R AX
Digitar 0009
Digitar R
Digitar R BX
Digitar 0002
Digitar R
Digitar E 0100
Digitar F6 F3
Digitar R
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
Exemplo 15: Apresentação de Caracteres
Digitar R
Digitar R AX
Digitar 0200
Digitar R
Digitar R DX
Digitar 0040
Digitar R
Digitar E 0100 CD 21
Digitar R
Digitar G 0102
8. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar R
Digitar E 0102 CD 20
Digitar R
Digitar R IP
Digitar 0100
Digitar G
Digitar U
Digitar U 0100 0103
Digitar Q
AX e DX são os registradores responsáveis pela apresentação de um único caracter. AX
AH = 02 e AL = 00. Esses códigos tem a finalidade de escrever o caractere no monitor. Em
DX você deve informar o código do caractere que quer que seja impresso. DX DH = 00
e DL = 40
CD21: é o OPCODE de INTERRUPÇÃO que deve ser informado para que o monitor de
vídeo seja ativado
G: comando usado para executar a instrução de forma direta (e não passo a passo como o
comando T). Deve ser informado o ponto de deslocamento que ele deve ir (endereço de
parada da execução)
CD20: interrupção que finaliza o programa e retorna o comando para o S.O.
U: comando que lisa o código do programa criado
Exemplo 16: Apresentação de Caracteres
Digitar R
Digitar R AX
Digitar 0200
Digitar R
Digitar R DX
Digitar 0046
Digitar R
Digitar A 0100
Digitar INT 21
Digitar INT 20
Digitar ENTER
Digitar G
Digitar U
Digitar Q
A: comando utilizado para usar códigos em ASSEMBLY e não em código de máquina.
Forneça sempre um ponto inicial de armazenamento de código (um valor de deslocamento).
Exemplo 17: Movimentação de Dados
Digitar R
Digitar R AX
Digitar 1122 (AX = 1122 | AH = 11 | AL = 22)
9. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar R
Digitar R DX
Digitar AABB (DX = 1122 | DH = AA | DL = BB)
Digitar R
Digitar A 0100
Digitar MOV AH,DL (move o valor de DL para AH)
Digitar ENTER
Digitar T
Digitar G
Digitar R IP
Digitar 0100
Digitar A 0100
Digitar MOV AX,DX (move o valor de DX para AX)
Digitar T
Digitar G
Digitar A 0100
Digitar MOV AH,02 (move o valor 02 para AH serviço de apresentação em vídeo)
Digitar MOV DL,41 (move o valor 41 para DL representação do caractere A)
Digitar INT 21 (aciona a comunicação com o monitor de vídeo)
Digitar INT 20 (sinaliza a interrupção de programa pelo S.O.)
Digitar ENTER
Digitar R IP
Digitar 0100
Digitar G
Digitar Q
Exemplo 18: Apresentação de Sequência de Caracteres
Digitar E 0200 41 6C 6F 20 6D 75 6E 64 6F 21 24
Digitar A 0100
Digitar MOV AH,09
Digitar MOV DX, 0200
Digitar INT 21
Digitar INT 20
Digitar ENTER
Digitar G
Digitar U
Digitar D
Digitar D 0200
Digitar Q
0200: endereço onde se encontra a sequencia de caracteres
09: código usado para que uma string seja impressa
D: (dump) comando com o endereço do deslocamento desejado
$: símbolo que indica o fim da string – código 24
Exemplo 19: Apresentação de Valores Binários (mudança nos flags devido ao estouro)
Digitar R
Digitar R AX
Digitar FFFF
10. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar R BX
Digitar 0001
Digitar E 0100 01 D8
Digitar R
Digitar T
Digitar R
Digitar R AX
Digitar 0001
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Mudança nos registradores de FLAG: passa de NC para CY, em que NC significa NO
CARRY e CY significa CARRY, isto é, NC quando não há estouro, CY quando há.
Exemplo 20: Apresentação de Valores Binários (varredura bit a bit)
Digitar R
Digitar R BX
Digitar 00AA
Digitar R
Digitar A 0100
Digitar RCL BL, 1 (RCL: comando usado para escrever um número em formato binário)
Digitar R (Primeiro bit da direita para a esquerda. Retorna 1)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Segundo bit da direita para a esquerda. Retorna 0)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Terceiro bit da direita para a esquerda. Retorna 1)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Quarto bit da direita para a esquerda. Retorna 0)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Quinto bit da direita para a esquerda. Retorna 1)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
11. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar R (Sexto bit da direita para a esquerda. Retorna 0)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Sétimo bit da direita para a esquerda. Retorna 1)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R (Oitavo bit da direita para a esquerda. Retorna 0)
Digitar R IP
Digitar 0100
Digitar R
Digitar T
Digitar R
Digitar Q
RCL: move para a esquerda o ponteiro de bit dentro do registrador de estado CF,
percorrendo todos os bits existentes, a partir da primeira posição (zero) até a última. RCL
BL, 1 soma o valor 1 à parte mais baixa do registrador BX.
00AA = 10101010
RCL BL, 1 01010101 + 1
Exemplo 21: Apresentação de Valores Binários (varredura bit a bit) melhorado
Digitar R
Digitar R BX
Digitar 00AA
Digitar A 0100
Digitar MOV CX, 0008 (quantidade de vezes que o LOOP deverá ser executado)
Digitar RCL BL, 1
Digitar LOOP 0103 (usa o CX para armazenar o valor do contador. 0103 pois precisa voltar
nesse ponto)
Digitar INT 20
Digitar ENTER
Digitar T (várias vezes até que CX = 0000 – CX é decrementado!)
Digitar Q
Digitar DEBUG
Digitar R
Digitar R BX
Digitar 00AA
Digitar A 0100
Digitar MOV AH,02 (informa ao S.O. que deve imprimir um único caractere armazenado
em DL)
Digitar MOV CX,0008 (valor do contador do laço. CX é sempre um laço decrescente)
Digitar MOV DL,00 (limpa o registrador toda vez que essa linha for executada)
Digitar RCL BL,1 (movimentação bit a bit do byte)
12. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098
Digitar ADC DL, 30 (faz a adição de 30 ao valor existente no DL mudando o Carry Flag. 30
é o caractere 0.)
Digitar INT 21 (interrupção para apresentação no monitor)
Digitar LOOP 0105 (inicio do loop)
Digitar INT 20 (retorna o controle para o S.O.)
Digitar ENTER
Digitar G (executa)
13. Centro de Ciências Exatas e Sociais Aplicadas – CCESA.
Curso de Bacharelado em Ciência da Computação.
Rua Irmã Arminda, 10-50. Jardim Brasil, Bauru/SP. CEP
17011-160 - PABX (14) 2107-7000 – Ramal: 7098