用汇编语言,编写程序输出100-200之间所有的素数,每行输出5个数,在线等,急求!!!!!!!!!!

2024-11-08 05:25:19
推荐回答(3个)
回答(1):

 

;用汇编语言,编写程序输出100-200之间所有的素数,每行输出5个数,在线等,急求!!!!!!!!!!

data segment

n1  db 20 dup(0)

N   DB 0

data ends


code segment

main proc far

assume cs:code,ds:data


start:

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

;

;MOV AX,20000

mov ax,100 ;起始数

AGAIN:

cmp ax,200 ;结束数

;cmp ax,300

ja exit

MOV BX,2

X1:

CMP BX,AX

JAe EXIT1 ;YES,DISP IT

PUSH AX

PUSH BX

MOV DX,0

DIV BX

CMP DX,0 ;YU=0

JE N11  ;NO

POP BX

POP AX

cmp bx,2 ;去掉偶数

ja add2

dec bx

add2:

inc bx

INC BX

JMP X1

N11:

POP BX

POP AX

JMP N22


EXIT1:  ;YES,DISP IT


mov si,offset n1

mov dx,0

CALL DIV10

push ax

push bx

mov dx,offset n1

mov ah,9

int 21h


INC N

MOV AL,N

CMP AL,5 ;每行显示5个数

JNE  DISP_K

MOV AL,0

MOV N,AL

JMP DISP_CR

DISP_K:

MOV AH,2

MOV DL,' '

INT 21H

JMP NEXT9

DISP_CR:

mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

NEXT9:

pop bx

pop ax

N22:

inc ax

jmp again

exit:


RET

;INT 20H

main endp

;=====================

;=====================

;将32位16进制数(DX:AX)转换为10进制数子程序

;入口: DX:AX存32位16进制数, SI为存放转换后10进制数的首地址

;出口: 在SI中存放转换后10进制数的ASCII码

DIV10 PROC NEAR

push ax

PUSH BX  ;保护现场

PUSH CX

PUSH DI

MOV CX,0 ;每位10进制数进栈计数器

MOV BX,10D ;除数10

RE_DIV:

PUSH AX  ;低16位进栈

MOV AX,DX ;先除高16位

MOV DX,0 ;高位置0

DIV BX  ;商在AX中,是下一轮除的高位;余数在DX中,它和已进栈的AX(低16位)组成新的32位数

MOV DI,AX ;将下一轮除的高位保存在DI

POP AX  ;取回先前进栈的低16位

DIV BX  ;除后,商AX是下一轮的低16位,即(DI:AX)组成新的32位被除数;

  ;余数DX是一位已转换的10进制数

ADD DX,30H ;将其转换成ASCII码

PUSH DX  ;将其进栈

INC CX  ;进栈计数器加1

MOV DX,DI ;将高位商返回DX

CMP AX,0 ;判断商是否为0, DX:AX均需为0,实际上就是(DI:AX)这个新组成的32位被除数是否为0

jz down1 ;商低位为0

JMP RE_DIV ;商低位不为0,继续除10取余

down1:

cmp dx,0

jz down  ;商低位(AX)为0,高位(DX)也为0

JMP RE_DIV ;否则继续除10取余

DOWN:  ;当DX和AX均为0时(商为0),转结束除

POP [SI] ;以CX的值(进栈计数器)依次出栈

INC SI  ;由于出栈的数仅低8位有效(高位为0),所以SI每次只增1,

  ;使新出栈的低8位有效值覆盖前一次出栈的高位0

LOOP DOWN

MOV AL,'$' ;在字符串尾部加结束标志

MOV [SI],AL

POP DI  ;恢复现场

POP CX

POP BX

pop ax

RET

DIV10 ENDP

;========================

;========================

code ends

end start

回答(2):

我也做出来了。


可见插图:



只要把设计要求,写入下面的数据段中,即可。

;================================

DSEG SEGMENT

    MSG1    DB  'SU_SHU: ', 13, 10, 24H


    N_1     DW  100

    N_2     DW  1000 ;300

    N_3     DB  10;8    ;5


    N_DIV   DW  ?

    N_DIS   DB  0


DSEG ENDS

;================================


程序,就会按照要求,输出素数。

回答(3):

我这有原创“筛法”找素数并输出的汇编程序的,私信30RMB吧,或当我没说