2017-01-27 3 views
0

Ich brauche Programm zu schreiben, dass der Benutzer eine Zahl ohne Vorzeichen und die Anzeige erscheint eintritt, wenn diese Zahl ungerade ist, selbst oder gleich NullWenn else-Anweisung in 68k

Das Problem, das ich zu jeder Nummer bekam sie angezeigt werden Z in 7Segment, das ist nicht korrekt Also, ich nicht wo ist das Problem. Kann mir jemand helfen, das Problem zu beheben?

LEDS  EQU  $E00010     ;LEDS adress 
SW   EQU  $E00012     ;switch address 
BU   EQU  $E00014     ;button address 

one  EQU  $E00000     ;7 segment display address 1 

two  EQU  $E00002 
three  EQU  $E00004 
four  EQU  $E00006 
five  EQU  $E00008 
six   EQU  $E0000A 
seven  EQU  $E0000C 
eight  EQU  $E0000E 
      ORG  $400     ;start of program area 
START 



Loop 

     MOVE.B D0,LEDS  
      MOVE.B SW,D1 
      MOVE.B BU,D2 
      MOVE.B #0,D3 
      MOVE.B #0,D0     ; LEDS is off 
      MOVE.B #0,one     ;7 segment is off 
      MOVE.B #0,two 
      MOVE.B #0,three 
      MOVE.B #0,four 
      MOVE.B #0,five 
      MOVE.B #0,six 
      MOVE.B #0,seven 
      MOVE.B #0,eight  
      MOVE.B #%1101101,one    ;display S on 7 segment 
      NOT.B D2      ; flip value of button 
      CMP.B #%00000001,D2   ;if the right button is clicked 
      BNE  Loop     
      MOVE.B D1,D0  ;THEN MOVE SWICH VALUES ON LEDS 
      MOVE.B D0,LEDS 
      MOVE.B #0,one 
      CMP.B D1,D3 
      BEQ  ZERO 
      DIVS.W #2,D1     
      CMP.B D1,D3     ;IF D1=D3 WHICH ZERO, THEN 
      BEQ  EVEN      ; NUMBER IS ODD 
      BRA  ODD     ; ELSE DISPLAY EVEM 
EVEN   MOVE.B #%1111001,one    
ODD   MOVE.B #%0111111,one   
ZERO   MOVE.B #%1011001,one 

      END  START 
+0

Nach verzweigen Sie selbst, Sie durch auf NULL dann auf ODD fallen, so dass Sie auch immer vielleicht bekam ZERO sofort. – stark

+0

@stark: danke, aber ich habe nicht verstanden, was meinst du bitte erklären könnte mehr? meinst du in EVEN habe ich eine andere Zeile gesetzt, die {BRA Loop} ist? – nas2016

+0

BTW, du musst nicht nach "DIV" auf ungerade/gerade prüfen. Wenn Sie einen numerischen Wert in eine binäre Formatierung aufteilen, hat jedes Bit den Wert 2^i. Für (1 <= i) bedeutet das, dass der Wert durch 2 teilbar ist, weil 2^i = 2 * 2^(i-1). Die einzige Ausnahme ist 2^0 = 1, diese ist nicht durch 2 teilbar. Das bedeutet, dass der ganze Wert aus allen durch Zwei teilbaren Zweierpotenzen besteht (1 <= i), mit Ausnahme des am wenigsten signifikanten Bits, welches hat den Wert 1. Jede Zahl, die in eine binäre Form umgewandelt wird, ist dann ungerade, wenn das niedrigstwertige Bit gesetzt ist. Um das niedrigstwertige Bit in der Reg. Sie können 'BTST # 0, D1' 'BEQ D1_is_even' verwenden. – Ped7g

Antwort

0

Dieses:

BEQ  EVEN      ; NUMBER IS ODD 

Sieht aus wie es sein sollte:

BEQ  ODD      ; NUMBER IS ODD 
+0

Ich ändere es und ich bearbeite den Code, aber immer noch den gleichen Druck Z – nas2016