2012-10-11 53 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#. 

其餘的你都可以自己閱讀。文檔包括如何設置斷點等。