• Aulas
  • Abril
  • 29/04 - Assembly Saltos

Lab 10: saltos (jump)

Ao final desse lab você deve ser capaz de:

  • Escrever programas complexos em assembly que envolvem acesso a memória e saltos (condicionais e incondicionais)

Tip 1

Para fazer esse lab, você deve ter lido a teoria sobre:

Note

Dúvidas sobre assembly? Z01->Resumo Assembly

Esse lab deve ser feito no Simulador.

Condicional

Saltos condicionais são utilizados para verificarmos condições no programa, vamos trabalhar um pouco com isso.

jmp1.nasm

  • f_Assembly/src/labs/jmp1.nasm

Implemente o pseudo código a seguir em nasm:

if RAM[1] == 0: 
    RAM[0] = 1
else
    RAM[0] = 2

Teste o programa com diferentes valores na RAM[1]:

  • Teste 1: RAM[1] = 3
  • Teste 2: RAM[1] = 0
  • Teste 1: RAM[0] = 2
  • Teste 2: RAM[0] = 1

Podemos reescrever o código para ficar:

RAM[0] = 2
if RAM[1] == 0: 
    RAM[0] = 1
leaw $2, %A
movw %A, %D
leaw $0, %A
movw %D, (%A) ; RAM[0] = 2
leaw $1, %A
movw (%A), %D ; busca valor verificar (RAM[1])
leaw $END, %A ; prepara salto
jne           ; RAM[1] == 0?
nop
leaw $1, %A
movw $1, (%A) ; RAM[=] = 1
END:          

jmp3.nasm

  • f_Assembly/src/labs/jmp3.nasm

Implemente o pseudo código a seguir em nasm:

if RAM[1] == 3: 
    RAM[0] = 1
else
    RAM[0] = 2

Teste o programa com diferentes valores na RAM:

  • Teste 1: RAM[1] = 3
  • Teste 2: RAM[1] = 0
  • Teste 1: RAM[0] = 1
  • Teste 2: RAM[0] = 2

Não temos uma instrução de jmp que verifica se o valor de %D é igual a 3, porém podemos subtrair 3 do calor salvo em RAM[1] e verificar se o resultado é igual a 0:

RAM[0] = 2
if RAM[1] - 3 == 0: 
    RAM[0] = 1
leaw $1, %A
movw (%A), %D
leaw $3, %A
subw %D, %A, %D ; %D = RAM[1] - 3

jmp4.nasm

  • Criar o arquivo f_Assembly/src/labs/jmp4.nasm

Implemente o pseudo código a seguir em nasm:

if RAM[1] + RAM[2] >= 3: 
    RAM[0] = 1
else
    RAM[0] = 2

Teste o programa com diferentes valores na RAM:

  • Teste 1: RAM[1] = 1 / RAM[2] = 4
  • Teste 2: RAM[1] = 1 / RAM[2] = 1
  • Teste 1: RAM[0] = 1
  • Teste 2: RAM[0] = 2