我想写一个x86(32位)汇编程序,可以将从1到100,000的质数发送到标准输出。我写了一些代码,但似乎不能正常工作。
section .data
msg db 'The next prime number is: ', 0
len equ $-msg
section .text
global _start
_start:
mov eax, 1 ; current number
mov edx, 1 ; divisor
mov ecx, 100000 ; upper limit
find_next_prime:
cmp eax, edx
je print_number
inc edx
cmp edx, eax
jg check_next_number
mov ebx, eax
xor edx, edx
div edx, edx
cmp edx, 0
je not_prime
jmp check_next_number
not_prime:
inc eax
jmp find_next_prime
check_next_number:
cmp eax, ecx
jl find_next_prime
print_number:
; Print message
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
int 0x80
; Print number
mov eax, 3
mov ebx, 1
mov ecx, eax
mov edx, 10
int 0x80
; Exit
mov eax, 1
xor ebx, ebx
int 0x80
我是汇编语言的新手,所以我不知道我能做些什么来让这个工作。也许有人可以修复这个代码,告诉我我做错了什么。
1条答案
按热度按时间insrf1ej1#
你的问题很可能就在这里:
我不熟悉32位x86(我只使用过16位版本),但我可以告诉你,如果你用零除任何东西,你不会得到想要的结果。
Here's how div works in x86.