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

67ca1fb616f154d0d328fc8556e0d06d.png

;用汇编语言,编写程序输出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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值