Jak zadeklarowac MAKRO w asemblerze dla '51
Masz problem? Zapytaj na forum elektroda.pl
From: "Mariusz" <mwojciechowski_at_nospam_silesianet.pl>
Subject: Jak zadeklarowac MAKRO w asemblerze dla '51
Date: Wed, 31 May 2000 14:25:52 GMT
Witam!
Prosze grupowiczow o pomoc:
Jak zadeklarowac makrodefinicje w asemblerze ASM51 dla procesorow rodziny
8051 opracowanym przez Intel-a?
Probowalem, tak jak w asemblerze dla 80x86 (czyli w normalnym PC-towym), ale
asembler dla '51 wypisuje ze skladnia polecenia jest niepoprawna.
Jezeli ktos zna rozwiazanie problemu, prosze o listy
Pozdrawiam.
mwojciechowski_at_nospam_silesianet.pl
From: "Marek" <inlog_at_nospam_silesia.top.pl>
Subject: Odp: Jak zadeklarowac MAKRO w asemblerze dla '51
Date: Wed, 31 May 2000 22:08:09 GMT
Jak zadeklarowac makrodefinicje w asemblerze ASM51 dla procesorow rodziny
8051 opracowanym przez Intel-a?
A na przyklad tak (pare praktycznych przykladow z życia wziętych):
;
; PUSH_ADDRESS
; Zapamietanie na stosie adresu powrotu z wykonywanego procesu
;
%*DEFINE(PUSH_ADDRESS(addr))
(
mov A,#low %addr
push ACC
mov A,#high %addr
push ACC
)
;
; _JOB_ERROR
; Bezwarunkowe wywolanie procedury awaryjnej
;
%*DEFINE(_JOB_ERROR(error_message))
(
mov DPTR,#%error_message
lcall job_err
ret
)
;
; PUSH(REG)
; Przeslanie na stos rejestru R0...R7 aktualnego zestawu rejestrow
;
%*DEFINE(PUSH(REG))
(
mov A,%REG
push ACC
)
;
; POP(REG)
; Pobranie ze stosu rejestru R0...R7 aktualnego zestawu rejestrow
;
%*DEFINE(POP(REG))
(
pop ACC
mov %REG,A
)
;
; LJMPZ
; Dlugi skok, jesli wskazany rejestr zawiera 0
;
%*DEFINE(LJMPZ(reg,jump))
(
cjne %reg,#0,$+6
ljmp %jump
)
;
; LJMPNZ
; Dlugi skok, jesli wskazany rejestr nie zawiera 0
;
%*DEFINE(LJMPNZ(reg,jump))
(
cjne %reg,#0,$+5
sjmp $+5
ljmp %jump
)
;
; LJMPC
; Dlugi skok, jesli wskaznik C ustawiony
;
%*DEFINE(LJMPC(jump))
(
jnc $+5
ljmp %jump
)
;
; LJMPNC
; Dlugi skok, jesli wskaznik C wyzerowany
;
%*DEFINE(LJMPNC(jump))
(
jc $+5
ljmp %jump
)
;
; LJMPB
; Dlugi skok, jesli wskazany bit ustawiony
;
%*DEFINE(LJMPB(bit,jump))
(
jnb %bit,$+6
ljmp %jump
)
;
; LJMPNB
; Dlugi skok, jesli wskazany bit wyzerowany
;
%*DEFINE(LJMPNB(bit,jump))
(
jb %bit,$+6
ljmp %jump
)
Troche dlugie to-to ale sam zaczynam podziwiać co kiedys spłodziłem :-))
Marek