Montador assembler
para a arquitetura (ISA) da máquina hipotética ahmes proposta pelos professores da UFRGS Raul Fernando Weber e Taisy Silva Webe.
- Compilar:
make
- Usar:
./ahmes-asm.out <código-fonte>.txt
- Debug:
./ahmes-asm.out <código-fonte>.txt --debug
- Os endereços e valores podem ser finalizados em
d
ouh
, indicando sua base númerica, respectivamente: decimal e hexadecimal. - Uma nova instrunção chamada de
SET
foi implementada para inserir um valor diretamente na memória. Sua estrutura é a seguinte:SET end value
- Um exemplo de código-fonte com mnemônicos está neste repositório. Uma operação de multiplicação.
- Ao codificar, para evitar problemas de sintaxe, lembre-se sempre de usar no seu editor de texto line endings Unix:
\n
.
Segue um resumo do conjunto de instrunções de arquitetura (ISA) da máquina Ahmes descrito na sua wiki:
Código Binário | Instrunção | Descrição da operação | Comentário |
---|---|---|---|
0000 0000 | NOP | nenhuma operação | nenhuma operação |
0001 0000 | STA end | MEM(end) ← AC | armazena acumulador no endereço de memória |
0010 0000 | LDA end | AC← MEM(end) | carrega acumulador com conteúdo da memória |
0011 0000 | ADD end | AC← MEM(end) + AC | soma acumulador com conteúdo da memória |
0100 0000 | OR end | AC← MEM(end) OR AC | operação 'ou' lógico |
0101 0000 | AND end | AC← MEM(end) AND AC | operação 'e' lógico |
0110 0000 | NOT | AC← NOT AC | complemento a 1 |
0111 0000 | SUB end | AC← MEM(end) - | AC subtrai acumulador do conteúdo da memória |
1000 0000 | JMP end | PC ← end | desvio incondicional para o endereço |
1001 0000 | JN end | IF N=1 THEN PC ← end | desvio condicional se negativo |
1001 0100 | JP end | IF N=0 THEN PC ← end | desvio condicional se positivo |
1001 1000 | JV end | IF V=1 THEN PC ← end | desvio condicional se houve estouro |
1001 1100 | JNV end | IF V=0 THEN PC ← end | desvio condicional se não houve estouro |
1010 0000 | JZ end | IF Z=1 THEN PC ← end | desvio condicional se zero |
1010 0100 | JNZ end | IF Z=0 THEN PC ← end | desvio condicional se diferente de zero |
1011 0000 | JC end | IF C=1 THEN PC ← end | desvio condicional se foi-um |
1011 0100 | JNC end | IF C=0 THEN PC ← end | desvio condicional se não foi-um |
1011 1000 | JB end | IF B=1 THEN PC ← end | desvio condicional se emprestou-um |
1011 1100 | JNB end | IF B=0 THEN PC ← end | desvio condicional se não emprestou-um |
1110 0000 | SHR | C←AC(0); AC(i-1)←AC(i); AC(7)←0 | deslocamento para direita |
1110 0001 | SHL | C←AC(7); AC(i)←AC(i-1); AC(0)←0 | deslocamento para esquerda |
1110 0010 | ROR | C←AC(0); AC(i-1)←AC(i); AC(7)←C | rotação para direita |
1110 0011 | ROL | C←AC(7); AC(i)←AC(i-1); AC(0)←C | rotação para esquerda |
1111 0000 | HLT | parada | término de execução |
Este programa foi feito originalmente como trabalho acadêmico da disciplina Arquitetura e Organização de Computadores, Lecionada pelo professor Alexandre Beletti na Universidade Federal do Pará, primeiro semestre do ano de 2015 no 2º período do curso de Engenharia da Computação.
- Eu (Manoel Vilela)
- Finalizar trabalho e entregá-lo
- Filtrar os warnings
- Fazer documentação oficial
- Traduzir todo o conteúdo para inglês