2012-04-23 8 views
1

deci(-32,768〜32,767)をbinに変換するプログラムを作成する課題があります。出力はすべて16ビットを表示する必要があります。たとえば、入力が120の場合、出力は0000000001111000でなければなりません。逆に0と1を出力する方法はわかりません。私が120を入力すると、私は0001111000000000を取得します。 P.S:MacとPCで利用可能なPep/8アセンブラとシミュレータ(http://code.google.com/p/pep8-1/)を使用しています。Deci to binコンバータ(Pep/8アセンブラとシミュレータ)

;Pavel; Assignment 3 
BR  main    ;Branch to MAIN 
num:  .BLOCK 2   ;Input variable 
flag: .BLOCK 2   ;C flag 
limit: .BLOCK 2   ;Loop LIMIT 
main: LDA  0, i  ;Clear Accumulator 
     DECI num, d  ;Input 
loop: LDA  limit, d ;Load loop LIMIT 
     CPA  16, i  ;Compare LIMIT to 16 
     BREQ exit  ;If LIMIT == 16, branch to EXIT. Done converting. 
     LDA  num, d  ;Load NUM 
     ASRA    ;Shift NUM to the right (division by 2) 
     STA  num, d  ;Store NUM after division 
if:  MOVFLGA    ;Load flags to Accumulator 
     BRC  else  ;If C == 1, branch to ELSE 
     DECO 0, i  ;Output 0 
     LDA  limit, d ;Load LIMIT 
     ADDA 1, i  ;Add 1 to LIMIT 
     STA  limit, d ;Store LIMIT 
     BR  loop  ;Branch to LOOP 
else: DECO 1, i  ;Output 1 
     LDA  limit, d ;Load LIMIT 
     ADDA 1, i  ;Add 1 to LIMIT 
     STA  limit, d ;Store LIMIT 
     BR  loop  ;Branch to LOOP 
exit: CHARO ' ', i  ;Outputs space 
     STOP 
     .END 

答えて

2

は、あなたが今右シフトすると、キャリーで終わるビットをテストしている: これは私がこれまで持っているものです。あなたは他の方法をシフトしたらどうなりますか?

+0

左にシフトすると2が乗算されます。 – Rndpbs

+0

ああ、私の悪い、私はあなたを持っています。どうもありがとう。 – Rndpbs