📄 mx51bank.lst
字号:
AX51 MACRO ASSEMBLER MX51BANK 08/16/05 09:17:23 PAGE 1
MACRO ASSEMBLER AX51 V2.13
OBJECT MODULE PLACED IN MX51BANK.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\AX51.EXE MX51BANK.A51 MOD_MX51 SET(LARGE) DEBUG EP
LOC OBJ LINE SOURCE
1 $nocond MOD_MX51 NOLINES
2 ;------------------------------------------------------------------------------
3 ; This file is part of the PK51 Professional Developers Kit
4 ; Support for large programs on Philips 80C51MX architecture
5 ; Copyright (c) 2000-2001 Keil Elektronik GmbH and Keil Software, Inc.
6 ; Version 1.02
7 ;------------------------------------------------------------------------------
8 ;************************ Configuration Section *******************************
9 ; Program Code in expanded memory is supported via the code banking machnism
10 ; known from the classic 8051 architecture. You need to specify the number
11 ; of code banks that are required for your application.
12 ;
0002 13 ?B_NBANKS EQU 2 ; Define max. Number of Banks
14 ; ; the max. value for ?B_BANKS is 16
15 ;******************************************************************************
16 ; *
0002 17 ?B_MODE EQU 2 ; 2 for using Philips 80C51MX address lines
18
19 ; Define SFR Registers
00E0 20 ACC DATA 0E0H
00D0 21 PSW DATA 0D0H
0082 22 DPL DATA 82H
0083 23 DPH DATA 83H
24
25 PUBLIC ?B_BANKSTARTSEG
0080 26 ?B_BANKSTARTSEG EQU 080H
0000 27 ?B_FIRSTBIT EQU 0 ; set to 0
28
29
30 NAME ?BANK?SWITCHING
31
32 PUBLIC ?B_NBANKS, ?B_MODE, ?B_CURRENTBANK, ?B_MASK
33 PUBLIC ?B_FACTOR
34 PUBLIC SWITCHBANK
35
0001 36 ?B_FACTOR EQU 1 SHL ?B_FIRSTBIT
37
------ 38 ?C_INITSEG SEGMENT CODE ; Segment zur Initialisierung
------ 39 RSEG ?C_INITSEG
000000 01 40 DB 01H ; IData
000001 00 F 41 DB ?B_CURRENTBANK ; Init Current Bank
000002 00 42 DB 0 ; Set to Zero
43
------ 44 ?BANK?DATA SEGMENT DATA
------ 45 RSEG ?BANK?DATA
000000 46 ?B_CURRENTBANK: DS 1
47
48 ; generate Mask and Bank Number Information
49 IF ?B_NBANKS <= 2
0001 50 MASK EQU 00000001B
ENDIF
60
0001 61 ?B_MASK EQU MASK SHL ?B_FIRSTBIT
62
63 BANKN MACRO N
64 BANK&N EQU N SHL ?B_FIRSTBIT
65 ENDM
66
AX51 MACRO ASSEMBLER MX51BANK 08/16/05 09:17:23 PAGE 2
0000 67 CNT SET 0
68
69 REPT ?B_NBANKS
70 BANKN %CNT
71 CNT SET CNT+1
79
80 ; Convert Bank No in Accu to Address * 16
81 IF ?B_FIRSTBIT = 0
82 CONVBANKNO MACRO
83 SWAP A
84 ENDM
85 ENDIF
86
ENDIF
93
ENDIF
100
ENDIF
106
ENDIF
111
ENDIF
117
ENDIF
124
ENDIF
131
132
133 SELECT MACRO N
134 LOCAL XLABEL, YLABEL
135
136 PUBLIC ?B_BANK&N
137 ?B_BANK&N:
138 MOV A,?B_CURRENTBANK
139 ANL A,#?B_MASK
140 CJNE A,#BANK&N,XLABEL
141 SJMP YLABEL
142
143 XLABEL: CONVBANKNO ; Convert Bank Number to Address
144 PUSH ACC
145 MOV A,#HIGH ?BANK?SWITCH
146 PUSH ACC
147 YLABEL: PUSH DPL
148 PUSH DPH
149 LJMP ?B_SWITCH&N
150
151 ENDM
152
153
------ 154 ?BANK?SELECT SEGMENT CODE
155
------ 156 RSEG ?BANK?SELECT
0000 157 CNT SET 0
158
159 REPT ?B_NBANKS
160 SELECT %CNT
161 CNT SET CNT+1
162
204
205
206 SWITCH MACRO N
207 ORG N * 16
208 PUBLIC ?B_SWITCH&N
209 ?B_SWITCH&N:
210 ORL ?B_CURRENTBANK,#?B_MASK
211 IF N <> (?B_NBANKS-1)
AX51 MACRO ASSEMBLER MX51BANK 08/16/05 09:17:23 PAGE 3
212 ANL ?B_CURRENTBANK,#(BANK&N OR NOT ?B_MASK)
213 ENDIF
214
215 DB 0A5H ; ESC
216 DB 002H ; EJMP Instruction
217 DB LOW (N+?B_BANKSTARTSEG)
218 DW SWITCHDONE
219 ENDM
220
221
------ 222 ?BANK?SWITCH SEGMENT CODE PAGE
223
------ 224 RSEG ?BANK?SWITCH
0000 225 CNT SET 0
226
227 REPT ?B_NBANKS
228 SWITCH %CNT
229
230 CNT SET CNT+1
262
------ 263 RSEG ?BANK?SELECT
264
265 ;************************ SWITCHBANK FUNCTION *******************************
266 ; *
267 ; SWITCHBANK allows use of bank-switching for C programs *
268 ; *
269 ; prototype: extern switchbank (unsigned char bank_number); *
270 ; *
271 ;******************************************************************************
272
00002E EF 273 SWITCHBANK: MOV A,R7
00002F C4 274 SWAP A
000030 900000 F 275 MOV DPTR,#?BANK?SWITCH
000033 73 276 JMP @A+DPTR
000034 22 277 SWITCHDONE: RET
278
279 END
AX51 MACRO ASSEMBLER MX51BANK 08/16/05 09:17:23 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
??0000 . . . . . . . . . . . C ADDR 0009H R SEG=?BANK?SELECT
??0001 . . . . . . . . . . . C ADDR 0010H R SEG=?BANK?SELECT
??0002 . . . . . . . . . . . C ADDR 0020H R SEG=?BANK?SELECT
??0003 . . . . . . . . . . . C ADDR 0027H R SEG=?BANK?SELECT
?B_BANK0 . . . . . . . . . . C ADDR 0000H R SEG=?BANK?SELECT
?B_BANK1 . . . . . . . . . . C ADDR 0017H R SEG=?BANK?SELECT
?B_BANKSTARTSEG. . . . . . . N NUMB 0080H A
?B_CURRENTBANK . . . . . . . D ADDR 0000H R SEG=?BANK?DATA
?B_FACTOR. . . . . . . . . . N NUMB 0001H A
?B_FIRSTBIT. . . . . . . . . N NUMB 0000H A
?B_MASK. . . . . . . . . . . N NUMB 0001H A
?B_MODE. . . . . . . . . . . N NUMB 0002H A
?B_NBANKS. . . . . . . . . . N NUMB 0002H A
?B_SWITCH0 . . . . . . . . . C ADDR 0000H R SEG=?BANK?SWITCH
?B_SWITCH1 . . . . . . . . . C ADDR 0010H R SEG=?BANK?SWITCH
?BANK?DATA . . . . . . . . . D SEG 000001H REL=UNIT, ALN=BYTE
?BANK?SELECT . . . . . . . . C SEG 000035H REL=UNIT, ALN=BYTE
?BANK?SWITCH . . . . . . . . C SEG 000018H REL=UNIT, ALN=PAGE
?BANK?SWITCHING. . . . . . . -- ---- -------
?C_INITSEG . . . . . . . . . C SEG 000003H REL=UNIT, ALN=BYTE
ACC. . . . . . . . . . . . . D ADDR 00E0H A
BANK0. . . . . . . . . . . . N NUMB 0000H A
BANK1. . . . . . . . . . . . N NUMB 0001H A
CNT. . . . . . . . . . . . . N NUMB 0002H A
DPH. . . . . . . . . . . . . D ADDR 0083H A
DPL. . . . . . . . . . . . . D ADDR 0082H A
MASK . . . . . . . . . . . . N NUMB 0001H A
PSW. . . . . . . . . . . . . D ADDR 00D0H A
SWITCHBANK . . . . . . . . . C ADDR 002EH R SEG=?BANK?SELECT
SWITCHDONE . . . . . . . . . C ADDR 0034H R SEG=?BANK?SELECT
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -