多个 .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的地址
我有两个问题。
我正在使用 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的地址