Gå til innhold

Anbefalte innlegg

Skrevet

Hei! *host host*

 

*børste støv av kategorien*

 

Jeg driver å programmerer Assembly i LC-3, som har et svært begrenset instruksjonssett.

 

Jeg har nå sittet her, grublet og googlet på hvordan jeg kan dele noe på to uten å ha bit-shifting. Ganging er lett, for der er det bare å plusse på seg selv antallet ganger, men når det kommer til deling så får jeg vondt i hodet.

 

Det er sikkert ikke noe vanskelig, men jeg klarer virkelig ikke å finne noen løsning til det.

 

LC-3 sitt instruksjonssett:

Cj6xS.jpg

Videoannonse
Annonse
Skrevet (endret)

Med hvor stor nøyaktighet trenger du svaret? Og hvor viktig er ytelse? Det enkleste er nok å gå tilbake til barneskolematematikken å ta i bruk hvordan du regnet for hånd. Men om du kun trenger integer-divisjon uten noen desimaler kan du gjøre noe så enkelt som: (python-kode) Vil legge til at denne ikke er veldig effektiv om svaret er stort.

def divide(a, b):
answer = 0
while b <= a:
	answer += 1
	a -= b
return answer

Endret av etse
Skrevet (endret)

Uten shifting er du vel låst til å kjøre gjentatt substraksjon til en condition treffer inn (altså du kommer under 0).

 

Edit: Du kan også trikse litt med AND og få modulo. Kanskje til og med ta det derfra.

Endret av Lycantrophe
Skrevet (endret)

Jeg tror jeg har det nå. Jeg må bare lære meg litt conditions i LC-3 så skal jeg nok få det til.

 

Så det vil bli noe slikt med 50/2:

 

LD R0 x0032 ; DEC 50

LD R1 x0002 ; DEC 2

 

While R0 > 0{

NOT R1, R1 ; Flipp 2

ADD R0, R1, R0 ; Legg til flippet 2, altså trekk fra 2

ADD R3, R3, 1 ; Tell R3 opp som counter til svaret

}

 

Vet jeg må nok sjekke gjennom syntaksen, men ser det riktig ut?

Endret av Gavekort
Skrevet

Edit: Du kan også trikse litt med AND og få modulo. Kanskje til og med ta det derfra.

 

Om du kan vise meg hvordan, eller henvise meg til en plass jeg kan lese om det så kan jeg gjerne gjøre det på den metoden også.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...