2012-10-11 47 views
3

我想知道如何在交互模式下使用mmix来显示寄存器的内容,只要我要求查看它们。例如,我有一个简单的程序MMIX:在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 

,我可以运行MMIX -i myprog.mmo得到输出:

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) 

这是所有好,很好。但是如果我想在交互式运行中检查一些寄存器的内容,我需要做什么?另外,如何看到十六进制而不是十进制的内容?

回答

3

对于那些有兴趣,显然不是很多:),我正在寻找的信息可以在the MMIX documentation网站找到。然后检查出第3页。

特别是对MMIX-sim.pdf文件,检查当地的寄存器,在模拟器型

l0 

看到小数局部寄存器$ 0的内容。如果你要在本地注册成立的东西,它只是

l0=27.0 

所以现在$ 0是64位浮点的27.0点表示!如果你想看到十六进制,只是做

l0#. 

其余的你都可以自己阅读。文档包括如何设置断点等。