これは、数値が素数の場合は true を返し、それ以外の場合は false を返す関数を TASM で記述しようとする私の試みです。
masm
model small
.data
pos db "Yes, it's Prime",13,10,"$"
negat db "No, it's not Prime",13,10,"$"
.stack 256
.code
isPrime proc
push bp;
mov bp,sp;
push bx;
push cx;
mov bx, [bp+4]
mov cx, 2;
cmp bx, 0; check for zero
je isPrimeFalse;
cmp bx, 3; ;check for <=3
jle IsPrimeTrue;
isPrimeCycle:
cmp bx, cx;
je IsPrimeTrue;
mov ax, bx;
xor dx, dx;
DIV cx;
cmp ah, 0h;
je IsPrimeFalse;
inc cx;
jmp isPrimeCycle;
IsPrimeFalse:
mov ax, 0; false
jmp IsPrimeExit;
IsPrimeTrue:
mov ax, 1;
IsPrimeExit:
pop cx;
pop bx;
pop bp;
ret 2;
isPrime endp
main:
push 5;
call isPrime
cmp ax, 0;
je no;
jmp yes;
yes: ...
no: ...
end main
素数ではない数に対しては機能しますが、素数 (数 > 3、上記の 5 など) に対してはまだ NO と表示されます。
私の間違いはどこですか?リマインダーは AH に保存する必要がありますが、上記のコードを ollydbg でデバッグすると (動作させるためにレジスタを x32 に変更しました)、リマインダーは ah ではなく edx に保存されます。どうして?!上記のコードではそうですか?
私の主な問題は、コードをデバッグできないことです。私は tasm を使用しており、私が知っている唯一の優れた強力なデバッガーは ollydbg ですが、16 ではなく x32 ビット アセンブラーです。 ..