用汇编语言输入一个自然数n,求1~n的所有素数,并显示。
时间: 2023-12-14 07:00:15 浏览: 143
汇编语言编写一个程序来输入一个自然数n,并找出1到n之间的所有素数并显示。
首先,我们需要定义一些变量来存储输入的数n,以及其他在程序中使用的临时变量。
```
org 100h
.model small
.stack 100h
.data
n dw ? ; 存储输入的数n
counter dw 2 ; 计数器,初始化为2
isprime db 1 ; 变量用于标记是否为素数,默认为1(是素数)
newline db 0ah, 0dh, '$' ; 输出换行符
.code
main proc
mov ax, @data
mov ds, ax
; 输入n
mov ah, 1
int 21h ; 从键盘输入字符
sub al, '0' ; 将输入的字符转换成数字
mov [n], al
mov bx, 1 ; 当前判断的数初始化为1
start_loop:
mov cx, 2 ; 除数初始化为2
mov dx, 0 ; 清空dx寄存器
prime_check:
mov ax, bx
div cx
cmp dx, 0 ; 余数是否为0
je not_prime ; 如果余数为0,跳转到not_prime标签
inc cx ; 除数加一
cmp cx, bx ; 判断除数是否等于当前数
jg prime ; 如果除数大于当前数,则跳转到prime标签
not_prime:
mov [isprime], 0 ; isprame设为0,表示不是素数
jmp end_check ; 跳转到end_check标签
prime:
inc bx ; 当前判断的数加一
jmp start_loop ; 继续下一轮循环
end_check:
cmp [isprime], 1 ; 判断isprime的值
je print_prime ; 如果isprime为1,表示是素数,则跳转到print_prime标签
inc bx ; 当前判断的数加1
jmp start_loop ; 继续下一轮循环
print_prime:
mov dl, bl ; 将当前判断的数存入dl寄存器中
add dl, 48 ; 将数字转换成字符
mov ah, 2 ; 输出函数
int 21h ; 输出字符
mov dl, ',' ; 输出逗号
mov ah, 2 ; 输出函数
int 21h ; 输出字符
inc bx ; 当前判断的数加1
jmp start_loop ; 继续下一轮循环
mov ah, 4ch
int 21h
main endp
end main
```
以上汇编程序通过遍历1到n之间的所有数,对每个数进行判断是否为素数。如果当前数除以2到当前数之间的所有数中有余数为0的情况,则当前数不是素数,继续判断下一个数。如果当前数除以2到当前数之间的所有数都没有余数为0的情况,则当前数是素数,将其显示出来。最后,按任意键退出程序。
阅读全文