这是我尝试在 TASM 中编写一个函数,如果数字是素数则返回 true,否则返回 false。
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 以使其工作),提醒存储在 edx 中,而不是 ah 中。为什么?!在上面的代码中是这样吗?
我的主要问题是我无法调试我的代码,因为我使用 tasm,而我所知道的唯一强大的调试器是 ollydbg,但它是 x32 位汇编器,而不是 16。所以我必须更改寄存器,也许并非一切都是一样的。 ..