2012-10-11 2 views
3

Je veux savoir comment je peux utiliser mmix en mode interactif pour afficher le contenu des registres chaque fois que je demande à les voir. Par exemple, j'ai un programme simple MMIX:Inspecter le contenu du registre en mode interactif mmix

% Compute D=4A-2B+16C 
%LABEL  OPCode  Operands  Comments 
      LOC   Data_Segment 
      GREG  @ 
A   OCTA  3   Reserve an octabyte for A 
B   OCTA  #10  Reserve an octabyte for B 
C   OCTA  2   Reserve an octabyte for C 
D   OCTA  0   Reserve an octabyte for D 

      LOC   #100   start assembly instructions 
Main  LDO   $0,A   $0 contents of A 
      LDO   $1,B   $1 contents of B 
      LDO   $2,C   $2 contents of C 
      SL   $0,$0,2   $0 = 4*$0 
      SL   $1,$1,1   $1 = 2*$1 
      SL   $2,$2,4   $2 = 16*$2 
      SUB   $0,$0,$1  $0 < 4A-2B 
      ADD   $0,$0,$2  $0 < 4A-2B+16C 
      STO   $0,D   store answer in D 

et je peux courir MMIX -i myprog.mmo pour obtenir la sortie:

mmix> 
      (00000000000000fc: fb0000ff (UNSAVE)) #6000000000000088: rG=254, ..., rL=2 
    0 instructions, 0 mems, 0 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000100) 
mmix> 
     1. 0000000000000100: 8d00fe00 (LDOI) $0=l[0] = M8[#2000000000000000] = 3 
    1 instruction, 1 mem, 1 oop; 0 good guesses, 0 bad 
    (now at location #0000000000000104) 
mmix> 
     1. 0000000000000104: 8d01fe08 (LDOI) $1=l[1] = M8[#2000000000000000+8] = 16 
    2 instructions, 2 mems, 2 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000108) 
mmix> 
     1. 0000000000000108: 8d02fe10 (LDOI) rL=3, $2=l[2] = M8[#2000000000000000+16] = 2 
    3 instructions, 3 mems, 3 oops; 0 good guesses, 0 bad 
    (now at location #000000000000010c) 
mmix> 
     1. 000000000000010c: 39000002 (SLI) $0=l[0] = 3 << 2 = 12 
    4 instructions, 3 mems, 4 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000110) 
mmix> 
     1. 0000000000000110: 39010101 (SLI) $1=l[1] = 16 << 1 = 32 
    5 instructions, 3 mems, 5 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000114) 
mmix> 
     1. 0000000000000114: 39020204 (SLI) $2=l[2] = 2 << 4 = 32 
    6 instructions, 3 mems, 6 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000118) 
mmix> 
     1. 0000000000000118: 24000001 (SUB) $0=l[0] = 12 - 32 = -20 
    7 instructions, 3 mems, 7 oops; 0 good guesses, 0 bad 
    (now at location #000000000000011c) 
mmix> 
     1. 000000000000011c: 20000002 (ADD) $0=l[0] = -20 + 32 = 12 
    8 instructions, 3 mems, 8 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000120) 
mmix> 
     1. 0000000000000120: ad00fe18 (STOI) M8[#2000000000000000+24] = 12 
    9 instructions, 4 mems, 9 oops; 0 good guesses, 0 bad 
    (now at location #0000000000000124) 
mmix> 
     1. 0000000000000124: 00000000 (TRAP) Halt(0) 
    10 instructions, 4 mems, 14 oops; 0 good guesses, 0 bad 
    (halted at location #0000000000000124) 
mmix> 
    10 instructions, 4 mems, 14 oops; 0 good guesses, 0 bad 
    (halted at location #0000000000000124) 

Ce qui est tout bon et bien. Mais que dois-je faire si je veux inspecter le contenu d'un registre en cours d'exécution interactif? En outre, que diriez-vous de voir le contenu dans l'hex au lieu de la décimale?

Répondre

3

Pour ceux qui sont intéressés, apparemment pas beaucoup :), l'information que je cherchais peut être trouvée au the MMIX documentation site. Ensuite, consultez le fichier MMIX-sim.pdf à la page 3.

En particulier, pour inspecter un registre local, dans le type de simulateur

l0 

voir registre local $ 0 contenu en décimal. Si vous souhaitez définir le registre local à quelque chose, il est tout simplement

l0=27.0 

maintenant $ 0 est la représentation en virgule flottante 64 bits de 27,0! Si vous voulez voir hex, il suffit de faire

l0#. 

Le reste, vous pouvez lire tout pour vous-même. La documentation comprend la configuration des points d'arrêt, etc.