Linguaggio macchina
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]
[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
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?
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?

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!!!!
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 $
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.
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.
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
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.
jmpz 209funge 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.