[ARM] Data in register zetten

Pagina: 1
Acties:

  • AB2ND
  • Registratie: Mei 2002
  • Laatst online: 18-01 12:18

AB2ND

Vonkenboer

Topicstarter
Ik ben bezig met het programmeren van een arm omgeving
nu loop ik echter tegen een probleempje aan,
wat is het verschil tussen:

LDR r0, =#10 en
LDR r0, #10

het gaat om een philps lpc2106

Specs ][ [DPC] rc5-72 stats ][ 7758 3D Marks 2001 compare url


  • JoetjeF
  • Registratie: Juni 2003
  • Laatst online: 10-11-2012

JoetjeF

Mo Chuisneoir

Heb je zelf al geprobeerd wat het verschil is? De tweede instructie syntax ken ik niet, tenzij het een vermomde mov r0,#10 gaat.

  • AB2ND
  • Registratie: Mei 2002
  • Laatst online: 18-01 12:18

AB2ND

Vonkenboer

Topicstarter
Ik heb inmiddels een geniale optie in mn ontwikkelomgeving ontdekt: simulate
en ik ben er al uit
tnx anyway

Specs ][ [DPC] rc5-72 stats ][ 7758 3D Marks 2001 compare url


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Misschien is het handig als je nu ook nog even vertelt wat het verschil was, dan heeft dit topic tenminste in de search nog nut. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • AB2ND
  • Registratie: Mei 2002
  • Laatst online: 18-01 12:18

AB2ND

Vonkenboer

Topicstarter
hehe 8)7
beide sintaxis zijn fout
enige juiste bij een LDR is:
  • LDR R0,=10 @laad het getal 10 in r0
Wanneer je bijvoorbeel bij een ADD instructie een vaste waarde wilt gebruiken wordt het:
  • ADD R0,R1,#4 @ tel 4 bij R1 op en zet her resultaat in R0
Kortweg wanneer je een vaste waarde wilt gebruiken gebruik een een "#" allen bij LDR is het anders en gebruik je een "="

Specs ][ [DPC] rc5-72 stats ][ 7758 3D Marks 2001 compare url


  • JoetjeF
  • Registratie: Juni 2003
  • Laatst online: 10-11-2012

JoetjeF

Mo Chuisneoir

Hmm, ik gebruik deze syntax nooit maar is inderdaad wel makkelijk. ldr r0,= kan je niet alleen gebruiken om een absolute getal te laden (wat gewoon een mov r0,#x is), maar ook om een pointer naar een label te creëeren (wat dan vertaalt wordt naar add/sub r0,pc,#x).

Vroeger (:P) kon je voor de laatste methode alleen adr r0,label gebruiken. Ik denk dat ik hier maar toch bij blijf ;)

Overigens doet ldr r0,label niets anders dan de waarde at address label in r0 te laden (wordt vertaalt als ldr r0,[pc,#x].

  • AB2ND
  • Registratie: Mei 2002
  • Laatst online: 18-01 12:18

AB2ND

Vonkenboer

Topicstarter
Volgens mij moet je om een pointer naar een label te maken
ldr r0,=label
gebruiken.
ldr r(x),=(value)
is volgens mij de juiste syntax

Specs ][ [DPC] rc5-72 stats ][ 7758 3D Marks 2001 compare url


  • JoetjeF
  • Registratie: Juni 2003
  • Laatst online: 10-11-2012

JoetjeF

Mo Chuisneoir

Laten we voorop stellen dat deze syntaxes pseudo opcodes zijn en min of meer door de assembler bepaald worden. Het zijn in ieder geval geen 'officiele' ARM opcodes, ldr r0,label and adr r0,label zijn dat bevoorbeeld wel.

Ik weet niet welke assembler je gebruikt, maar in GNU Assembler staat het volgende:
ldr <register> , = <expression>
If expression evaluates to a numeric constant then a MOV or MVN instruction
will be used in place of the LDR instruction, if the constant can be generated
by either of these instructions. Otherwise the constant will be placed into the
nearest literal pool (if it not already there) and a PC relative LDR instruction
will be generated.
Mijn uitleg in de vorige post was dus verkeerd :X

edit:
Wat jij dus eigenlijk ook zegt, alleen kende ik de ldr r0,=(label) niet 8)7

[ Voor 8% gewijzigd door JoetjeF op 16-06-2005 10:55 ]

Pagina: 1