2017-10-19 14 views
0

私はemu8086の初心者ですが、このコードに問題があり、修正できないようです。 10進数から2進数に変換する必要があります。例えば、4,8,15,16,255などの数字を使用すると、すべてうまく動作します。しかし、たとえば私が2,9,17,254を使用すると、正しい数字が表示されません。私は本当にこれで助けが必要です。配列を使用して10進数から2進数に変換する

.model small 

.data 

exp db 8 dup (?) 

num dw 09 

var dw 2 

.code 

start: 
    mov ax,@data 
    mov ds,ax 

    mov di,0 
    mov ax,num ;I put my number in ax 

    Binary: ;Here I make the conversion from decimal to binary 
     div var 
     mov exp[di],dl 
     inc di 
     cmp al,0 ;If my number is equal to 0 it breaks the cicle and shows the array in the next function 
     ja Binary 


    dec di  
    mov cx,di   
    Show: ;Here I show the array backwards so we can see the real binary number 
     mov bl,exp[di] 
     add bl,30h 

     mov dl,bl 
     sub bl,30h 

     mov ah,2 
     int 21h  
     dec di 
    loop Show 

int 21h  
end start: 

div var
+0

2で除算するために「div」を使用しないでください!それはシフトよりも約30倍遅く、直ちにオペランドをとることはできません。 https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat​​/40355466#40355466 –

+0

Peterありがとうございます。 –

答えて

1

varによってdx:ax分割します。除算命令の前にdxをゼロにする必要があります。

+0

ゼロまたはサインに失敗した場合の標準的なQ&Aは、[e] dx:divまたはidivの前にaxを拡張するとかなり良いdupターゲットになります。 ([x86タグwiki](https://stackoverflow.com/tags/x86/info)にリンクがあり、 'div'を検索するだけです)。 –

関連する問題