Vinnaren i pepparkakshustävlingen!
2018-09-07, 11:31
  #1
Medlem
Tja! Vet inte om detta är exakt rätt plats att posta denna, men annars får en mod gärna flytta.

Jag arbetar just nu med en CpuSimulator, och jag har fastnat på en uppgift som jag behöver hjälp med. Uppgiften lyder:

"Skriv ett program som läser in tal från IO (inmatning), skriver dem till IO och lagrar dem
på stacken (PSH) ända tills användaren matar in talet 0. Skriv sedan ut talen i omvänd
ordning jämfört med hur de matades in genom att utnyttja det som finns lagrat på
stacken (POP). Talet 0 skall inte lagras på stacken. Var noga med att Pop’a lika många
gånger som ni Push’ade annars får ni problem med uppgift 17 (huvudprogram och
subrutiner). Tips är att via en räknare hålla reda på hur många Push som gjorts och
sedan utnyttja det när man Pop’ar."

Min nuvarande kod ser så här ut:

@print:

CPY R0 IO

PSH RO

JNZ R0 @print

Jag är medveten om att det ser förjävligt ut, och att PSH nog inte ska vara just där. Det jag behöver hjälp med är att:

a) Få koden att stanna på 0 utan att skriva in 0 i stacken.
b) Printa ut all kod i stacken

Tack på förhand!
Citera
2018-09-07, 12:07
  #2
Medlem
kodsnickrarns avatar
Kanske såhär för 1:

Kod:
@print:

CPY R0 IO
JZ R0 @quit
PSH RO
JMP @print

@quit:
...

Citera
2018-09-07, 12:49
  #3
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Kanske såhär för 1:

Kod:
@print:

CPY R0 IO
JZ R0 @quit
PSH RO
JMP @print

@quit:
...






Yes. Har kommit en bra bit påväg nu och nu ser min kod ut såhär:

Citat:
IMM R1 0


@PushLoop:
CPY R0 IO
JNZ R0 @EndPushLoop
PSH R0
INC R1

JMP @PushLoop



@EndPushLoop:
#print the stack


Anledningen till att jag lade till R1 och adderar den med ett vid varje input är för att hålla räkningen för att värdena sen skall kunna poppas ner till 0 från stacken(tills den blir tom).
Jag vet dock inte hur få koden att poppa av från R1 tills den når 0 och stacken är tom. (förutom increase)

Det och hur jag printar stacken har jag ingen aning om hur jag ska lösa..
Citera
2018-09-07, 12:50
  #4
Moderator
Protons avatar
Det skulle kunna vara assembler, så vi provar där.

Databaser --> C, C++ och assembler
/Moderator
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback