2011-08-12 4 views
0

les éléments suivants sont les codes de langue d'assemblage d'un sic/machine .... xeprogrammation en langage assembleur sicxe

 clear a 
    ldx #128 
loop jsub getc 
    rmo a,s 
    shift s,4 
    jsub getc 
    addr s,a 
    stch 0,x 
    tixr x,x 
    j loop 



getc td input 
    jeq getc 
    rd input 
    comp #4  ;if input is 4 then eof 
    jeq 80  ;jump to start of program 
    comp #48 ; compare to charcter 0 
    jlt getc ;skip charcters less than 0 
    sub #48  
    comp #10 ;if result is less than 10, conversion is complete 
    jlt return 
    sub #7  ;for hex digits A through F 
return rsub 
input byte x'F1' 

c'est un chargeur d'amorçage ... le but de ce programme est de lire de l'appareil F1 et stocker l'entrée à l'adresse à partir de 80 ... maintenant ma question est que quand le pourquoi avons-nous besoin de faire des changements s, 4 ... lorsque nous prenons une entrée une fois, nous trouvons sa valeur d'origine de sa valeur ASCII puis envoyer il faut 'boucler' pour le stocker ... du programme il apparaît que seulement le premier octet de chatacter est envoyé en boucle puis l'autre ... si c'est le fait alors dans un premier il y aurait le premier demi-octet de charcter et ainsi les opérations ASCII sur le premier semestre ne nous donnera pas la valeur réelle de l'entrée ... aussi w orsque le programme revient à « getc » pour obtenir l'autre moitié octet ne sera pas l'autre caractère dans la liste lu à la place ... ce qui suit est une ligne du même livre pour aider ...

each byte of the code to be loaded is on device F1 as two hexadecimal digits 
+0

Vous avez besoin d'une étiquette 'homework'? –

Répondre

0

Ce code convertit un nombre codé dans une chaîne ASCII en une valeur d'octet. Ainsi, étant donné la chaîne 'A5', le numéro 165 sera stocké dans un octet de la mémoire.

Il doit effectuer deux lectures pour chaque valeur d'octet. (Comme vous pouvez le voir, il y a deux caractères dans la chaîne 'A5', qui sont 'A' et '5'

La routine getc lit le premier caractère, dans mon exemple c'est 'A', qui a une valeur ASCII de 65 (41 hex) La routine soustrait 48, puis 7 à nouveau 65-48-7 = 10, qui est la notation décimale du chiffre hexadécimal A.

La boucle décale alors cette valeur 4 Le premier caractère que nous avons lu était l'octet d'ordre supérieur de la chaîne de deux octets

La prochaine fois que getc est appelé, il lit le caractère '5', ce qui signifie que a un code de 53. 53-48 est 5.

La boucle ajoute alors 5 à la valeur précédemment enregistrée de 160, donnant le total correct de 165.

Encore une fois, cet extrait de code convertit un nombre hexadécimal codé en ASCII en une valeur d'octet. Vous avez besoin de deux caractères pour constituer une valeur d'octet.

Questions connexes