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

时间:2016-04-18 11:00:19

标签: assembly 8051

我有两个问题。

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

问题1

我有两个源文件。 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

问题2

请参阅下面的代码示例以及评论

; 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的地址?

1 个答案:

答案 0 :(得分:2)

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

段是代码块或数据存储器。段可以是可重定位的或绝对的。可重定位段具有名称,类型和其他属性。来自不同模块的具有相同名称的段被视为同一段的一部分,并称为部分段。 Lx51链接器/定位器将多个具有相同名称的部分段组合成一个段。绝对分段不能与其他分段组合。

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