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

📄 sieve.lsl

📁 C与汇编混合编程
💻 LSL
字号:
 
                                                            
Cmerge V1.0     Mon Jun 08 14:31:24 1987                    Page     1-1

                                	.186 
                                	name	sieve 
 0000                           _text	segment	byte public 'code' 
                                dgroup	group	_data,_bss 
                                	assume	cs:_text,ds:dgroup,ss:dgroup 
 0000                           _text	ends 
 0000                           _data	segment word public 'data' 
 0000                           _d@	label	byte 
 0000                           _data	ends 
 0000                           _bss	segment word public 'bss' 
 0000                           _b@	label	byte 
 0000                           _bss	ends 
 0000                           _data	segment word public 'data' 
                                	public	_flags 
 0000                           _flags	label	byte 
 0000  00                       	db	0 
 0001  1FFE[                    	db	8190 dup (?) 
            ??                  
                         ]      
                                
 1FFF                           _data	ends 
 0000                           _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
 0000                           _main	proc	near 
 0000  56                       	push	si 
 0001  57                       	push	di 
 0002  C8 0004 00               	enter	4,0 
;|*** 	register int i,k;
; Line 17
;|*** 	int iter, count;
; Line 18
;|*** 
; Line 19
;|*** 	printf ("%d iterations: ", NITER);
; Line 20
 0006  68                       	db	104	; push immediate 
 0007  0096                     	dw	150 
 0009  B8 1FFF R                	mov	ax,offset _s@ 
 000C  50                       	push	ax 
 000D  E8 0000 E                	call	near ptr _printf 
 0010  83 C4 04                 	add	sp,4 
;|*** 
; Line 21
Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-2
;|*** 	for( iter = 1; iter <= NITER; iter++ )     /* Do sieve 150 times */
; Line 22
 0013  C7 46 FC 0001            	mov	word ptr [bp-4],1 
 0018  EB 41                    	jmp	short @5 
 001A                           @4: 
;|*** 		{
; Line 23
;|*** 		count = 0;
; Line 24
 001A  C7 46 FE 0000            	mov	word ptr [bp-2],0 
;|*** 		for( i = 0; i <= SIZE; i++)	  /* set all flags true */
; Line 25
 001F  33 F6                    	xor	si,si 
 0021  EB 06                    	jmp	short @9 
 0023                           @8: 
;|*** 			flags[i] = TRUE;
; Line 26
 0023  C6 84 0000 R 01          	mov	byte ptr dgroup:_flags[si],1 
 0028  46                       	inc	si 
 0029                           @9: 
 0029  81 FE 1FFE               	cmp	si,8190 
 
                                                            

 002D  7E F4                    	jle	@8 
;|*** 
; Line 27
;|*** 		for( i = 2; i <= SIZE; i++ )
; Line 28
 002F  BE 0002                  	mov	si,2 
 0032  EB 1E                    	jmp	short @13 
 0034                           @12: 
;|*** 			{
; Line 29
;|*** 			if ( flags[i] )		  /* found a prime */
; Line 30
 0034  80 BC 0000 R 00          	cmp	byte ptr dgroup:_flags[si],0 
 0039  74 16                    	je	@11 
;|*** 				{
; Line 31
;|*** 				for ( k = i + i; k <= SIZE; k += i )
; Line 32
 003B  8B FE                    	mov	di,si 
 003D  03 FE                    	add	di,si 
 003F  EB 07                    	jmp	short @18 
 0041                           @17: 
;|*** 					flags[k] = FALSE;	/* Cancel its multiples */
; Line 33
 0041  C6 85 0000 R 00          	mov	byte ptr dgroup:_flags[di],0 
 0046  03 FE                    	add	di,si 
 0048                           @18: 
 0048  81 FF 1FFE               	cmp	di,8190 
 004C  7E F3                    	jle	@17 
;|*** 				count++;
; Line 34
 004E  FF 46 FE                 	inc	word ptr [bp-2] 
;|*** 				}
; Line 35
;|*** 			}
; Line 36
Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-3
 0051                           @11: 
 0051  46                       	inc	si 
 0052                           @13: 
 0052  81 FE 1FFE               	cmp	si,8190 
 0056  7E DC                    	jle	@12 
;|*** 		}
; Line 37
 0058  FF 46 FC                 	inc	word ptr [bp-4] 
 005B                           @5: 
 005B  81 7E FC 0096            	cmp	word ptr [bp-4],150 
 0060  7E B8                    	jle	@4 
;|*** 
; Line 38
;|*** 	printf ("%d primes\n", count);
; Line 39
 0062  FF 76 FE                 	push	word ptr [bp-2] 
 0065  B8 200F R                	mov	ax,offset _s@+16 
 0068  50                       	push	ax 
 0069  E8 0000 E                	call	near ptr _printf 
 006C  83 C4 04                 	add	sp,4 
;|*** 
; Line 40
;|*** 	exit(0);
; Line 41
 006F  6A                       	db	106	; push immediate 
 0070  00                       	db	0 
 0071  E8 0000 E                	call	near ptr _exit 
 0074  44                       	inc	sp 
 0075  44                       	inc	sp 
;|*** 
; Line 42
;|*** 	}
; Line 43
 0076  C9                       	leave	 
 0077  5F                       	pop	di 
 
                                                            

 0078  5E                       	pop	si 
 0079  C3                       	ret	 
                                _main	endp 
 007A                           _text	ends 
 1FFF                           _data	segment word public 'data' 
 1FFF                           _s@	label	byte 
 1FFF  25                       	db	37 
 2000  64                       	db	100 
 2001  20                       	db	32 
 2002  69                       	db	105 
 2003  74                       	db	116 
 2004  65                       	db	101 
 2005  72                       	db	114 
 2006  61                       	db	97 
 2007  74                       	db	116 
 2008  69                       	db	105 
 2009  6F                       	db	111 
 200A  6E                       	db	110 
 200B  73                       	db	115 
 200C  3A                       	db	58 
 200D  20                       	db	32 
 200E  00                       	db	0 
Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-4
 200F  25                       	db	37 
 2010  64                       	db	100 
 2011  20                       	db	32 
 2012  70                       	db	112 
 2013  72                       	db	114 
 2014  69                       	db	105 
 2015  6D                       	db	109 
 2016  65                       	db	101 
 2017  73                       	db	115 
 2018  0A                       	db	10 
 2019  00                       	db	0 
 201A                           _data	ends 
 007A                           _text	segment	byte public 'code' 
                                	extrn	_exit:near 
                                	extrn	_printf:near 
                                	public	_main 
 007A                           _text	ends 
                                	end 
 
                                                            Symbols-1
                                                             

Segments and Groups:

                N a m e         	Size	Align	Combine Class

DGROUP . . . . . . . . . . . . .  	GROUP
  _DATA  . . . . . . . . . . . .  	201A	WORD	PUBLIC	'DATA'
  _BSS . . . . . . . . . . . . .  	0000	WORD	PUBLIC	'BSS'
_TEXT  . . . . . . . . . . . . .  	007A	BYTE	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	Value	Attr         

@11  . . . . . . . . . . . . . .  	L NEAR	0051	_TEXT
@12  . . . . . . . . . . . . . .  	L NEAR	0034	_TEXT
@13  . . . . . . . . . . . . . .  	L NEAR	0052	_TEXT
@17  . . . . . . . . . . . . . .  	L NEAR	0041	_TEXT
@18  . . . . . . . . . . . . . .  	L NEAR	0048	_TEXT
@4 . . . . . . . . . . . . . . .  	L NEAR	001A	_TEXT
@5 . . . . . . . . . . . . . . .  	L NEAR	005B	_TEXT
@8 . . . . . . . . . . . . . . .  	L NEAR	0023	_TEXT
@9 . . . . . . . . . . . . . . .  	L NEAR	0029	_TEXT
_B@  . . . . . . . . . . . . . .  	L BYTE 	0000	_BSS
_D@  . . . . . . . . . . . . . .  	L BYTE 	0000	_DATA
_EXIT  . . . . . . . . . . . . .  	L NEAR	0000	_TEXT	External
_FLAGS . . . . . . . . . . . . .  	L BYTE 	0000	_DATA	Global
_MAIN  . . . . . . . . . . . . .  	N PROC	0000	_TEXT	Global	Length = 007A
_PRINTF  . . . . . . . . . . . .  	L NEAR	0000	_TEXT	External
_S@  . . . . . . . . . . . . . .  	L BYTE 	1FFF	_DATA


    145 Source  Lines
    145 Total   Lines
     44 Symbols

  49228 Bytes symbol space free

      0 Warning Errors
Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-5
      0 Severe  Errors

⌨️ 快捷键说明

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