/docs/user/it/src/instructions.rst

https://github.com/lupino3/edumips64 · ReStructuredText · 626 lines · 425 code · 201 blank · 0 comment · 0 complexity · a6f9d06a776c2eae9397b287652d6ba8 MD5 · raw file

  1. Il set di istruzioni
  2. ====================
  3. In questa sezione verrà illustrato il repertorio delle istruzioni MIPS64
  4. riconosciute da EduMIPS64. è possibile effettuare due differenti
  5. classificazioni: una basata sulla funzionalità delle istruzioni e l'altra
  6. basata sul tipo di parametri.
  7. .. Please refer to Section~\ref{mipsis} for more informations about those
  8. classifications.
  9. La prima classificazione suddivide le istruzioni in tre categorie: istruzioni
  10. ALU, istruzioni Load/Store, istruzioni di controllo del flusso. I prossimi tre
  11. paragrafi descriveranno ciascuna categoria e le istruzioni che vi
  12. appartengono.
  13. Il quarto paragrafo descriverà le istruzioni che non rientrano in nessuna
  14. delle tre categorie sopraelencate.
  15. .. For a more complete MIPS64 instruction set reference, please refer
  16. to~\cite{mips-2}.
  17. Le istruzioni ALU
  18. -----------------
  19. L'unità logico-aritmetica (ALU) fa parte dell'unità esecutiva di una
  20. CPU ed assume il ruolo di esecuzione di operazioni logiche ed aritmetiche. Il
  21. gruppo di istruzioni ALU conterrà quindi quelle istruzioni che effettuano
  22. questo tipo di operazioni.
  23. Le istruzioni ALU possono essere suddivise in due gruppi: *tipo R* e
  24. *tipo I*.
  25. Quattro di esse utilizzano due registri speciali: LO e HI. Tali registri sono
  26. interni alla CPU ed è possibile accedere al loro valore mediante le
  27. istruzioni `MFLO` e `MFHI`.
  28. Ecco la lista delle istruzioni ALU di tipo R.
  29. * `AND rd, rs, rt`
  30. Esegue un AND bit a bit tra rs ed rt, e pone il risultato in rd.
  31. * `ADD rd, rs, rt`
  32. Somma il contenuto dei registri a 32-bit rs ed rt, considerandoli come
  33. valori con segno, e pone il risultato in rd. Lancia un'eccezione in caso di
  34. overflow.
  35. * `ADDU rd, rs, rt`
  36. Somma il contenuto dei registri a 32-bit rs ed rt, e pone il risultato in
  37. rd. Non si verificano eccezioni di overflow.
  38. .. \MISN{}
  39. * `DADD rd, rs, rt`
  40. Somma il contenuto dei registri a 64-bit rs ed rt, considerandoli come
  41. valori con segno, e pone il risultato in rd. Lancia un'eccezione in caso di
  42. overflow.
  43. * `DADDU rd, rs, rt`
  44. Somma il contenuto dei registri a 64-bit rs ed rt, e pone il risultato in rd.
  45. Non si verificano eccezioni di overflow.
  46. .. \MISN{}
  47. * `DDIV rs, rt`
  48. Esegue la divisione tra i registri a 64-bit rs ed rt, ponendo i 64-bit del
  49. quoziente in LO ed i 64-bit del resto in HI.
  50. * `DDIVU rs, rt`
  51. Esegue la divisione tra i registri a 64-bit rs ed rt, considerandoli come
  52. valori senza segno e ponendo i 64-bit del quoziente in LO ed i 64-bit del
  53. resto in HI.
  54. * `DIV rs, rt`
  55. Esegue la divisione tra i registri a 32-bit rs ed rt, ponendo i 32-bit del
  56. quoziente in LO ed i 32-bit del resto in HI.
  57. * `DIVU rs, rt`
  58. Esegue la divisione tra i registri a 32-bit rs ed rt, considerandoli come
  59. valori senza segno e pone i 32-bit del quoziente in LO ed i 32-bit del resto
  60. in HI.
  61. * `DMULT rs, rt`
  62. Esegue il prodotto tra i registri a 64-bit rs ed rt, ponendo i 64 bit bassi
  63. del risultato nel registro speciale LO e i 64 bit alti del risultato nel
  64. registro speciale HI.
  65. * `DMULTU rs, rt`
  66. Esegue il prodotto tra i registri a 64-bit rs ed rt, considerandoli come
  67. valori senza segno e ponendo i 64 bit bassi del risultato nel registro
  68. speciale LO e i 64 bit alti del risultato nel registro speciale HI.
  69. * `DMULU rs, rt`
  70. Esegue il prodotto tra i registri a 64-bit rs ed rt, considerandoli come
  71. valori senza segno e ponendo i 64 bit bassi del risultato nel registro
  72. speciale LO e i 64 bit alti del risultato nel registro speciale HI.
  73. * `DSLL rd, rt, sa`
  74. Effettua uno shift verso sinistra del registro a 64-bit rt, di un numero di
  75. bit indicato nel valore immediato (positivo compreso tra 0 e 63) sa, e pone
  76. il risultato in rd. I bit liberi vengono posti a zero.
  77. * `DSLLV rd, rt, rs`
  78. Effettua uno shift verso sinistra del registro a 64-bit rt, di un numero di
  79. bit specificato nei 6 bit bassi del registro rs che verrà letto come valore
  80. senza segno, e pone il risultato in rd. I bit liberi vengono posti a zero.
  81. * `DSRA rd, rt, sa`
  82. Effettua uno shift verso destra del registro a 64-bit rt, di un numero di
  83. bit specificato nel valore senza segno immediato (positivo compreso tra 0 e
  84. 63) sa, e pone il risultato in rd. I bit liberi vengono posti a zero se il
  85. bit più a sinistra di rs è zero, altrimenti vengono posti a uno.
  86. * `DSRAV rd, rt, rs`
  87. Effettua uno shift verso destra del registro a 64-bit rt, di un numero di
  88. bit specificato nei 6 bit bassi del registro rs che verrà letto come valore
  89. senza segno,e pone il risultato in rd. I bit liberi vengono posti a zero se
  90. il bit più a sinistra di rs è zero, altrimenti vengono posti a uno.
  91. * `DSRL rd, rs, sa`
  92. Effettua uno shift verso destra del registro a 64-bit rt, di un numero di
  93. bit specificato nel valore immediato (positivo compreso tra 0 e 63) sa, e
  94. pone il risultato in rd. I bit liberi vengono posti a zero.
  95. * `DSRLV rd, rt, rs`
  96. Effettua uno shift verso destra del registro a 64-bit rt, di un numero di
  97. bit specificato nei 6 bit bassi del registro rs che verrà letto come valore
  98. senza segno, e pone il risultato in rd. I bit liberi vengono posti a zero.
  99. * `DSUB rd, rs, rt`
  100. Sottrae il valore del registro a 64-bit rt al valore del registro a 64-bit
  101. rs, considerandoli come valori con segno, e pone il risultato in rd. Lancia
  102. un'eccezione in caso di overflow.
  103. * `DSUBU rd, rs, rt`
  104. Sottrae il valore del registro a 64-bit rt al valore del registro a 64-bit
  105. rs, e pone il risultato in rd. Non si verificano eccezioni di overflow.
  106. .. \MISN{}
  107. * `MFLO rd`
  108. Copia il contenuto del registro speciale LO in rd.
  109. * `MFHI rd`
  110. Copia il contenuto del registro speciale HI in rd.
  111. * `MOVN rd, rs, rt`
  112. Se rt è diverso da zero, copia il contenuto di rs in rd.
  113. * `MOVZ rd, rs, rt`
  114. Se rt è uguale a zero, copia il contenuto di rs in rd.
  115. * `MULT rs, rt`
  116. Esegue il prodotto tra i registri a 32-bit rs ed rt, ponendo i 32 bit bassi
  117. del risultato nel registro speciale LO e i 32 bit alti del risultato nel
  118. registro speciale HI.
  119. * `MULTU rs, rt`
  120. Esegue il prodotto tra i registri a 32-bit rs ed rt, considerandoli come
  121. valori senza segno e ponendo i 32 bit bassi del risultato nel registro
  122. speciale LO e i 32 bit alti del risultato nel registro speciale HI.
  123. * `OR rd, rs, rt`
  124. Esegue un OR bit a bit tra rs ed rt, e pone il risultato in rd.
  125. * `SLL rd, rt, sa`
  126. Effettua uno shift verso sinistra del registro a 32-bit rt, di un numero di
  127. bit indicati nel valore immediato (positivo compreso tra 0 e 63) sa, e pone
  128. il risultato nel registro a 32-bit rd. I bit liberi vengono posti a zero.
  129. * `SLLV rd, rt, rs`
  130. Effettua uno shift verso sinistra del registro a 32-bit rt, di un numero di
  131. bit specificato nei 5 bit bassi del registro rs che verrà letto come
  132. valore senza segno, e pone il risultato nel registro a 32-bit rd. I bit
  133. liberi vengono posti a zero.
  134. * `SRA rd, rt, sa`
  135. Effettua uno shift verso destra del registro a 32-bit rt, di un numero di
  136. bit specificato nel valore immediato (positivo compreso tra 0 e 63) sa, e
  137. pone il risultato nel registro a 32-bit rd. I bit liberi vengono posti a
  138. zero se il bit più a sinistra di rs è zero, altrimenti vengono posti
  139. a uno.
  140. * `SRAV rd, rt, rs`
  141. Effettua uno shift verso destra del registro a 32-bit rt, di un numero di
  142. bit specificato nei 5 bit bassi del registro rs che verrà letto come
  143. valore senza segno, e pone il risultato nel registro a 32-bit in rd. I bit
  144. liberi vengono posti a zero se il bit più a sinistra di rs è zero,
  145. altrimenti vengono posti a uno.
  146. * `SRL rd, rs, sa`
  147. Effettua uno shift verso destra del registro a 32-bit rt, di un numero di
  148. bit specificato nel valore immediato (positivo compreso tra 0 e 63) sa, e
  149. pone il risultato nel registro a 32-bit rd. I bit liberi vengono posti a
  150. zero.
  151. * `SRLV rd, rt, rs`
  152. Effettua uno shift verso destra del registro a 32-bit rt, del numero di bit
  153. specificato nei 5 bit bassi del registro rs che verrà letto come valore
  154. senza segno, e pone il risultato nel registro a 32-bit rd. I bit liberi
  155. vengono posti a zero.
  156. * `SUB rd, rs, rt`
  157. Sottrae il valore del registro a 32-bit rt al valore del registro a 32-bit
  158. rs, considerandoli come valori con segno, e pone il risultato in rd. Lancia
  159. un'eccezione in caso di overflow.
  160. * `SUBU rd, rs, rt`
  161. Sottrae il valore del registro a 32-bit rt al valore del registro a 32-bit
  162. rs, e pone il risultato in rd.
  163. Non si verificano eccezioni di overflow.
  164. .. \MISN{}
  165. * `SLT rd, rs, rt`
  166. Pone il valore di rd ad 1 se il valore contenuto in rs è minore di
  167. quello contenuto in rt, altrimenti pone rd a 0. Questa istruzione esegue un
  168. confronto con segno.
  169. * `SLTU rd, rs, rt`
  170. Pone il valore di rd ad 1 se il valore contenuto in rs è minore di
  171. quello contenuto in rt, altrimenti pone rd a 0. Questa istruzione esegue un
  172. confronto senza segno.
  173. * `XOR rd, rs, rt`
  174. Esegue un OR esclusivo (XOR) bit a bit tra rs ed rt, e pone il risultato in
  175. rd.
  176. Ecco la lista delle istruzioni ALU di tipo I.
  177. * `ADDI rt, rs, immediate`
  178. Effettua la somma tra il registro a 32 bit rs ed il valore immediato,
  179. ponendo il risultato in rt. Questa istruzione considera gli operandi come
  180. valori con segno. Lancia un'eccezione in caso di overflow.
  181. * `ADDIU rt, rs, immediate`
  182. Effettua la somma tra il registro a 32 bit rs ed il valore immediato,
  183. ponendo il risultato in rt. Non si verificano eccezioni di overflow.
  184. .. \MISN{}
  185. * `ANDI rt, rs, immediate`
  186. Esegue un AND bit a bit tra rs ed il valore immediato, ponendo il risultato
  187. in rt.
  188. * `DADDI rt, rs, immediate`
  189. Effettua la somma tra il registro a 64 bit rs ed il valore immediato,
  190. ponendo il risultato in rt. Questa istruzione considera gli operandi come
  191. valori con segno. Lancia un'eccezione in caso di overflow.
  192. * `DADDIU rt, rs, immediate`
  193. Effettua la somma tra il registro a 64 bit rs ed il valore immediato,
  194. ponendo il risultato in rt. Non si verificano eccezioni di overflow.
  195. .. \MISN{}
  196. * `DADDUI rt, rs, immediate`
  197. Effettua la somma tra il registro a 64 bit rs ed il valore immediato,
  198. ponendo il risultato in rt. Non si verificano eccezioni di overflow.
  199. .. \MISN{}
  200. .. \WARN{}
  201. * `LUI rt, immediate`
  202. Carica la costante definita dal valore immediato nella metà superiore dei 32
  203. bit inferiori di rt, effettuando l'estensione del segno sui 32 bit superiori
  204. del registro.
  205. * `ORI rt, rs, immediate`
  206. Effettua l'OR bit a bit tra rs ed il valore immediato, ponendo il risultato
  207. in rt.
  208. * `SLTI rt, rs, immediate`
  209. Pone il valore di rt ad 1 se il valore di rs è minore di quello
  210. dell'immediato, altrimenti pone rt a 0. Questa operazione effettua un
  211. confronto con segno.
  212. * `SLTUI rt, rs, immediate`
  213. Pone il valore di rt ad 1 se il valore di rs è minore di quello
  214. dell'immediato, altrimenti pone rt a 0. Questa operazione effettua un
  215. confronto senza segno.
  216. * `XORI rt, rs, immediate`
  217. Effettua l'OR esclusivo bit a bit tra rs ed il valore immediato, ponendo il
  218. risultato in rt.
  219. Istruzioni load/store
  220. ---------------------
  221. Questa categoria contiene tutte le istruzioni che effettuano trasferimenti di
  222. dati tra i registri e la memoria. Ognuna di esse è espressa nella forma::
  223. [etichetta] istruzione rt, offset(base)
  224. In base all'utilizzo di un'istruzione load oppure store, rt rappresenterà di
  225. volta in volta il registro sorgente o destinazione; offset è un'etichetta o un
  226. valore immediato e base è un registro. L'indirizzo è ottenuto sommando al
  227. valore del registro`base` il valore immediato di `offset`.
  228. L'indirizzo specificato deve essere allineato in base al tipo di dato che si
  229. sta trattando. Le istruzioni di caricamento che terminano con "U" considerano
  230. il contenuto del registro rt come un valore senza segno.
  231. Ecco la lista delle istruzioni di caricamento (LOAD):
  232. * `LB rt, offset(base)`
  233. Carica il contenuto della cella di memoria all'indirizzo specificato da
  234. offset e base nel registro rt, considerando tale valore come byte con segno.
  235. * `LBU rt, offset(base)`
  236. Carica il contenuto della cella di memoria all'indirizzo specificato da
  237. offset e base nel registro rt, considerando tale valore come byte senza
  238. segno.
  239. * `LD rt, offset(base)`
  240. Carica il contenuto della cella di memoria all'indirizzo specificato da
  241. offset e base nel registro rt, considerando tale valore come una double
  242. word.
  243. * `LH rt, offset(base)`
  244. Carica il contenuto della cella di memoria all'indirizzo specificato da
  245. offset e base nel registro rt, considerando tale valore come una half word
  246. con segno.
  247. * `LHU rt, offset(base)`
  248. Carica il contenuto della cella di memoria all'indirizzo specificato da
  249. offset e base nel registro rt, considerando tale valore come una half word
  250. senza segno.
  251. * `LW rt, offset(base)`
  252. Carica il contenuto della cella di memoria all'indirizzo specificato da
  253. offset e base nel registro rt, considerando tale valore come una word con
  254. segno.
  255. * `LWU rt, offset(base)`
  256. Carica il contenuto della cella di memoria all'indirizzo specificato da
  257. offset e base nel registro rt, considerando tale valore come una word senza
  258. segno.
  259. Ecco la lista delle istruzioni di memorizzazione (STORE):
  260. * `SB rt, offset(base)`
  261. Memorizza il contenuto del registro rt nella cella di memoria specificata da
  262. offset e base, considerando tale valore come un byte.
  263. * `SD rt, offset(base)`
  264. Memorizza il contenuto del registro rt nella cella di memoria specificata da
  265. offset e base, considerando tale valore come una double word.
  266. * `SH rt, offset(base)`
  267. Memorizza il contenuto del registro rt nella cella di memoria specificata da
  268. offset e base, considerando tale valore come una half word.
  269. * `SW rt, offset(base)`
  270. Memorizza il contenuto del registro rt nella cella di memoria specificata da
  271. offset e base, considerando tale valore come una word.
  272. Istruzioni di controllo del flusso
  273. ----------------------------------
  274. Le istruzioni di controllo del flusso sono utilizzate per alterare l'ordine
  275. delle istruzioni prelevate dalla CPU nella fase di fetch. è possibile fare una
  276. distinzione tra tali istruzioni: tipo R, tipo I e tipo J.
  277. Tali istruzioni eseguono il salto alla fase di Instruction Decode (ID), ogni
  278. qual volta viene effettuato un fetch inutile. In tal caso, due istruzioni
  279. vengono rimosse dalla pipeline, ed il contatore degli stalli dovuti ai salti
  280. effettuati viene incrementato di due unità.
  281. Ecco la lista delle istruzioni di controllo del flusso di tipo R:
  282. * `JALR rs`
  283. Pone il contenuto di rs nel program counter, e salva in R31 l'indirizzo
  284. dell'istruzione che segue l'istruzione JALR, che rappresenta il valore di
  285. ritorno.
  286. * `JR rs`
  287. Pone il contenuto di rs nel program counter.
  288. Ed ecco le istruzioni di controllo del flusso di tipo I:
  289. * `B offset`
  290. Salto incondizionato ad offset.
  291. * `BEQ rs, rt, offset`
  292. Salta ad offset se rs è uguale ad rt.
  293. * `BEQZ rs, offset`
  294. Salta ad offset se rs è uguale a zero.
  295. .. \WARN
  296. * `BGEZ rs, offset`
  297. Effettua un salto relativo al PC ad offset se rs è maggiore di zero.
  298. * `BNE rs, rt, offset`
  299. Salta ad offset se rs non è uguale ad rt.
  300. * `BNEZ rs, offset`
  301. Salta ad offset se rs non è uguale a zero.
  302. .. \WARN
  303. Ecco la lista delle istruzioni di controllo del flusso di tipo J:
  304. * `J target`
  305. Pone il valore immediato nel program counter
  306. * `JAL target`
  307. Pone il valore immediato nel program counter, e salva in R31 l'indirizzo
  308. dell'istruzione che segue l'istruzione JAL, che rappresenta il valore di
  309. ritorno.
  310. L'istruzione `SYSCALL`
  311. ----------------------
  312. L'istruzione SYSCALL offre al programmatore un'interfaccia simile a quella
  313. offerta da un sistema operativo, rendendo disponibili sei differenti chiamate
  314. di sistema (system call).
  315. Le system call richiedono che l'indirizzo dei loro parametri sia memorizzato
  316. nel registro R14 ($t6), e pongono il loro valore di ritorno nel registro R1
  317. ($at). Tali system call sono il più possibile fedeli alla convenzione POSIX.
  318. `SYSCALL 0 - exit()`
  319. ~~~~~~~~~~~~~~~~~~~~
  320. SYSCALL 0 non richiede alcun parametro ritorna nulla, semplicemente ferma
  321. il simulatore.
  322. è opportuno notare che se il simulatore non trova SYSCALL 0 nel codice
  323. sorgente, o una qualsiasi istruzione equivalente (HALT TRAP 0), terminerà
  324. automaticamente alla fine del sorgente.
  325. `SYSCALL 1 - open()`
  326. ~~~~~~~~~~~~~~~~~~~~
  327. SYSCALL 1 richiede due parametri: una stringa (che termini con valore zero) che
  328. indica il percorso del file che deve essere aperto, ed una double word
  329. contenente un intero che indica i parametri che devono essere usati per
  330. specificare come aprire il file.
  331. Tale intero può essere costruito sommando i parametri che si vogliono
  332. utilizzare, scelti dalla seguente lista:
  333. * `O_RDONLY (0x01)` Apre il file in modalità sola lettura;
  334. * `O_WRONLY (0x02)` Apre il file in modalità sola scrittura;
  335. * `O_RDWR (0x03)` Apre il file in modalità di lettura/scrittura;
  336. * `O_CREAT (0x04)` Crea il file se non esiste;
  337. * `O_APPEND (0x08)` In modalità di scrittura, aggiunge il testo alla fine del
  338. file;
  339. * `O_TRUNC (0x08)` In modalità di scrittura, cancella il contenuto del file al
  340. momento della sua apertura.
  341. È obbligatorio specificare una delle prime tre modalità. La quinta e
  342. la sesta sono esclusive, non è possibile specificare O_APPEND se si
  343. specifica O_TRUNC (e viceversa).Inoltre non si puo' specificare O_CREAT se
  344. si specifica O_RDONLY (oppure O_RDWR).
  345. È possibile specificare una combinazione di modalità semplicemente
  346. sommando i valori interi ad esse associati. Ad esempio, se si vuole aprire un
  347. file in modalità di sola scrittura ed aggiungere il testo alla fine del
  348. file, si dovrà specificare la modalità 2 + 8 = 10.
  349. Il valore di ritorno delle chiamate di sistema è il nuovo descrittore del
  350. file (file descriptor) associato al file, che potrà essere utilizzato con
  351. le altre chiamate di sistema. Qualora si verifichi un errore, il valore di
  352. ritorno sarà -1.
  353. `SYSCALL 2 - close()`
  354. ~~~~~~~~~~~~~~~~~~~~~
  355. SYSCALL 2 richiede solo un parametro, il file descriptor del file che deve
  356. essere chiuso.
  357. Qualora l'operazione termini con successo, SYSCALL 2 ritornerà 0, altrimenti
  358. -1. Possibili cause di errore sono il tentativo di chiudere un file
  359. inesistente, o di chiudere i file descriptor 0, 1 o 2, che sono associati
  360. rispettivamente allo standard input, allo standard output ed allo standard
  361. error.
  362. `SYSCALL 3 - read()`
  363. ~~~~~~~~~~~~~~~~~~~~
  364. SYSCALL 3 richiede tre parametri: il file descriptor da cui leggere,
  365. l'indirizzo nel quale i dati letti dovranno essere copiati, il numero di byte
  366. da leggere.
  367. Se il primo parametro è 0, il simulatore permetterà all'utente di
  368. inserire un valore mediante un'apposita finestra di dialogo. Se la lunghezza
  369. del valore immesso è maggiore del numero di byte che devono essere letti,
  370. il simulatore mostrerà nuovamente la finestra.
  371. La chiamata di sistema ritorna il numero di byte effettivamente letti, o -1 se
  372. l'operazione di lettura fallisce. Possibili cause di errore sono il tentativo
  373. di leggere da un file inesistente, o di leggere dai file descriptor 1
  374. (standard output) o 2 (standard error), oppure il tentativo di leggere da un
  375. file di sola scrittura.
  376. `SYSCALL 4 - write()`
  377. ~~~~~~~~~~~~~~~~~~~~~
  378. SYSCALL 4 richiede tre parametri: il file descriptor su cui scrivere,
  379. l'indirizzo dal quale i dati dovranno essere letti, il numero di byte da
  380. scrivere.
  381. Se il primo parametro è 2 o 3, il simulatore mostrerà la finestra di
  382. input/output dove scriverà i dati letti.
  383. Questa chiamata di sistema ritorna il numero di byte che sono stati scritti, o
  384. -1 se l'operazione di scrittura fallisce. Possibili cause di errore sono il
  385. tentativo di scrivere su un file inesistente, o sul file descriptor 0
  386. (standard input), oppure il tentativo di scrivere su un file di sola lettura.
  387. `SYSCALL 5 - printf()`
  388. ~~~~~~~~~~~~~~~~~~~~~~
  389. SYSCALL 5 richiede un numero variabile di parametri, il primo è la
  390. cosiddetta "format string" o stringa di formato. Nella stringa di formato
  391. possono essere inseriti alcuni segnaposto, descritti nella seguente lista:
  392. * `%s` parametro di tipo stringa;
  393. * `%i` parametro di tipo intero;
  394. * `%d` si comporta come `%i`;
  395. * `%%` carattere `%`
  396. Per ciascuno dei segnaposto `\%s`, `\%d` o `\%i` la SYSCALL 5
  397. si aspetta un parametro, partendo dall'indirizzo del precedente.
  398. Quando la SYSCALL trova un segnaposto per un parametro intero, si aspetta che
  399. il corrispondente parametro sia un valore intero, quando trova un segnaposto
  400. per un parametro stringa, si aspetta come parametro l'indirizzo della stringa
  401. stessa.
  402. Il risultato visualizzato nella finestra di input/output, ed il numero di
  403. byte scritti posto in R1.
  404. Qualora si verifichi un errore, R1 avrà valore -1.
  405. Altre istruzioni
  406. ----------------
  407. In questa sezione sono descritte istruzioni che non rientrano nelle precedenti
  408. categorie.
  409. `BREAK`
  410. ~~~~~~~
  411. L'istruzione BREAK solleva un'eccezione che ha l'effetto di fermare
  412. l'esecuzione se il simulatore è in esecuzione. Può essere utilizzata per
  413. il debugging.
  414. `NOP`
  415. ~~~~~
  416. L'istruzione NOP non fa nulla, ed è utilizzata per creare pause nel codice
  417. sorgente.
  418. `TRAP`
  419. ~~~~~~
  420. L'istruzione TRAP è deprecated, rappresenta un'alternativa all'istruzione
  421. SYSCALL.
  422. `HALT`
  423. ~~~~~~
  424. L'istruzione HALT è deprecated, rappresenta un'alternativa all'istruzione
  425. SYSCALL 0, che ferma il simulatore.