Napisalem programw bascomie,w ktorym znajduje sie kilka petli.Chcialbym zrobic tak zeby mozna bylo za pomoca przerwania zewnetrznego zrealizowac przeskakiwanie do nastepnej petli,potem do nastepnej...
dzieki za pomoc
dzieki za pomoc
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamWilku napisał:Tak NIE WOLNO ROBIĆ, powoduje to przepełnienie stosu (bo nigdy nie wychodzi z przerwania). Poprawnie można to zrobić tak: Odpowiednie pętle sprawdzają flagi (zmienne) w przypadku udpowiedniego warunku kończą działanie pętli i przeskakują do innej pętli. W obsłudze przerwania trzeba zrobić samą modyfikacje flagi (zmiennej) i koniec obsługi przerwania.W obsłudze przerwania umieścić należy kilka warunków, które będą sprawdzały wartość zmiennej i za pomocą polecenia Goto XXX przeskakiwały do kolejnych pętli.
Wilku napisał:W obsłudze przerwania umieścić należy kilka warunków, które będą sprawdzały wartość zmiennej i za pomocą polecenia Goto XXX przeskakiwały do kolejnych pętli.
elektryk napisał:Tak NIE WOLNO ROBIĆ, powoduje to przepełnienie stosu (bo nigdy nie wychodzi z przerwania). Poprawnie można to zrobić tak: Odpowiednie pętle sprawdzają flagi (zmienne) w przypadku udpowiedniego warunku kończą działanie pętli i przeskakują do innej pętli. W obsłudze przerwania trzeba zrobić samą modyfikacje flagi (zmiennej) i koniec obsługi przerwania.
x86:
Pre1: xor ebx,ebx
mov edi,Offset Bzdury
Loop1: mov al,60h
mov [edi+ebx],al
inc ebx
and ebx,7fh
cmp al,1
jne Loop1
Pre2: mov edx,3dah
Loop2: in al,dx
test al,8
jne Loop2
Loop3: movzx eax,Byte ptr [edi+ebx]
inc ebx
and ebx,7fh
add ecx,eax
jne Loop3
jmp Pre1
;------------------------------------
Interupt:
push eax
push ebx
push esi
pushf
mov esi,Offset Loops
mov ebx,Loop_Counter
inc ebx
and ebx,3
mov Loop_counter,ebx
mov eax,[esi+ebx*4]
mov [esp+16],eax
popf
pop esi
pop ebx
pop eax
reti
;-------------------------------------
align 4
Loop_Counter dd 0
Loops dd Offset Pre1,Offset Pre2,Offset Loop3,Offset Pre1
Bzdury db 80h dup(?)
;Petla główna
Main:
; Sroty pierdoty
rjmp Main
Skok:
; Sroty pierdoty
rjmp Skok
INT_0:
pop r30
pop r31 ; Zawartosc stosu do r30:r31
ldi r30, high(Skok)
ldi r31, low(Skok) ; Wpisz do r30:r31 adres etykiety Skok
push r31
push r30 ; Zapisz na stos r30:r31
reti
candle napisał:No właśnie ten kod nie jest przenoszalny na wszystkie procesory, np na procesorach PIC nie ma bezpośredniego dostępu do stosu, można tylko skakać i wracać.mam nadzieje ze sobie przelozycie na jaki wam sie tam procesor zamarzy
Pre1: push L 'MARK'
candle napisał:Właśnie że nie ma, jest stos sprzętowy do adresów powrotów a zmienne się przechowuje w pamięci albo na stosie softwarowym. To takie małe "dziwactwo" architektury PIC (przynajmniej w pic16 tak jest, w pic18 jest pewnie jakieś dodatkowe "udziwnienie")ale masz push'e i pop'y