私は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
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 –
Peterありがとうございます。 –