I am trying to display D0 in decimal, but when I run the program, nothing is displayed. I don't get any errors, and when I look in register D0 I see the expected number in hex, but the decimal equivalent isn't being displayed. I am trying to use TRAP to do so, which we were shown in class. What am I doing wrong? The line of code in question is the 17th line down from where the code starts. It says "TRAP #15 Display D0 in decimal." Thanks for any help.

*-----------------------------------------------------------
* Program Number: 0
* Written by    : Bryan Kriss
* Date Created  : 10/06/2013
* Description   : This program performs If-then-else statement.
*
*-----------------------------------------------------------
START   ORG $1000   Program starts at loc $1000
IF  CMP     #12,P   Is P > 12? 
    BLE     ENDIF   If P < 12, go to ENDIF
    ASL     P       Shift left
    ASL     P       Shift left
    ASL     P       Shift left
    ADD     #4,P    P + 4
    MOVE    P,D0    Move P into D0
    EXT.L   D0
    TRAP    #15     Display D0 in decimal
    STOP    #$2700   Stop execution

ENDIF   MOVE    Q,D1     Move the value of Q into D1
        SUB     D1,D0    P - D1 (P-Q)
        MOVE    D0,D1    Move P into D1

        STOP    #$2700    Stop execution
* Data section
    ORG $2000   Data starts at loc 2000
P   DC.W    15  int P = 15;
Q   DC.W    7   int Q = 7;
    END START
有帮助吗?

解决方案

According to the documentation you need to put the selector in D0 and the actual value in D1.

Change:

MOVE    P,D0    Move P into D0
EXT.L   D0
TRAP    #15     Display D0 in decimal

to:

MOVE    P,D1    Move P into D1
EXT.L   D1
MOVE.B  #3,D0   Put required TRAP #15 selector (3) in D0
TRAP    #15     Display D0 in decimal

Some further clarification: TRAP #15 is a general mechanism for performing various tasks supported by the easy68k environment. In order to specify which task to perform you pass the task selector in D0. Then, depending on which selector you are using, the other parameters also need to be loaded into the correct register(s), typically D1 or A1.

There's a comprehensive list of selectors on the easy68k web site - the first few selectors are:

TRAP #15 is used for I/O.  Put the task number in D0.

 Task
  0  Display string at (A1), D1.W bytes long (max 255) with carriage return and line feed (CR, LF). (see task 13)
  1  Display string at (A1), D1.W bytes long (max 255) without CR, LF. (see task 14)
  2  Read string from keyboard and store at (A1), NULL terminated, length retuned in D1.W (max 80)
  3  Display signed number in D1.L in decimal in smallest field. (see task 15 & 20)
  ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top