1° cria uma pasta dentro do seu debian pra sua tarefa:
2° Ir nesse link:
[Link]
3° baixe a pasta inteira:
4° o importante é a pasta “tools” que está lá dentro, extraia ela do arquivo que você baixou, depois copie e cole
dentro da pasta da tarefa que você criou no passo 1 desse tutorial. Dentro da pasta tools também tem um arquivo
com nome de “[Link]”, copie ele também para dentro da sua pasta da tarefa3.
4° agora abre seu debian e instala o DosBOX (no meu já está instalado, mas use o comando abaixo):
sudo apt install dosbox
5° acessa a sua pasta através do terminal, a minha ficou assim:
6° crie um arquivo para seu código através do VScode usando:
code . [Link]
ATENÇÃO: eu dei o nome de tarefa3 mas você pode mudar o nome pra não ficar igual.
7° vai abrir um arquivo em branco, e é nesse arquivo que você vai colocar seu código em assembly, depois salve
(CTRL+S), veja do lado esquerdo os arquivos que devem estar dentro da pasta (esse arquivo de texto comandos não
precisa, só criei pra anotar algumas coisas):
8° agora são partes importantes pra configurar no próprio VScode...
8.1 instale a extensão code runner
8.2 mexa nas configurações
8.2 procure por “[Link]” dentro das configurações e clique lá em baixo para editar elas:
8.2 quando você achar uma parte do código escrito "[Link]" você deve colar o seguinte
código dentro:
//for linux using TASM
"*.{ASM,asm}":"$workspaceRoot/tools/[Link] $fullFileName -mA -d $workspaceRoot/tools"
Vai ficar assim:
9. pronto, já deve estar tudo configurado, agora vamos executar nosso código assembly. O bom daquele arquivo
“[Link]” lá de trás é que ele já é código que faz todo o serviço de compilar, linkar e criar o arquivo .exe pra gente.
Para fazer ele funcionar devemos usar o comando abaixo (pode usar o terminal do próprio vscode):
/home/morpheus/micro_skel/assembly/tarefa3/tools/[Link]
"/home/morpheus/micro_skel/assembly/tarefa3/[Link]" -m3 -d
/home/morpheus/micro_skel/assembly/tarefa3/tools
ATENÇÃO: lembre-se que o local da minha pasta pode ter um nome diferente da sua, o meu arquivo também deve
ter um nome diferente do seu, então ajuste só o nome das pastas e do arquivo no código de cima.
No meu ficou assim:
Pode ser ainda que você precise autorizar, é só botar sua senha de usuário Linux.
10 agora vai abrir o DosBOX, ele é bem ruim de mexer mas deve abrir assim:
11 preste atenção naquela janelinha “Dump” nesse canto inferior, vai ser lá que você vai ver o vetor se organizando a
cada passo que o programa vai rodando. Rode o programa 2 vezes para carregar os dados na memória (é só apertar
F8 duas vezes). Depois de apertar duas vezes, vai para abrir essa janela “Dump” vai lá no menu View > Dump. É
importante que o número da memória comece com “ds:0000” veja na foto abaixo como fica depois de rodar 2 vezes
e entrar na janela dump:
12 Pronto, agora é só acompanhar a mudança dos valores :D fique apertando o F8 várias vezes e você verá os
números que estão nesse vetor “ds:0000” se arranjando automaticamente toda vez que o código é rodado.
13. o professor pediu pra gente enviar o arquivo .asm e o .exe, vou mostrar onde eles estão. O .asm é o código que
você criou dentro da sua pasta da tarefa
Já o arquivo .exe foi criado dentro dessa pasta “tools”, é só você ir tools>work... que aí o seu arquivo vai ter sido
criado com o nome de “[Link]”, agora você renomeia e manda pro professor.
Fim
Se quiser ver meu código, eu estou usando esse:
.MODEL SMALL
.STACK 100H
.DATA
; Definicao do vetor com valores desordenados
; Voce pode alterar esses valores para testar
VETOR DB 15, 8, 2, 20, 5, 1, 12, 7, 3, 10
; Calcula o tamanho do vetor automaticamente
TAM EQU ($ - VETOR)
.CODE
MAIN PROC
; Inicializacao do segmento de dados
MOV AX, @DATA
MOV DS, AX
; Se o vetor tiver 0 ou 1 elemento, nao precisa ordenar
MOV CX, TAM
CMP CX, 1
JLE FIM_PROGRAMA
; --- INICIO DO BUBBLE SORT ---
; O Bubble Sort precisa de dois loops (aninhados).
; CX sera o contador do loop externo (N-1 passadas).
DEC CX
LOOP_EXTERNO:
PUSH CX ; Salva o contador externo na pilha
MOV SI, 0 ; SI sera o indice do vetor (aponta para o elemento atual)
; O loop interno vai comparar VETOR[SI] com VETOR[SI+1]
LOOP_INTERNO:
MOV AL, VETOR[SI] ; Carrega o valor atual em AL
MOV DL, VETOR[SI+1] ; Carrega o proximo valor em DL
CMP AL, DL ; Compara Atual com Proximo
JBE NAO_TROCA ; Se AL <= DL, nao faz nada (Jump if Below or Equal)
; Se AL > DL, troca os valores de posicao (SWAP)
MOV VETOR[SI], DL ; Coloca o menor na posicao atual
MOV VETOR[SI+1], AL ; Coloca o maior na proxima posicao
NAO_TROCA:
INC SI ; Avanca para o proximo indice
LOOP LOOP_INTERNO ; Decrementa CX e repete se CX != 0
; Prepara para a proxima iteracao do loop externo
POP CX ; Recupera o contador externo original
LOOP LOOP_EXTERNO ; Decrementa o contador externo e repete
; --- FIM DO BUBBLE SORT ---
; Aqui voce pode adicionar uma rotina para imprimir,
; mas o enunciado diz que verificar no Turbo Debugger e suficiente.
FIM_PROGRAMA:
; Finaliza o programa e retorna ao DOS
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN