这是一个很简单的判断程序,但是用汇编语言来写会比较麻烦。注意输出格式的要求
素数含义:只能被1和自己整除
以下是简化段定义下的程序
.MODEL SMALL
.STACK 4096
.DATA
CHANGELINE DB 13,10,'$'
ARRAY WORD 100 dup(?)
COUNT DW ?
MESS DB "Prime number: ",0dh,0ah,'$'
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV CX,10
MOV BH,0
MOV SI,OFFSET ARRAY
MOV BL,2;从2-100查找
L1: CMP BL,100
JA L5;大于100停止
MOV DL,2;除以2-(bl-1)
L2: CMP DL,BL
JAE L3;大于等于则为素数
MOV AX,BX
DIV DL
CMP AH,0;能整除则不是素数
JZ L4
INC DL;不能整除,加一再尝试
JMP L2
L3: MOV [SI],BL
ADD SI,TYPE ARRAY
INC COUNT
L4: INC BL;查找下一个数
JMP L1
L5: CALL PRINT
MOV AX,4C00H
INT 21H
MAIN ENDP
PRINT PROC NEAR
MOV DX,OFFSET MESS
MOV AH,09H
INT 21H
MOV SI,OFFSET ARRAY
MOV CX,COUNT;做count次loop
NEXT:MOV AX,COUNT
SUB AX,CX ;每次cx减1
MOV BL,10
DIV BL
CMP AH,0
JNZ AGAIN;ax-cx不是10的倍数跳走输出素数
MOV DX,OFFSET CHANGELINE
MOV AH,09H;输出换行
INT 21H
AGAIN:
MOV BL,[SI]
MOV BH,0
PUSH CX;转十进制输出的acssi码
MOV CX,0
D1: MOV AX,BX
MOV DX,0
MOV BX,10
DIV BX
PUSH DX
INC CX
MOV BX,AX
CMP AX,0
JNZ D1
D2: POP DX
ADD DX,30H
MOV AH,2H
INT 21H
LOOP D2
POP CX
MOV DL,00H
MOV AH,2H
INT 21H
ADD SI,TYPE ARRAY
LOOP NEXT
RET
PRINT ENDP
END
欢迎批评指正