2017-10-19 582 views
0

我是emu8086中的一個begginer,而且我似乎無法修復此代碼。我需要從十進制轉換爲二進制,有時它做得很好,例如,當我使用像4,8,15,16,255這樣的數字時,一切正常。但是,如果我使用例如2,9,17,254,它不會顯示正確的數字。我真的需要幫助。使用數組將十進制轉換爲二進制

.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: 

+0

不要使用'div'除以2!它比一個班次慢大約30倍,並且不能立即操作。 https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat​​/40355466#40355466 –

+0

謝謝彼得。 –

回答

1

div var除以dx:ax通過var。在除法指令之前,您需要將dx置零。

+0

有一個規範的問答沒有零或簽署擴展到[e] dx:[e] ax div或idiv之前,這是一個非常好的dup目標。 ([x86標記wiki](https://stackoverflow.com/tags/x86/info)中有鏈接,只需搜索'div')。 –

相關問題