⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sieve.asl

📁 C与汇编混合编程
💻 ASL
字号:
	.186
	name	sieve
_text	segment	byte public 'code'
dgroup	group	_data,_bss
	assume	cs:_text,ds:dgroup,ss:dgroup
_text	ends
_data	segment word public 'data'
_d@	label	byte
_data	ends
_bss	segment word public 'bss'
_b@	label	byte
_bss	ends
_data	segment word public 'data'
	public	_flags
_flags	label	byte
	db	0
	db	8190 dup (?)
_data	ends
_text	segment	byte public 'code'
;|*** 
;|*** /*	Eratosthenes Sieve Prime Number Program in C, Byte January 1983.
;|***  *	The code has been corrected to produce primes correctly.
;|*** */
;|*** #include <stdio.h>
;|*** 
;|*** #define TRUE	1
;|*** #define FALSE	0
;|*** #define NITER	150
;|*** #define SIZE	8190
;|*** 
;|*** char flags[SIZE+1]={0};
;|*** 
;|*** 
;|*** main ()
;|*** 	{
; Line 16
_main	proc	near
	push	si
	push	di
	enter	4,0
;|*** 	register int i,k;
; Line 17
;|*** 	int iter, count;
; Line 18
;|*** 
; Line 19
;|*** 	printf ("%d iterations: ", NITER);
; Line 20
	db	104	; push immediate
	dw	150
	mov	ax,offset _s@
	push	ax
	call	near ptr _printf
	add	sp,4
;|*** 
; Line 21
;|*** 	for( iter = 1; iter <= NITER; iter++ )     /* Do sieve 150 times */
; Line 22
	mov	word ptr [bp-4],1
	jmp	short @5
@4:
;|*** 		{
; Line 23
;|*** 		count = 0;
; Line 24
	mov	word ptr [bp-2],0
;|*** 		for( i = 0; i <= SIZE; i++)	  /* set all flags true */
; Line 25
	xor	si,si
	jmp	short @9
@8:
;|*** 			flags[i] = TRUE;
; Line 26
	mov	byte ptr dgroup:_flags[si],1
	inc	si
@9:
	cmp	si,8190
	jle	@8
;|*** 
; Line 27
;|*** 		for( i = 2; i <= SIZE; i++ )
; Line 28
	mov	si,2
	jmp	short @13
@12:
;|*** 			{
; Line 29
;|*** 			if ( flags[i] )		  /* found a prime */
; Line 30
	cmp	byte ptr dgroup:_flags[si],0
	je	@11
;|*** 				{
; Line 31
;|*** 				for ( k = i + i; k <= SIZE; k += i )
; Line 32
	mov	di,si
	add	di,si
	jmp	short @18
@17:
;|*** 					flags[k] = FALSE;	/* Cancel its multiples */
; Line 33
	mov	byte ptr dgroup:_flags[di],0
	add	di,si
@18:
	cmp	di,8190
	jle	@17
;|*** 				count++;
; Line 34
	inc	word ptr [bp-2]
;|*** 				}
; Line 35
;|*** 			}
; Line 36
@11:
	inc	si
@13:
	cmp	si,8190
	jle	@12
;|*** 		}
; Line 37
	inc	word ptr [bp-4]
@5:
	cmp	word ptr [bp-4],150
	jle	@4
;|*** 
; Line 38
;|*** 	printf ("%d primes\n", count);
; Line 39
	push	word ptr [bp-2]
	mov	ax,offset _s@+16
	push	ax
	call	near ptr _printf
	add	sp,4
;|*** 
; Line 40
;|*** 	exit(0);
; Line 41
	db	106	; push immediate
	db	0
	call	near ptr _exit
	inc	sp
	inc	sp
;|*** 
; Line 42
;|*** 	}
; Line 43
	leave	
	pop	di
	pop	si
	ret	
_main	endp
_text	ends
_data	segment word public 'data'
_s@	label	byte
	db	37
	db	100
	db	32
	db	105
	db	116
	db	101
	db	114
	db	97
	db	116
	db	105
	db	111
	db	110
	db	115
	db	58
	db	32
	db	0
	db	37
	db	100
	db	32
	db	112
	db	114
	db	105
	db	109
	db	101
	db	115
	db	10
	db	0
_data	ends
_text	segment	byte public 'code'
	extrn	_exit:near
	extrn	_printf:near
	public	_main
_text	ends
	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -