I'm using emu 8086 for a university project, at the beginning I had multiple compilation errors when declaring the variables, I asked around here in the forum that is in English and that problem was solved by declaring the variables after the ret, now the problem is that the code compiles but does nothing, does not even show me the console, as if it had not entered any function in itself. Except for the functions of print probe the rest of the code in visual studio with asm and it works well, of course, using the short variables of C.
org 100h
; Genera un numero pseudo aleatorio con la siguiente formula matematica x = (seed*r2 + r1) % limite;
jmp random
random :
mov ax, seed
mov cx, r2
mul cx
; x = seed*r2
mov x,ax
mov ax,x
add ax,r1
; x = x+c
mov x,ax
mov ax,x
mov cx,l
div cx
; x = x%limite
mov x,dx
mov y,dx
mov ax,seed
; Agrego uno a la semilla para generar un numero diferente la proxima vez
add ax,1
mov seed,ax
; Ya genero el numero al azar, ahora agregara ese numero al azar a la posicion actual del objeto para que vayan apareciendo obstaculos
mov ax, x
add ax, a
mov x, ax
mov ax, y
add ax, b
mov y, ax
cmp ax, 15
; *Imprimir posicion del obstaculo*
lea dx,mensaje_1
mov ah,09h
int 21h
; *Continuar*
; *Falta imprimir la posicion x, el espacio, la posicion y, el espacio
jmp recorrido
recorrido :
; El objeto se movera indefinidamente pero para detener la ejecucion del programa en algun punto se determino que el programa finalizara la ejecucion cuando llegue a la posicion 15
mov ax, a
cmp ax, 15
ja fin
cmp caso, 1
je cumple
mov ax, a
jmp comparar_x
; Si la posicion actual del objeto+1 es igual a la posicion del obstaculo el objeto se movera
comparar_x :
lea dx,mensaje_2
mov ah,09h
int 21h
; *Continuar*
; *Falta imprimir la posicion x, el espacio, la posicion y, el espacio
mov ax, a
add ax, 1
mov a, ax
mov cx, b
add cx, 1
mov b, cx
mov bx, x
cmp bx, ax
jz comparar_y
ja resultado_zero
jb resultado_zero
comparar_y :
mov bx, y
cmp bx, cx
jz resultado
ja resultado_zero
jb resultado_zero
resultado :
mov caso, 1
jmp recorrido
resultado_zero :
mov caso, 0
jmp recorrido
cumple :
; Mueve el objeto
mov cx, b
add cx, 1
mov b, cx
;*Imprimir*
lea dx,mensaje_3
mov ah,09h
int 21h
; *Continuar*
; *Falta imprimir la posicion x, el espacio, la posicion y, el espacio
jmp producto_escalar
; *Imprimir posicion del obstaculo*
lea dx,mensaje_1
mov ah,09h
int 21h
; *Continuar*
; *Falta imprimir la posicion x, el espacio, la posicion y, el espacio
jmp recorrido
producto_escalar :
; Producto escalar(a, b) y(a - 1, b - 2)
; Producto escalar entre la posicion antes de moverse y la posicion luego de moverse
mov cx, a
dec cx
mov ax, x
mul cx
mov p, ax
mov ax, b
mov cx, y
sub cx, 1
mul cx
add p, ax
mov caso, 0
; Formula usada para calcular el angulo = ( producto escalar * 10 ) % 360
mov cx, 10
mov ax, p
mul cx
mov p, ax
mov ax, p
mov cx, 360
div cx
mov p, dx
;Devuelve el objeto a la trayectoria normal (funcion y=x)
jmp continuar
continuar :
mov ax, a
add ax, 1
mov a, ax
mov b, ax
; *Imprimir posicion del obstaculo*
lea dx,mensaje_4
mov ah,09h
int 21h
; *Continuar*
; *Falta
mov ax, a
cmp ax, 15
jz fin
ja fin
jb random
fin :
ret
caso dw 0
x dw 0
y dw 0
a dw 1
p dw 0
b dw 1
seed dw 1
r1 dw 99
l dw 6
r2 dw 4
mensaje_1 dw 'Obstaculo, se encuentra en la posicion [ $'
mensaje_2 dw 'Se encuentra en la posicion [ $'
mensaje_3 dw 'Se movio hacia [ $'
mensaje_4 dw ' con un angulo de $'
mensaje_41 dw 'grados$'
mensaje_5 dw 'Volvio a su curso normal en la posicion [ $'