我的程序应该打印给定数的最大素因子。我的方向是否正确?到目前为止,程序只是挂起,不打印任何内容。我是否遗漏了没有退出检查最大素因子的循环的内容?
.model small ; one data segment, one code segment
.stack 100h ; reserves 256 bytes for the stack
.386 ; for 32 bits
.data ; start definition of variables
; your variables go here
.code ; start code portion of program
main proc ; start of the main procedure
mov eax,@data ; load the address of the data segment into eax
mov ds,eax ; load the address of the data segment into ds
; the two previous instructions initalize the data segment
; your code goes here
;prime factor function
mov bx, 116984417 ;starting number
mov cx, 1 ;starting conter
xor dx, dx ;clear data
mainloop:
mov ax, bx ;bx holds number and ax changes
inc cx ; increment counter
noinc:
mov bx, ax
cmp ax, cx
xor dx, dx ; clear data
div cx ;check for remainder
cmp dx, 0
jz noinc
jmp mainloop
done:
ret
;print function
mov bx,10
xor cx,cx
a:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz a
b:
pop dx
add dl,"0"
mov ah,02h
int 21h
loop b
; the following two instructions exit cleanly from the program
mov eax,4C00h ; 4C in ah means exit with code 0 (al) (similar to return 0; in C++)
int 21h ; exit
main endp ; end procedure
end main ; end program
1条答案
按热度按时间7gyucuyw1#
到目前为止程序只是挂起
不管你在 mainloop 中写了什么,它都没有任何出口,所以它会永远运行下去。
并且不打印任何内容。
您的print函数无法访问,因为存在无限的 mainloop,但也因为它前面的
ret
。可能是为了回答我对your previous question的回答,你在这个问题中是否从使用32位寄存器恢复过来了?你不应该这样做,因为这里的数字116,924,417对于任何16位寄存器来说都太大了。
另外,您是否注意到打字错误?在代码中,您使用116984417,而在随附文本中,您使用116924417。
这是我的搜索最大素因子的版本(初稿)。我已经在DOSBox中测试过了,它工作得很好:
结果适合16位AX,因此您可以继续使用16位打印功能。
这个子例程在上下文中。如果你愿意的话,你当然可以把它变成一个proc。