o codigo foi montado pelo simulador NeanderWin, ele possui alguns mecanismos a mais que o WNeander, porém a aplicaçao do codio eh a mesma, pois possui as mesmas instruçoes.
======================================================================================
org 0 ;------------------------------------------------ PARTE 1-----------------------------------------------------
LDA a ;se o numero for positivo sinal(s1 ou s2)=0 do contrario sinal= -1
JN n1 ;antes de st todo o trexo de codigo salva os sinais nas respectivas variaveis s1 e s2
LDA zero
STA s1 ;sinal=0
sb:
LDA b
JN n2
LDA zero
STA s2
JMP st
n1:
LDA mum
STA s1 ;sinal=-1
JMP sb
n2:
LDA mum
STA s2 ;--------------------------------------------------------------------------------------------------------------
st: ; PARTE 2
LDA s1 ;esta parte verifica o sinal resultante da divisao
NOT
ADD um
ADD s2
JZ posi ;se a soma dos sinais for diferente de zero ou seja -1 ou 1 significa que o numero sera negativo
LDA zero ;numero resultante sera negativo
STA si
JMP dps
posi:
LDA um ;numero resultante sera positivo
STA si ;---------------------------------------------------------------------------------------------------------------
dps: ; PARTE 3
LDA b
JN neg1
a1:
LDA a ;esta parte serve pra colocar os numeros no formato absoluto
JN neg2
JMP cal
neg1:
NOT
ADD um
STA b
JMP a1
neg2:
NOT
ADD um
STA a ;---------------------------------------------------------------------------------------------------------------
cal: ; PARTE 4
LDA b
NOT
ADD um
STA b ;b=-b pra que facilite nos calculos pois precisamos de subtraçoes sucessivas para que a divisao seja possivel
cont:
LDA a
ADD b
STA temp ;temp existe pois após fazermos a-b precisamos verificar se a resposta eh valida e caso seja vdd precisamos fazer res++ para posteriormente reutilizar temp afim de atualizar a variavel a
JN fm
LDA res
ADD um
STA res
LDA temp ;reutilizaçao de temp
STA a ;atualizaçao da variavel a
JMP cont
fm: ;------------------------------------------------ PARTE 5--------------------------------------------------------
LDA si ;terminada a divisao a partir daqui sera verificado se a resposta sera positiva ou negativa
JZ inv ;se si=0 significa que a resposta eh negativa assim precisamos inverter seu sinal
LDA a
STA resto ;resto = ultimo valor da variavel a
JMP fim ;se si=1 eh porque a resposta eh positiva então pode-se finalizar o codigo
inv:
LDA a
NOT
ADD um
STA resto ;caso si=0 significa que a resposta e o resto precisam ter seus sinais alterados
LDA res
NOT
ADD um
STA res ;mmudança de sinal de resposta
fim:
HLT ;----------------------------------------------------------------------------------------------------------------
org 90h ; DEFINIÇAO DAS VARIAVEIS
a: db 0Eh ;numero a ser dividido (PODE SER NEGATIVO OU POSITIVO)
b: db 0FDh ;numero que dividira (PODE SER NEGATIVO OU POSITIVO)
resto: db 0
res: db 0 ;resposta
um: db 1
temp: db 0 ;variavel temporaria
s1: db 0 ;indicador de sinal de a
s2: db 0 ;indicador de sinal de b
si: db 0 ;indicador de sinal resultante
zero: db 0
mum: db 0FFh ;constante -1