汇编语言输出10000以内的素数(小模式下)
2018-01-28 14:49
295 查看
在小模式下(masm for window 2015版)输出10000以内的素数,两个重点,一是找到10000以内的素数,二是将这些数输出。
其中判断素数,因为用汇编不方便直接求该数的平方根,从2到本身的判断又太浪费时间,因此用的是100这个数,当判断的数较大时可以有效减少所需要的时间,当数小于100时,判断的条件就是从2到本身,因此需要增加一个判断条件看是否等于本身,即代码第10行。另一个重点就是关于较大数的输出。
.MODEL SMALL
.CODE
MAIN PROC FAR
MOV AX,2
NEXT:
MOV CX,AX;CX记录AX的值
MOV BX,2
AGAIN:
MOV AX,CX
CMP BX,AX;只能除1和本身,即为素数
JZ L2
MOV DX,0
DIV BX;DX是余数,AX是商
CMP DX,0
JZ L1 ;整除BX,不是素数
INC BX
;除到100还没有跳出去,是素数
CMP BX,101
JZ L2
JMP AGAIN
L1:
MOV AX,CX
CMP AX,10000
JZ L7
INC AX
JMP NEXT
L2: ;输出素数
MOV AX,CX
CMP AX,1000
JNB L3 ;AX>=1000
CMP AX,100;1000>AL>=100
JNB L4
CMP AX,10 ;10=<AL<100
JNB L5
JMP L6
L3:;AX>=1000
MOV DX,0
MOV BX,1000
DIV BX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出千位数
MOV AX,BX;传到下一个
L4:
MOV BL,100
DIV BL
MOV BL,AH
MOV DL,AL;AL是商
ADD DL,30H
MOV AH,2H
INT 21H;输出百位数
MOV AL,BL;传到下一个
MOV AH,0
L5:
MOV BL,10
DIV BL;AH是余数,AL是商
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出十位数
MOV AL,BL;传到下一个
MOV AH,0
L6:
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出个位数
MOV DL,20H
MOV AH,2H
INT 21H;输出空格
JMP L1;返回循环
L7:
MOV AX,4C00H
INT 21H
MAIN ENDP
END
其中判断素数,因为用汇编不方便直接求该数的平方根,从2到本身的判断又太浪费时间,因此用的是100这个数,当判断的数较大时可以有效减少所需要的时间,当数小于100时,判断的条件就是从2到本身,因此需要增加一个判断条件看是否等于本身,即代码第10行。另一个重点就是关于较大数的输出。
.MODEL SMALL
.CODE
MAIN PROC FAR
MOV AX,2
NEXT:
MOV CX,AX;CX记录AX的值
MOV BX,2
AGAIN:
MOV AX,CX
CMP BX,AX;只能除1和本身,即为素数
JZ L2
MOV DX,0
DIV BX;DX是余数,AX是商
CMP DX,0
JZ L1 ;整除BX,不是素数
INC BX
;除到100还没有跳出去,是素数
CMP BX,101
JZ L2
JMP AGAIN
L1:
MOV AX,CX
CMP AX,10000
JZ L7
INC AX
JMP NEXT
L2: ;输出素数
MOV AX,CX
CMP AX,1000
JNB L3 ;AX>=1000
CMP AX,100;1000>AL>=100
JNB L4
CMP AX,10 ;10=<AL<100
JNB L5
JMP L6
L3:;AX>=1000
MOV DX,0
MOV BX,1000
DIV BX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出千位数
MOV AX,BX;传到下一个
L4:
MOV BL,100
DIV BL
MOV BL,AH
MOV DL,AL;AL是商
ADD DL,30H
MOV AH,2H
INT 21H;输出百位数
MOV AL,BL;传到下一个
MOV AH,0
L5:
MOV BL,10
DIV BL;AH是余数,AL是商
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出十位数
MOV AL,BL;传到下一个
MOV AH,0
L6:
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H;输出个位数
MOV DL,20H
MOV AH,2H
INT 21H;输出空格
JMP L1;返回循环
L7:
MOV AX,4C00H
INT 21H
MAIN ENDP
END
相关文章推荐
- 问题五十四: 输出10000以内的所有回文素数。
- 汇编语言-判断素数:找出前100以内的素数
- 输出10000以内素数
- 第11周项目6-回文、素数 输出1000以内的所有素数、回文数、回文素数和10000以内的所有可逆素数(多文件组织程序)
- 输出10000以内的第M到第N个素数(Eclipse gcc下)
- 12周任务4:输出10000以内的所有素数
- 输出10000以内的素数、回文数、回文素数
- 第12周项目-调用函数输出10000以内的所有素数
- 项目4:调用函数输出10000以内的素数
- 第十二周上机项目4(3):输出10000以内的所有回文素数
- 1-11-6 - 输出10000以内的可逆素数
- 用Java语言编写程序:输出100以内的素数
- GO 语言冒泡排序、输出100以内所以素数的小程序
- C++ 第十二周任务-调用函数输出10000以内的所有素数
- 输出10000 以内的所有素数
- 第11周项目6-回文、素数 输出1000以内的所有素数、回文数、回文素数和10000以内的所有可逆素数
- 输出10000以内的所有回文素数
- 输出10000以内的所有素数
- 第十一周项目6-回文、素数(输出10000以内的可逆素数)
- 输出10000以内的所有可逆素数