您的位置:首页 > 其它

汇编语言输出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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: