多个 .asm 文件和寻址模式中的相同段

Same segments in multiple .asm files and addressing modes

我有两个问题。

我正在使用 Keil uVision(5.14.2.1 版)和 Nordic Semiconductors nRF24LE1(8051 MCU)

问题一

我有两个源文件。 Main.asm 和 Functions.asm 我正在 Main.asm 中创建一个代码段,并希望将在 Functions.asm 中编写的代码放在同一段中。这可能吗,我该怎么做?请参阅下面的示例,了解我如何尝试这样做

Main.asm

; Main.asm

            extrn      code       (extFunc)

?PR?SEG?A   segment    code
?PR?SEG?B   segment    code

            rseg       ?PR?SEG?A
Main:
            MOV        A,    P0
            CPL        A
            MOV        P0,   A
            SJMP       Main

            rseg       ?PR?SEG?B
Something:
            ACALL      extFunc

Functions.asm

; Functions.asm

            public     extFunc

            rseg ?PR?SEG?B

extFunc:
            CLR        A
            RET

问题二

请参阅下面的代码示例和注释

; Question 2
?PR?MYCODE  segment    code
?DA?MYDATA  segment    data

            rseg       ?DA?MYDATA
varA:
            ds         1

            rseg       ?PR?MYCODE
Main:
            MOV        varA,     #0x00    ; Line 1
            MOV        A,        varA     ; Line 2
            MOV        A,        #varA    ; Line 3

这样说对吗?

第 1 行:设置 varA(内存中的任何位置)= 0x00?

第 2 行:A = varA = 0x00?

第 3 行:A = varA 的地址?

如果第3行不正确。如何获取 varA 的地址?

从 Ax51 用户指南找到问题 1 的答案:

段是一段代码或数据内存。段可以是可重定位的或绝对的。可重定位段具有名称、类型和其他属性。来自不同模块的同名段被认为是同一段的一部分,称为部分段。 Lx51linker/locater将多个同名的部分段合并为一个段。绝对段不能与其他段合并。

问题2:第3行存储了varA的地址