2016-04-18 60 views
0

我有兩個問題。多個.asm文件和尋址模式中的相同段

我使用的Keil uVision(第5.14.2.1)和北歐半導體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的地址?

回答

2

發現回答問題1,從AX51用戶指南:

段是代碼或數據存儲塊。細分受衆羣可能是可重新定位的或絕對的。可重定位段包含名稱,類型和其他屬性。來自不同模塊的具有相同名稱的片段被認爲是同一片段的一部分,並被稱爲部分片段。幾個具有相同名稱的分段通過Lx51鏈接器/定位器合併成一個分段。絕對片段不能與其他片段組合。

問題2:第3行存儲varA的地址