Descrição
Os algoritmos implementados até o presente momento são: inserção, busca e caminhamento em ordem.
Assim que eu terminar a "exclusão" posto aqui. :D
Trabalho apresentado na disciplina "Programação de Sistemas" da 2a série do curso de Ciência da Computação da Universidade Estadual de Maringá, ministrada pelo professor Munif Gebara Júnior.
Acadêmicos: Ewerton Daniel de Lima e Cezar Augustus Lamann
[ Download:
abba.asm ]
[
Enviar nova versão ]
[ Esconder código-fonte ]
.model small
.stack
.data
primeiro db 0,0
mensagem db 10,13,"Insira um valor (de 0 a 65535): $"
mensagemInsercao db "INSERINDO ELEMENTOS$",10,13
mensagemCaminhamento db 10,13,"CAMINHAMENTO EM ORDEM$",10,13
mensagemBusca db 10,13,"BUSCANDO ELEMENTO$",10,13
naoEncontrou db 10,13,"ITEM NÃO ENCONTRADO$",10,13
encontrou db 10,13,"ITEM ENCONTRADO$",10,13
numero db 6, 1, 0,0,0,0,0
resultado db 10,13,"00000$"
.code
entrada proc
mov ax, seg mensagem
mov ds, ax
lea dx, mensagem
mov ah, 09h
int 21h
mov ax, seg numero
mov ds, ax
lea dx, numero
mov ah, 0Ah
int 21h
mov ch, 0
mov cl, [numero+1]
lea bx, numero
inc bx
add bx, cx
mov dx, 1
mov cx, 0
calculo:
sub [bx], 48
mov ax, [bx]
mov ah, 0
push dx
mul dx
pop dx
push ax
mov ax, dx
mov dx, 10
mul dx
mov dx, ax
pop ax
add cx, ax
dec bl
lea ax, numero
inc ax
cmp bx, ax
jne calculo
ret
entrada endp
saida proc
mov bx, seg resultado
mov ds, bx
mov cx,5
lea si,resultado+6
volta:
mov dx,0
mov bx,10
div bx
add dl,48
mov [si],dl
dec si
loop volta
mov ah,09h
lea dx,resultado
int 21h
ret
saida endp
caminhamento proc
mov cx, 1
camEsq:
mov dx, ds
cmp dx, 0
je fimCaminhamento
push dx
inc cx
mov bx, 0
mov dh, [bx]
inc bx
mov dl, [bx]
mov ds, dx
jmp camEsq
camDir:
mov dx ,ds
cmp dx, 0
je fimCaminhamento
mov bx, 4
mov ah, [bx]
inc bx
mov al, [bx]
mov bx, ds
push bx
push cx
call saida
pop cx
pop bx
mov ds, bx
mov bx, 2
mov dh, [bx]
inc bx
mov dl, [bx]
mov ds, dx
jmp camEsq
fimCaminhamento:
dec cx
cmp cx, 0
je fimfimCaminhamento
pop dx
mov ds, dx
jmp camDir
fimfimCaminhamento:
ret
caminhamento endp
proc inserir
mov cx, 5
;INSERÇÃO
mov ax, seg mensagemInsercao
mov ds, ax
lea dx, mensagemInsercao
mov ah, 09h
int 21h
loopPrincipal:
push cx
call entrada
mov ah, 48h
mov bx, 1
int 21h
mov ds, ax
mov bx, 0
mov [bx], 0
inc bx
mov [bx], 0
inc bx
mov [bx], 0
inc bx
mov [bx], 0
inc bx
mov [bx], ch
inc bx
mov [bx], cl
mov bx, seg primeiro
mov ds, bx
mov dh, [primeiro]
mov dl, [primeiro+1]
cmp dx, 0
jne naoSerPrimeiro
mov [primeiro], ah
mov [primeiro+1], al
jmp serPrimeiro
naoSerPrimeiro:
busca:
mov ds, dx
mov bx, 4
mov dh, [bx]
inc bx
mov dl, [bx]
cmp cx, dx
jl casoMenor
casoMaior:
mov bx, 2
mov dh, [bx]
inc bx
mov dl, [bx]
jp comparador
casoMenor:
mov bx, 0
mov dh, [bx]
inc bx
mov dl, [bx]
comparador:
cmp dx, 0
jne busca
mov [bx], al
dec bx
mov [bx], ah
serPrimeiro:
pop cx
loop loopPrincipal
;CAMINHAMENTO
mov ax, seg mensagemCaminhamento
mov ds, ax
lea dx, mensagemCaminhamento
mov ah, 09h
int 21h
mov bx, seg primeiro
mov ds, bx
mov dh, [primeiro]
mov dl, [primeiro+1]
mov ds, dx
call caminhamento
;BUSCA
mov ax, seg mensagemBusca
mov ds, ax
lea dx, mensagemBusca
mov ah, 09h
int 21h
call entrada
mov bx, seg primeiro
mov ds, bx
mov dh, [primeiro]
mov dl, [primeiro+1]
busca2:
mov ds, dx
mov bx, 4
mov dh, [bx]
inc bx
mov dl, [bx]
cmp cx, dx
je encontrar
jl casoMenor2
casoMaior2:
mov bx, 2
mov dh, [bx]
inc bx
mov dl, [bx]
jp comparador2
casoMenor2:
mov bx, 0
mov dh, [bx]
inc bx
mov dl, [bx]
comparador2:
cmp dx, 0
jne busca2
mov ax, seg naoEncontrou
mov ds, ax
lea dx, naoEncontrou
mov ah, 09h
int 21h
jp fim
encontrar:
mov ax, seg encontrou
mov ds, ax
lea dx, encontrou
mov ah, 09h
int 21h
fim:
mov ax, 4C00h
int 21h
endp inserir
end inserir
Scripts recomendados
GAS Inteiro para String
GAS Informações da CPU
Escrita de um número em binário na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembler)
sdfgsd
Soma dois números lidos da memória
Comentários
[1] Comentário enviado por
andrezc em 12/05/2010 - 08:50h:
Eu sei bem pouco de assembly, mas é sem dúvida, uma linguagem espetacular.
Agora, me tira uma dúvida por genteleza...
o MOV move dados de memoria, não é ?!
[2] Comentário enviado por
foxbit3r em 14/05/2010 - 14:58h:
int 21h significa chamada da interrupção de video no ms-dos.
O site se chama viva o linux. Bem interessante!
[3] Comentário enviado por
andrezc em 14/05/2010 - 21:50h:
@foxbit3r
"O site se chama viva o linux."
é comigo ?
[4] Comentário enviado por
ewertondaniel em 22/06/2010 - 22:51h:
Olá pessoal!
A int 21h é uma interrupção do DOS que tem várias funções.
O meu objetivo ao postar o código aqui foi compartilhar o conhecimento da linguagem assembly e esta implementação poderia ser feita sem rotinas do DOS. Utilizei a int 21h pois estou aprendendo assembly com ela.
Se houver alguma implementação que não utilize de interrupções do DOS, gostaria que alguém postasse, pois seria muito interessante.
Grande abraço a todos!