2016-04-18 22 views
0

Ich habe zwei Fragen.Gleiche Segmente in mehreren ASM-Dateien und Adressierungsmodi

Ich bin mit Keil uVision (v. 5.14.2.1) und Nordic Semiconductors nRF24LE1 (8051 MCU)

Frage 1

Ich habe zwei Quelldateien. Main.asm und Functions.asm Ich erstelle ein Code-Segment in Main.asm und möchte Code in Functions.asm in demselben Segment geschrieben werden. Ist es möglich, und wie mache ich das? Siehe Beispiel unten, wie ich versuche, es zu tun

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 

Frage 2

das Codebeispiel siehe unten mit Kommentaren

; 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 

Ist das richtig?

Zeile 1: Setzt varA (wo immer das im Speicher ist) = 0x00?

Zeile 2: A = varA = 0x00?

Zeile 3: A = Adresse von varA?

Wenn Zeile 3 nicht korrekt ist. Wie bekomme ich die Adresse von varA?

Antwort

2

die Antwort gefunden auf die Frage 1 von Ax51 Benutzerhandbuch:

Ein Segment ist ein Codeblock oder Datenspeicher. Ein Segment kann verlagerbar oder absolut sein. Ein verschiebbares Segment hat einen Namen, einen Typ und andere Attribute. Segmente mit demselben Namen aus verschiedenen Modulen werden als Teil desselben Segments betrachtet und als Teilsegmente bezeichnet. Mehrere Teilsegmente mit demselben Namen werden vom Lx51 Linker/Locator zu einem Segment zusammengefasst. Ein absolutes Segment kann nicht mit anderen Segmenten kombiniert werden.

Frage 2: Zeile 3 speichert die Adresse von varA