PDA

View Full Version : Assembly <- DLX


Bubble
27-06-2003, 16:53
Ciao :) ,
Sto studiando l'assembly con windlx :confused: e ho trovato un esempio dove non capisco il perchè di tre righe di comando :confused: ........ qualcuno mi potrebbe spiegare a che servono :
;*********** WINDLX Ex.1: Read a positive integer number *************
;*********** (c) 1991 Günther Raidl *************
;*********** Modified 1992 Maziar Khosravipour *************

;-----------------------------------------------------------------------------
;Subprogram call by symbol "InputUnsigned"
;expect the address of a zero-terminated prompt string in R1
;returns the read value in R1
;changes the contents of registers R1,R13,R14
;-----------------------------------------------------------------------------

.data

;*** Data for Read-Trap
ReadBuffer: .space 80
ReadPar: .word 0,ReadBuffer,80

;*** Data for Printf-Trap
PrintfPar: .space 4

SaveR2: .space 4
SaveR3: .space 4
SaveR4: .space 4
SaveR5: .space 4


.text

.global InputUnsigned
InputUnsigned:
;*** save register contents
sw SaveR2,r2
sw SaveR3,r3
sw SaveR4,r4
sw SaveR5,r5

;*** Prompt
sw PrintfPar,r1
addi r14,r0,PrintfPar
trap 5

;*** call Trap-3 to read line
addi r14,r0,ReadPar
trap 3

;*** determine value
addi r2,r0,ReadBuffer
addi r1,r0,0
addi r4,r0,10 ;Decimal system

Loop: ;*** reads digits to end of line
lbu r3,0(r2)
seqi r5,r3,10 ;LF -&gt; Exit
bnez r5,Finish
subi r3,r3,48 ;´0´
multu r1,r1,r4 ;Shift decimal
add r1,r1,r3
addi r2,r2,1 ;increment pointer
j Loop

Finish: ;*** restore old register contents
lw r2,SaveR2
lw r3,SaveR3
lw r4,SaveR4
lw r5,SaveR5
jr r31 ; Return


le tre righe sono quelle in rosso.
Il programma deve acquisire da tastiera e cercare il carattere ascii 10 (NL line feed, new line).

maxithron
27-06-2003, 17:10
Sintassi: ADD dest,src
ADD dest,imm

Flags modificati: CF, OF, PF, SF, ZF, AF

esegue la somma tra due operandi, salvando il risultato in un 'dest'.

Sintassi: SUB dest,src
SUB dest,imm

Flags modificati: CF, OF, PF, SF, ZF, AF

esegue la differenza tra due operandi, salvando il risultato in un 'dest'.

Sintassi: MUL src

Flags modificati: CF, OF (PF, SF, ZF, AF non definiti)

L'istruzione MUL esegue la moltiplicazione senza segno tra il registro accumulatore (AL a 8 bit, AX a 16 bit, EAX a 32 bit) e il registro src. Se src è un registro a 16 bit il risultato viene salvato in DX:AX; se src è a 32 bit il risultato va in EDX:EAX.

Bubble
27-06-2003, 17:21
Grazie per la risposta, :)
però c'è un problemino :D :D , io conosco come assembly solo il dlx e nemmeno bene visto che ho cominciato a studiarlo l'altro ieri :D :D .
Cmq le operazioni svolte ho capito che sono una sottrazione immediata, una moltiplicazione senza segno e un addizione, il mio problema è:
perchè bisogna farli??? :p :p
o meglio a che cosa servono ai fini del programma?
:confused: :confused:

maxithron
27-06-2003, 17:26
Originally posted by "Bubble"

Ciao :) ,

;Subprogram call by symbol "InputUnsigned"
;expect the address of a zero-terminated prompt string in R1
;returns the read value in R1
;changes the contents of registers R1,R13,R14


Se l'hai scritto correttamente servono a darti proprio ciò che è scritto nella descrizione iniziale.

Bubble
27-06-2003, 17:33
Ti ringrazio maxithron
:D :D

maxithron
27-06-2003, 17:43
Originally posted by "Bubble"

Ti ringrazio maxithron
:D :D

E di che? :p :p

maxithron
19-09-2003, 13:08
ma che fine hai fatto poi?

Bubble
19-09-2003, 16:45
Originariamente inviato da maxithron
ma che fine hai fatto poi?


Io sono sempre qui :p !!!

Comunque alla fine l'ho imparato (anche se per fare un programmino che con il C forse avrei usato due o tre righe di comando ci sono stato 4 giorni :D), ho fatto l'esame e nella parte riguardante l'assembly ho preso il max......


comunque grazie per l'aiuto che mi avevi dato!!!

maxithron
19-09-2003, 17:03
E di che?
Stavo scavando un pò tra i vecchi post quando ho ritrovato appunto questo 3D!!

A presto

:D

exetera
29-06-2006, 12:22
Avevo postato una domanda alla quale ho trovato risposta.Grazie lo stesso

ozmosis
05-07-2007, 17:59
Salve ragazzi, finalmente ho trovato qualcuno che usa il DLX.
Non capisco come far funzionare questo simulatore.
Il codice per esempio che ha scritto Bubble, lo capisco, ma come si manda in esecuzione in WinDLX?
Cioè ho mandato in esecuzione questo programma e mi appare la schermata di input, con sfondo bianco, che dovrei scrivere li dentro per esempio?
Riferendomi a questo programma di Bubble.
Vi ringrazio in anticipo per la risposta!

Stark85
18-01-2013, 00:50
Pure io, finalmente, ho trovato qualcuno che usa il DLX !!!

Potreste aiutarmi a capire qual'è l'operazione svolta da questa sequenza ? :)

ADDI R1, R0, 800H
LOOP: SUBI R1, R1, 2
LHU R2, A(R1)
LHU R3, B(R2)
LHU R2, C(R3)
SH A(R1), R2
BNEZ R1, LOOP