想念高手!原因是你难找!
我手上有一块板子,大体情况是这样的:板子上有80C186,一块专用芯片,两片EPROM,我编了一段程序,主要流程是先对80C186的片选寄存器初始化,然后对专用芯片初始化。我用MASM611汇编,老是出错,错误是"instructions and initialized data not supported in AT segment",我怀疑是不是程序中”Segment AT 0FFFFH"出了问题,但POWER_ON的这段代码是CPU上电时跳转指令所在的代码(80C186上电时自动执行0FFFF0H~0FFFFFH区间的程序,因此跳转指令也只有放在这一区段,所以用Segment AT 0FFFFH),是我从80C186的资料上原样照搬过来的,一点都没有改。
源程序如下(包括初始化CPU和专用芯片):
DATA SEGMENT PUBLIC ‘DATA’
REG_INI DW 02H,0,0,02H.0,1FEH,0,0 ;IC initiate data
DW 3000H,23 DUP(0)
COUNT1 DW ($-REG_INI)/2
CMD_BLK DW 4200H,6024H,0,02H,0,0,3000H,03E3H
COUNT2 DW ($-CMD_BLK)/2
T1_DATA DW 4 DUP(20)
DW 04H,05H,06H,07H
COUNT3 DW ($-T1_DATA)/2
T2_DATA DW 4 DUP(30)
DW 04H,05H,06H,07H
COUNT4 DW ($-T2_DATA)/2
DATA ENDS
;
STACK1 SEGMENT STACK 'STACK'
DW 32 DUP(?)
TOP LABEL WORD
STACK1 ENDS
;
POWER_ON SEGMENT AT 0FFFFH ;POWER_ON CODE(from 80c186 PDF file)
ASSUME CS:POWER_ON
UMCS_REG EQU 0FFA0H
UMCS_VAL EQU 0FC00H
MOV DX,UMCS_REG
MOV AX,UMCS_VAL
OUT DX,AL
JMP FAR PTR FW
POWER_ON ENDS
;
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK1
FW LABEL FAR
MOV AX,STACK1
MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
CLI
LMCS_REG EQU 0FFA2H ;initiate cpu chip-select register
LMCS_VAL EQU 01F8H
MPCS_REG EQU 0FFA8H
MPCS_VAL EQU 8878H
MMCS_REG EQU 0FFA6H
MMCS_VAL EQU 11F8H
MOV DX,LMCS_REG
MOV AX,LMCS_VAL
OUT DX,AL
MOV DX,MPCS_REG
MOV AX,MPCS_VAL
OUT DX,AL
MOV DX,MMCS_REG
MOV AX,MMCS_VAL
OUT DX,AL
;
MOV AX,1000H ;initiate special IC
MOV ES,AX
LEA SI,REG_INI
MOV DI,0
MOV CX,COUNT1
CALL NEAR PTR SUUB
;
LEA SI,CMD_BLK
MOV AX,3000H
MOV DI,AX
MOV CX,COUNT2
CALL NEAR PTR SUUB
;
LEA SI,T1_DATA
MOV AX,020H
MOV DI,AX
MOV CX,COUNT3
CALL NEAR PTR SUUB
;
LEA SI,T2_DATA
MOV AX,040H
MOV DI,AX
MOV CX,COUNT4
CALL NEAR PTR SUUB
;
MOV DI,0
MOV AX,8002H
MOV ES:[DI],AX
;
SUUB PROC NEAR
AGAIN: MOV AX,[SI]
MOV ES:[DI],AX
INC SI
INC DI
DEC CX
JNZ AGAIN
RET
SUUB ENDP
CODE ENDS
END FW
另外请问:我的板子上两块EPROM都是8位的数据线,并接组成16位的数据线,源程序编好后,汇编成目标代码后,如何将此目标代码分烧到两块EPROM中?是不是先要用什么工具将目标代码拆成两段8位的代码,然后再分别烧到相应的EPROM中?如果是这样,那工具是什么工具?