本人今天编写了一个例出2-65535之间所有质数的程序,特拿出来分享。程序如下:
(本程序在MASM5.0下编译通过,在DOS环境下成功执行。)
DATA SEGMENT
ZCS DW 10000,1000,100,10,1
SJZ DB 5 DUP(0),09H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,65534
MOV BX,2
DXH:
PUSH CX
MOV CX,BX
SUB CX,2
CMP CX,0
JZ SAVE
MOV BP,2
XXH:
XOR DX,DX
MOV AX,BX
DIV BP
CMP DX,0
JE NEXT
INC BP
LOOP XXH
SAVE:
MOV CX,5
LEA DI,ZCS
LEA BP,SJZ
MOV AX,BX
ASCII:
XOR DX,DX
DIV WORD PTR[DI]
ADD AL,30H
MOV DS:[BP],AL
MOV AX,DX
ADD DI,2
INC BP
LOOP ASCII
MOV CX,6
LEA SI,SJZ
DISP:
MOV DL,[SI]
MOV AH,2
INT 21H
INC SI
LOOP DISP
NEXT:
INC BX
POP CX
LOOP DXH
MOV AH,4CH
INT 21H
CODE ENDS
END START
------解决思路----------------------
感谢分享,不过不定义一个栈段真的没问题吗?
------解决思路----------------------
程序本身很小(远不到 64KB),对内存使用没有额外要求和操作(比如进行内存的释放和申请操作其大小加上程序本身近乎甚至大于 64KB),堆栈的使用也无特别要求(比如极深的递归调用可能导致的堆栈要求加程序近乎甚至大于64KB了),可以不定义堆栈段,因为这时会将程序首个 64K 段的末尾作为默认的堆栈空间;前面的条件就是简单地约束这部分空间不被程序使用到,堆栈的增长也不会威胁到低地址部分的程序自身。
------解决思路----------------------
是这样呀,长姿势了。