Код
;-------BANK segment
DSEG AT 00h
RegBnks SEGMENT DATA
RSEG RegBnks
org 08h;Bank 1
DS 2;R0, R1 in bank 1 using for internal
LCD_X: DS 1;X=R2 in bank 1
LCD_Y: DS 1;Y=R3 in bank 1
LCD_BS: DS 1;Begining string of LCD
;-------BIT segment
BSEG AT 20h
BitSeg SEGMENT BIT
RSEG BitSeg
LCD_BW: DBIT 1;0 => White background 1 => Black
LCD_NS: DBIT 1;New string after write
LCD_RC: DBIT 1 ;Return of carriage
LCD_SX: DBIT 1 ;Save X
LCD_SY: DBIT 1 ;Save Y
LCD_M: DBIT 1 ;1 string in CODE memory, 0 in XRAM
;-------BYTE area
;-------STACK - highest 20h of internal RAM, STACK grows UP
BSEG AT 60h
STACK SEGMENT DATA
RSEG STACK
DS 20H
USING 0
CSEG AT 0
MAIN SEGMENT CODE
RSEG MAIN
;-------Int Vectors
ORG 0000h
ljmp START;start vector
ORG 006Bh
ljmp USB_INT;usb interrupt
ORG 0100h
;-------START
START: mov SP,#STACK-1
DSEG AT 00h
RegBnks SEGMENT DATA
RSEG RegBnks
org 08h;Bank 1
DS 2;R0, R1 in bank 1 using for internal
LCD_X: DS 1;X=R2 in bank 1
LCD_Y: DS 1;Y=R3 in bank 1
LCD_BS: DS 1;Begining string of LCD
;-------BIT segment
BSEG AT 20h
BitSeg SEGMENT BIT
RSEG BitSeg
LCD_BW: DBIT 1;0 => White background 1 => Black
LCD_NS: DBIT 1;New string after write
LCD_RC: DBIT 1 ;Return of carriage
LCD_SX: DBIT 1 ;Save X
LCD_SY: DBIT 1 ;Save Y
LCD_M: DBIT 1 ;1 string in CODE memory, 0 in XRAM
;-------BYTE area
;-------STACK - highest 20h of internal RAM, STACK grows UP
BSEG AT 60h
STACK SEGMENT DATA
RSEG STACK
DS 20H
USING 0
CSEG AT 0
MAIN SEGMENT CODE
RSEG MAIN
;-------Int Vectors
ORG 0000h
ljmp START;start vector
ORG 006Bh
ljmp USB_INT;usb interrupt
ORG 0100h
;-------START
START: mov SP,#STACK-1
В дебагере вместо
Код
START: mov SP,#STACK-1
Это
Код
C:0x0100 758120 MOV SP(0x81),#0x20
Тоже самое с регистрами из 1 го банка. Т.е. если делаем mov LCD_X,#0h а потом переходим к первому банку, в R2 вовсе не 0.
Соостветственно я запутался. Из справки по директивам почти ничего не понял. Т.е. мне кажется после BSEG AT 60h сегмент будет по смещению 60h, но почему-то это не так.
И еще. Почему компилятор придирается к push A, а к push ACC нет?