2010-09-19 4 views
2

Donc j'apprends à programmer dans un langage d'assemblage pour une machine abstraite qui est très semblable à un URM Machine. Machine de URM a 3 des instructions de base (ou 4 dans une certaine littérature):
à zéro un registre: Z (r)
pour incrémenter un registre: S (r)
pour accéder à une ligne ou marque si registres r1 et r2 contient la même valeur: J (r1, r2, l)
Maintenant, ma machine abstraite est encore plus faible car, pour sauter, elle ne fait que comparer un registre et le 0 littéral.
Pour compenser cela permet d'affecter n'importe quelle valeur à un registre (pas simplement zéro comme dans l'URM) et les opérations arithmétiques de base.
Les deux machines permettent un nombre infini de registres.Décidez si le nombre est négatif (dans la langue de l'URM comme langue)

J'ai été capable d'écrire un programme qui compare avec succès deux nombres positifs et renvoie le maximum.
Maintenant je voudrais que mon programme puisse recevoir aussi des nombres négatifs.

Ma question: Comment puis-je vérifier si un nombre est négatif? Est-il même possible avec seulement ces instructons?

Je vous avoue que je ne suis pas très intelligent avec ce genre de langages de bas niveau ...

Mon programme maximal suit: (entrée continue r1 et r2 et la sortie est sur r3)

maximo(){ 
    r5 := r1 - r3  
    jump (r5,0,maxr2) 

    r5 := r2 - r4 
    jump (r5,0,maxr1) 


    r3 := r3 + 1 
    r4 := r4 + 1 
    jump (r1,r1,maximo) 
} 

maxr1(){ 
    r3 := r1 
} 

maxr2(){ 
    r3 := r2 
} 

Merci!

Répondre

0

Aller sur cette réponse CSTheory:

Initialiser x ← v et y ← -v. Ensuite, incrémentez x et y en parallèle jusqu'à ce que l'un d'entre eux soit égal à 0.

Jukka Suomela