Linguaggio macchina

samlu
Allora l'sercizio dice:considerato il seguente frammento di programma in linguaggio macchina,memorizzato a partire dalla locazione di memoria di indirizzo 200:
[200 read 20
201 loadA 20
202 load B 18
203 dif
204 jumpz 209
205 loadB 19
206 mul
207 storeA 19
208 jump 200
209 loadA 19
210 loadB 19
211 add
212 storeA
213 write
214 halt]
Si supponga ke le celle di indirizzo 18 e 19 contenganorispettivamente i valori 0 e 1.Data in ingresso una sequenza di interi n1,...,nn dire che cosa fa il programma e che cosa viene stampato in uscita.
Il mio dubbio riguarda la sequenza di interi,ma dove è allocata?cioè è nella cella di memoria 18?xkè sennò come la faccio entrare nel programma?[/code]

Risposte
hamming_burst
Ciao,
penso che la sequenza di ingresso sia all'indirizzo $20$ come si deduce dal "read".
però non mi torna qualcosa, se non ti da il valore contenuto nelle celle non puoi sapere l'output.

loadA 20
loadB 18

A= #20 = $n1$
B = #18 = $0$

B = B-A
jump se zero, ma se non sai il valore di $n1$, puoi solo ipotizzare l'output... non dice altro il testo? :-)

samlu
no il testo nn dice nient'altro...ma allora io a questo punto devo fare delle considerazioni sulla sequenza delle n?
tipo parto A=n1, B=0 faccio la differenza ed A=n1 ora ipotizzo n1=0 allora vado al comando 209 e stampo 2 ed esco dal programma, se $ != <0> $ continuo il programma e carico la cella 19 con n1,A assume il valore n2 e da qui riparto a fare la stessa considerazione con n1?Viene una cosa lunghissima e impicciosa!!!!

hamming_burst
non saprei che altro pensare al momento.
una Diff sarebbe come una comparazione, e in questo caso l'unica cosa che devi conoscere è la sequenza di ingresso. Se $=$ o $!=$ da $0$ il jump varia.
Ma non capisco anche come possa avanzare nella sequenza...

più che impicciosa..."pallosetta" :-)
Se hai $n$ numeri la cosa esplode in molti ramificazioni. Dopo provo a leggerlo meglio, ma al momento senza sapere la vera sequenza in ingresso, si possono solo fare ipotesi.

Albesa81
Uhm...premesso che lo snippet di codice che hai postato non è molto chiaro e sicuramente mancano delle informazioni essenziali per poterlo decodificare,così a occhio sembra che legga una sequenza di valori da una qualche sorgente di dati esterna (per esempio un file,una porta di I/O o un keybuffer),li trasferisca nella locazione 20 e ne memorizzi il prodotto parziale nella locazione 19,fino a che non legge uno zero,che stando a quel
jmpz 209
funge da escape.Una volta fuori dal ciclo,quel
209 loadA 19
210 loadB 19
211 add

mi fa pensare che venga stampato il doppio del prodotto memorizzato:ad esempio, la sequenza 10 8 13 0 produrrebbe (10*8*13) + (10*8*13) = 1040 + 1040 = 2080.
In mancanza di ulteriori elementi chiarificatori questa rimane solo una mia congettura,in quanto bisognerebbe avere sottomano il testo completo dell'esercizio per poter rispondere con sicurezza al quesito.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.