判断质数汇编程序编写

以下面的代码为例,说明如何用汇编语言判断一个数是否为素数,从而进行汇编语言的学习。 点击展开/折叠代码 .MODEL SMALL .STACK 100H .DATA msg_input DB ‘Please input a number: $' msg_prime DB 0DH, 0AH, 'It is a prime number.$’ msg_not DB 0DH, 0AH, ‘It is not a prime number.$’ num DW 0 .CODE START: MOV AX, @DATA MOV DS, AX ; 1. 显示输入提示 LEA DX, msg_input MOV AH, 09H INT 21H ; 2. 读取数字 (读取一个十进制数) CALL READ_NUM MOV num, AX ; 3. 判断素数逻辑 ; 如果 n < 2,不是素数 CMP AX, 2 JL NOT_PRIME JE IS_PRIME ; 2 是素数 ; 循环判断: 从 2 到 n-1 MOV CX, 2 ; CX 是除数 CHECK_LOOP: MOV AX, num XOR DX, DX ; 清除高位 DIV CX ; AX / CX, 余数在 DX CMP DX, 0 ; 如果余数为 0,说明被整除 JZ NOT_PRIME INC CX MOV AX, CX MUL AX ; 计算 CX * CX CMP AX, num ; 只需检查到 根号 n 即可优化 JA IS_PRIME ; 如果 CX*CX > num 还没除尽,就是素数 JMP CHECK_LOOP IS_PRIME: LEA DX, msg_prime JMP DISPLAY NOT_PRIME: LEA DX, msg_not DISPLAY: MOV AH, 09H INT 21H ; 4. 退出程序 MOV AH, 4CH INT 21H ; — 子程序:读取十进制数字 — READ_NUM PROC XOR BX, BX READ_CHAR: MOV AH, 01H ; 读取字符到 AL INT 21H CMP AL, 0DH ; 回车键退出 JZ DONE_READ SUB AL, ‘0’ ; 转换为数字 JL DONE_READ CMP AL, 9 JG DONE_READ MOV AH, 0 PUSH AX MOV AX, 10 MUL BX ; BX = BX * 10 POP DX ADD AX, DX MOV BX, AX JMP READ_CHAR DONE_READ: MOV AX, BX RET READ_NUM ENDP END START ...

January 12, 2026 · 3 min · farmer3-c