TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman en 29 de Enero de 2012, 19:09:02
-
hola.estaba haciendo un programa para el 18f2550 en el cual he necesitado realizar la llamada a otros programas.pero queria que al llegar a los returns,el programa no
retroceda por sus mismos pasos.
es decir retornar hacia atras pero saltandome uno de los programas por los que he pasado.
esto es lo que represento en el ejemplo.salto dos veces y vuelvo al principio sin que tenga repercusiones para poder realizar llamadas desde el programa
principal.solo hay que tener en cuenta cuantas llamadas se han realizado desde el programa original.y poner tantos POP como sean necesarios.
ejemplo:
0x2340 call 0x2364
0x2341 nop
.
.
0x2350 nop
.end
0x2364 nop
0x2365 call 0x2378
0x2368 nop
.
.
.
0x2377 return
0x2378 nop
0x2379 call 0x2400
.
.
0x2400 nop
POP
POP
MOVLW 0X23
MOVWF PCLATH
movlw 0x41
movwf PCL
al poner los dos POP es para que el Stack Pointer desapile dos de las direcciones de retorno al encontrar un un return.
pero es factible hacer esto?para esto se utiliza la instruccion POP?o es para otra cosa.
-
Hola groundman, Estas usando un PIC18?, en esos si es posible acceder a la pila, asi que veo factible eso que haces
Saludos
-
es la primera vez que uso esa instruccion.creo haberlas usado en los Z80.pero tampoco estoy muy seguro.hace ya muchos años de eso.
no se si lo mas normal es que se usen antes y despues de una interrupcion.push y pop
-
Hola! :lol:
En el Z80 (y en otros micros como el 8088, ¡ugh! ¡qué viejo que soy!) se usaban las instrucciones PUSH y POP para pasar variables a las funciones (por valor, el contenido de los registros; por referencia, cargas DS:Offset de la dirección de memoria en que se encuentra la variable).
Que mal me hace recordar la programación en assembler para esos micros :(
Salú2