8086汇编语言判断输入的一个10-300内的整数是否素数,输出数字加是否是素数
时间: 2023-06-15 17:05:46 浏览: 57
以下是8086汇编语言代码,可以判断输入的一个10-300内的整数是否素数,并输出数字加是否是素数。
```
.model small
.stack 100h
.data
msg1 db 'Enter a number (10-300): $'
msg2 db 'The number is prime. $'
msg3 db 'The number is not prime. $'
newline db 0dh, 0ah, '$'
num dw ?
isprime db ?
.code
main proc
mov ax, @data
mov ds, ax
; Display message to enter a number
mov ah, 9h
lea dx, msg1
int 21h
; Read input number
mov ah, 1h
int 21h
sub al, '0'
mov bl, al
; Check if number is between 10-300
cmp bl, 10
jl notprime
cmp bl, 300
jg notprime
; Check if number is prime
mov cx, bl
mov ax, 2
div cx
mov dx, 0
cmp ah, 0
je notprime
mov cx, bl
mov ax, 3
testprime:
div cx
cmp ah, 0
je notprime
sub cx, 1
cmp cx, 2
jge testprime
mov isprime, 1
jmp display_result
notprime:
mov isprime, 0
display_result:
; Display input number
mov ah, 2h
mov dl, bl
add dl, '0'
int 21h
; Display whether number is prime or not
cmp isprime, 1
je prime
lea dx, msg3
jmp display_newline
prime:
lea dx, msg2
display_newline:
; Display newline character
lea si, newline
mov ah, 9h
mov dx, si
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
代码的核心部分是判断一个数是否为素数。在这里,我们使用了传统的试除法来检查一个数是否为素数。我们从3开始,试着将输入的数除以每个小于它的正整数,如果除以任何一个数,余数为0,则该数不是素数。如果我们试了所有小于输入数字的整数,仍然没有发现余数为0的数,则该数字为素数。
在代码中,我们首先将输入数字存储在BL中,然后从10到300检查数字的范围。然后,我们用CX来存储数字,并从2开始检查它是否是素数。如果找到一个因子,我们跳到标记为“notprime”的标签,然后输出该数字不是素数的消息。如果我们成功找到一个因子,则将isprime变量设置为0。如果我们没有找到因子,我们将isprime变量设置为1,并跳转到标记为“prime”的标签,然后输出该数字是素数的消息。最后,我们使用INT 21H和AH = 4CH来退出程序。
希望这可以帮助你理解如何使用8086汇编语言编写一个判断输入的一个10-300内的整数是否素数的程序。