| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2343 人关注过本帖
标题:大家帮帮我啊~汇编语言求质数~明天交,我编不出来
只看楼主 加入收藏
hyukfei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-1-6
收藏
 问题点数:0 回复次数:3 
大家帮帮我啊~汇编语言求质数~明天交,我编不出来
显示‘PLEASE IN PUT THE DATA:’输入一个十进制数以回车结束,在新的一行显示从1到这个数的所有质数(十进制)
搜索更多相关主题的帖子: 质数 汇编语言 
2008-01-06 16:11
hyukfei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-1-6
收藏
得分:0 
我把我写的贴在着~
大家看下帮我改改吧~
能运行
但我觉得有点繁~~
DATA SEGMENT
STR1 DB 'Please input the data(1-9999): ','$'
STR2 DB 'The primes are:',0DH,0AH,'$'
NUM  DW ?
K    DB ?
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
  ASSUME CS:CODE,DS:DATA
START: MOV  AX,DATA
       MOV  DS,AX
       MOV  DX,OFFSET STR1
       MOV  AH,9
       INT  21H
       CALL TERN1
       MOV  NUM,BX
       CALL HUI_HUAN           ;回车,换行
       MOV  DX,OFFSET STR2
       MOV  AH,9
       INT  21H  
       MOV  CX,1
LOP1:  INC  CX
       PUSH CX
       MOV  BX,2
       CALL PrimeNum
       POP  CX
       CMP  CX,NUM                  ;输出Num以内的质数
       JB   LOP1
       MOV  AH,4CH
       INT  21H
MAIN   ENDP
;子程序   CALL PrimeNum  
;功能:    判断一个数是否为质数 ,并输出.
;入口条件   BX=2  CX=1
PrimeNum PROC NEAR
LOP2:      CMP  BX,CX
           JZ   PrNumOut
           XOR  DX,DX
           MOV  AX,CX
           DIV  BX
           CMP  DX,0
           JZ   PrNumRet
           INC  BX
           JMP  LOP2
PrNumOut:  MOV  BX,CX
           MOV  K,00H
           CALL TERN
PrNumRet:  RET
PrimeNum   ENDP
;*****************************************
;   将输入的十进制数转换成十六进制数子程序
;*****************************************
TERN1  PROC
       XOR BX,BX
       XOR AX,AX
SHURU: MOV AH,1
       INT 21H
       CMP AL,0DH
       JZ  NET
       SAL BX,1
       MOV DX,BX
       MOV CL,2
       SAL BX,CL
       ADD BX,DX
       SUB AL,30H
       MOV AH,0
       ADD BX,AX
       JMP SHURU
NET:   RET
TERN1  ENDP
;***************************************
;  回车,换行
;***************************************
HUI_HUAN PROC NEAR
       MOV DL,0DH
       MOV AH,2
       INT 21H
       MOV DL,0AH
       MOV AH,2
       INT 21H  
       RET
HUI_HUAN ENDP
;****************************************
;将十六进制转换成十进制输出子程序,入口BX,使用前将K置零,即MOV K,00H
;****************************************
TERN  PROC  NEAR
       MOV CX,1000D
       CALL DEC_DIV      ;转换千位数
       MOV CX,100D
       CALL DEC_DIV      ;转换百位数
       MOV CX,10D
       CALL DEC_DIV      ;转换十位数
       MOV CX,1D
       CALL DEC_DIV      ;转换个位数
       RET
TERN   ENDP
;****************************************
;   从高位到低显示每位十进制数,省略前面的0
;****************************************
DEC_DIV PROC NEAR
       MOV AX,BX
       MOV DX,0
       DIV CX            ;商为转换后的1位十进制数
       MOV BX,DX         ;将余数保存在BX
       OR  K,AL
       JZ  TN
       MOV K,01H
       MOV DL,AL
       ADD DL,30H        ;将商转换成ASCII码
       MOV AH,2
       INT 21H           ;显示
       RET
TN:    MOV DL,20H
       MOV AH,2
       INT 21H
       RET
DEC_DIV ENDP
;****************************************
CODE ENDS
     END START
2008-01-07 16:00
sccdyc
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2006-4-23
收藏
得分:0 
我给的答案
DATAS SEGMENT
    ;此处输入数据段代码  
    N EQU 100
    pmsg db 0DH,0Ah,'PLEASE IN PUT THE DATA:$'
    emsg db 0DH,0Ah,'over the max number!$'
    info db 0DH,0Ah,'*********author:yangcheng*********$'
    BUF DB 4
        DB ?
        DB 4 DUP(?)
    NUM DB 0
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
     ASSUME CS:CODES,DS:DATAS,SS:STACKS
;
MAIN PROC FAR
start:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码据段代码
    LEA DX,info
    MOV AH,09H
    INT 21H
    LEA DX,pmsg
    MOV AH,09H
    INT 21H
    LEA DX,BUF
    MOV AH,0AH
    INT 21H
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    CALL GETNUM
    MOV BL,NUM
    CMP NUM,100
    JG ERROR
    CALL IFPRIME
    JMP EXIT1
   
ERROR:
    LEA DX,emsg
    MOV AH,09H
    INT 21H
EXIT1:
    MOV AH,4CH
    INT 21H
MAIN ENDP
;
GETNUM PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    ;
    MOV AX,1
    MOV DI,10
    XOR CX,CX
    MOV CL,BUF+1
    MOV SI,CX
    DEC SI
    LEA BX,BUF+2
    ;
DO:
    PUSH AX
    MOV DL,BYTE PTR [BX+SI]
    AND DL,0FH
    MUL DL
    ADD NUM,AL
    POP AX
    MUL DI
    DEC SI
    CMP SI,0
    JGE DO
    ;
    POP DX
    POP CX
    POP BX
    POP AX
    RET
GETNUM ENDP
;
IFPRIME PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    ;
    MOV DX,2
DO1:
    INC DX
    CMP DL,NUM
    JG EXIT2
    MOV AX,DX    
    MOV BL,2
DO2:
    DIV BL
    CMP AH,0
    JE DO1
    INC BL
    MOV AX,DX
    CMP BL,DL
    JL DO2
DO5:
    CALL DSP
    JMP DO1        
    ;
EXIT2:
    POP DX
    POP CX
    POP BX
    POP AX
    RET
IFPRIME ENDP
;
DSP PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    ;
    MOV AX,DX
    MOV BL,10
    XOR CX,CX
DO3:    
    DIV BL
    PUSH AX
    INC CX
    XOR AH,AH
    CMP AL,0
    JG DO3
DO4:
    POP AX
    ADD AH,30H
    MOV DL,AH
    MOV AH,02H
    INT 21H
    LOOP DO4
    MOV DL,' '
    INT 21H
    ;
    POP DX
    POP CX
    POP BX
    POP AX
    RET
DSP ENDP
 CODES ENDS
     END start

2008-01-07 21:17
hyukfei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-1-6
收藏
得分:0 
谢谢谢谢~能不能写点解释和思路呀~好长~
2008-01-07 21:51
快速回复:大家帮帮我啊~汇编语言求质数~明天交,我编不出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016210 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved