亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pascal.asm

?? 工欲善其事
?? ASM
字號:
; A win32asm graphics app, which generates an image of Pascal's Triangle by a method best 
; know as The Chaos Game.

; I fully indorse any plagiarism of this code.
; E骾n O'Callaghan, eoinoc@iol.ie

.586
.MODEL FLAT,STDCALL
OPTION SCOPED
OPTION CASEMAP:NONE

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

WM_CASE MACRO reg,msgs		; The Svins MACRO for Window Message processing
	irp msg,<msgs>
		cmp reg,WM_&msg
		je j&msg
	endm
endm

.data
ClassName db "Win32",0
AppName  db "Order in Chaos",0

.DATA?
wc WNDCLASSEX {?}
msg MSG {?}
rect RECT {?}
gWnd dd ?					; Global variable with window handle
gIst dd ?					; Global variable holds Instance

bDc dd ?					; Back Buffer DC
pBb dd ?					; Pointer to Back Buffer Bitmap Bits
hBm dd ?					; Back Buffer Bitmap Handle

TriPoint POINT {?, ?}, {?, ?}, {?, ?}	; Will hold 3 corners of triangle

.CODE
ALIGN 4
WinProc Proc uses ebx edi esi hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL ps:PAINTSTRUCT
	mov eax,uMsg
	WM_CASE eax,<PAINT,SIZE,DESTROY>			; MACRO will process these three messages
	invoke DefWindowProc,hWnd,uMsg,wParam,lParam; Otherwise message is passed to default proc
	ret

	jSIZE:
	invoke GetClientRect,hWnd,addr rect			; Store Window dimensions in rect struct
	call InitDoubleBuffer						; Initalsie Back Buffer
	call RenderFractal							; Render Fractal

	xor eax,eax
	ret

	jPAINT:
	invoke BeginPaint,hWnd,addr ps
		invoke BitBlt,ps.hdc,0,0,rect.right,rect.bottom,\	; Blt Backbuffer to window DC
		              bDc,0,0,SRCCOPY
	invoke EndPaint,hWnd,addr ps
	xor eax,eax
	ret

	jDESTROY:
	invoke DeleteDC,bDc							; Delete Buffer DC
	invoke DeleteObject,hBm						; Delete Buffer Bitmap
	invoke PostQuitMessage,NULL					; Quit App
	ret
WinProc ENDP

ALIGN 4
InitDoubleBuffer Proc
LOCAL bih:BITMAPINFOHEADER
	invoke DeleteDC,bDc							; Delete Old DC
	invoke DeleteObject,hBm						; Delete Old Bitmap

	; In order to set up a back bufer you need to create a DC. You then need to fill out a 
	; BITMAPINFOHEADER adn use CreateDIBSection to create a DIB Section. You can then select
	; the DIB Section into the Back Buffers DC and from that you can BitBlt it.
	
	invoke CreateCompatibleDC,0					; Create the Backbuffer DC
	mov bDc,eax
	
	lea edx,bih										; edx point to BITMAPINFOHEADER memory
	mov [edx].BITMAPINFOHEADER.biSize,sizeof(BITMAPINFOHEADER)
	mov eax,rect.right
	mov (BITMAPINFOHEADER ptr [edx]).biWidth, eax	; Set width to that of main window
	mov eax,rect.bottom
	mov [edx].BITMAPINFOHEADER.biHeight,eax			; And match Heights
	mov [edx].BITMAPINFOHEADER.biPlanes,1
	mov [edx].BITMAPINFOHEADER.biBitCount,32		; Set 32bit colors, ie dwords
	mov [edx].BITMAPINFOHEADER.biCompression,BI_RGB ; Pixel storage format
	mov [edx].BITMAPINFOHEADER.biSizeImage,0
	mov [edx].BITMAPINFOHEADER.biXPelsPerMeter,0
	mov [edx].BITMAPINFOHEADER.biYPelsPerMeter,0
	mov [edx].BITMAPINFOHEADER.biClrUsed,0
	mov [edx].BITMAPINFOHEADER.biClrImportant,0

	invoke CreateDIBSection,bDc,edx,DIB_RGB_COLORS,addr pBb,0,0 ; Here pBb will be set with
	mov hBm,eax													; a pointer to bitmap bits
	invoke SelectObject,bDc,eax
ret
InitDoubleBuffer EndP

Rnd3Bit Proc		; This procedure generates 3 random bits. A slight change can be made to 
.data				; alter this value up to at least 20bits. 
	RndInit dd 0A2F59C2Eh
.code
	mov edx,RndInit
	mov eax,3;  <- Here's where it's set to 3 bits
rl: rol edx,1
	jnc rs
	xor edx,0ah
rs: dec eax
	jne rl
    mov eax,edx
    rcr	edx,1
    mov RndInit,edx
ret
Rnd3Bit EndP

RenderFractal Proc	
; This procdure renders the image of the fractal, Pascals Triangle. Perhaps the best example 
; of perfect order out of absolutly random chaos.
; The fractal is generated by starting at any point, then for each iteration of the loop you 
; pick one of the three points at random and move to a position half way between current point
; and the chosen corner. You then plot a pixel at that location.

; The method of selecting the postion half way is optimised so I'll explain it. The obvious
; method is to get the distance from the current point to the corner, half that value and add 
; it to the current point. So that equation for x would be:
; CurX + (CornerX - CurX)/2
; Those who like maths may sopt that this can be shortened to:
; (2CurX + CornerX - CurX)/2 => (CurX + CornerX)/2
; An identical equation works for the y coords.

; Note that in a DIB Section the origion (0,0) is the bottom left corner. Not the top left 
; as in most windows GDI functions.

	mov eax,rect.right		; eax = window width.
	shr eax,1				; eax = width/2.
	mov TriPoint[0].x,eax	; x coord of first point = eax = witdh/2.
	lea eax,[eax*2][-5]     ; eax = (eax*2)-5 = width-5.
	mov TriPoint[8].x,eax   ; x coord of 2nd point = eax, i.e. 5 pixels from right side.
	mov TriPoint[16].x,5	; x coord of 3rd point = 5, i.e. 5 pixels from left side.
	mov eax,rect.bottom		; eax = height.
	sub eax,5				; eax = height-5.
	mov TriPoint[0].y,eax	; y coord of 1st point = eax = height-5. i.e. 5 from top.
	mov TriPoint[8].y,5		; y coord of 2nd point 5 from bottom.
	mov TriPoint[16].y,5 	; y coord of 3rd point 5 from bottom.

	mov ebx,TriPoint[0].x	; ebx will hold current x throughout loop, initalise to point 1.
	mov ecx,TriPoint[0].y	; ebx will hold current y throughout loop. 

	mov edi,pBb				; edi points to bitmap bits.
	mov esi,100000			; esi acts as loop counter. Note higher esi = better image & slower

	rLp:call Rnd3Bit		; Get random 3 bit number.
		and eax,3			; convert to num between 0-3.
		jz rLp				; if 0 then get new number. (Only 3 points, not 4)
		
		add ebx,TriPoint[eax*8][-8].x	; CurX = CurX + CornerX
		shr ebx,1						; CurX = (CurX + CornerX)/2
		add ecx,TriPoint[eax*8][-8].y	; CurY = CurY + CornerY
		shr ecx,1						; CurY = (CurY + CornerY)/2

		mov eax,rect.right
		xor edx,edx
		mul ecx							; eax = CurY * width
		add eax,ebx						; eax = eax + Cur X = (CurY * width) + CurX

		mov dword ptr [edi][eax*4],0FFFFFFh	; Set Pixel to White
	dec esi					; decrement counter
	jnz rLp					; repeat loop if unfinished
ret
RenderFractal EndP

ALIGN 4
Start:
lea edi,wc						
xor eax,eax						
mov ecx,(sizeof WNDCLASSEX)/4	
rep stosd						; Zero wc WNDCLASSEX Struct

invoke GetModuleHandle,eax
mov gIst,eax
mov wc.hInstance,eax
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style,CS_OWNDC or CS_HREDRAW or CS_VREDRAW
mov wc.lpszClassName,offset ClassName
mov wc.lpfnWndProc,offset WinProc
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
mov wc.hbrBackground,COLOR_WINDOW+1
invoke RegisterClassEx,ADDR wc

xor eax,eax
invoke CreateWindowEx,0,ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,\
					  10,10,300,200,eax,eax,gIst,eax
mov gWnd,eax					; Store handle in ase its needed later.

push eax
push SW_SHOWNORMAL
push eax
call ShowWindow
call UpdateWindow

ml:	xor eax,eax
	lea edi,msg
	invoke GetMessage,edi,eax,eax,eax
	test eax,eax
	jz qm
		push edi
		push edi
		call TranslateMessage
		call DispatchMessage
jmp ml
	ALIGN 4
qm:	mov eax,msg.wParam
	invoke ExitProcess,eax
END Start

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久久久 | 福利一区福利二区| 亚洲影视在线播放| 综合分类小说区另类春色亚洲小说欧美| 2019国产精品| 久久你懂得1024| 国产欧美日韩亚州综合 | 成人免费电影视频| 国产黑丝在线一区二区三区| 国产二区国产一区在线观看| 国产精品一区二区视频| 国产乱码一区二区三区| 国产成人日日夜夜| 99视频一区二区三区| 色女孩综合影院| 欧美亚洲综合色| 日韩一区二区麻豆国产| 26uuu国产电影一区二区| 国产亚洲美州欧州综合国| 欧美国产视频在线| 亚洲电影第三页| 六月丁香综合在线视频| 国产成人欧美日韩在线电影| 91免费观看视频在线| 欧美一卡二卡三卡四卡| 日韩欧美中文字幕一区| 日本一区二区在线不卡| 一区av在线播放| 日本大胆欧美人术艺术动态| 国产乱妇无码大片在线观看| 色狠狠一区二区三区香蕉| 欧美一级片免费看| 国产精品久久久久久久午夜片 | 日韩av一区二区在线影视| 国产老肥熟一区二区三区| 色综合视频一区二区三区高清| 91精品国产欧美一区二区| 欧美国产亚洲另类动漫| 天堂va蜜桃一区二区三区 | 亚洲综合丁香婷婷六月香| 久久国产精品无码网站| av电影天堂一区二区在线 | 国产成人免费视频网站 | 亚洲欧美综合色| 性感美女极品91精品| 欧美日韩aaa| 久久久青草青青国产亚洲免观| 亚洲精品亚洲人成人网| 国产裸体歌舞团一区二区| 欧美群妇大交群的观看方式| 国产精品女人毛片| 精品一区二区三区影院在线午夜| 一本一本久久a久久精品综合麻豆| 日韩三级视频中文字幕| 亚洲一级电影视频| av在线一区二区| 久久久久国产精品厨房| 免费视频最近日韩| 欧美日韩一区二区三区视频| 国产精品福利av| 国产精品综合一区二区| 日韩三级视频在线观看| 婷婷开心激情综合| 欧美亚洲国产怡红院影院| 国产精品美女久久久久aⅴ| 韩国av一区二区三区在线观看| 欧美伊人久久久久久午夜久久久久| 亚洲国产精品国自产拍av| 国产一区二区91| 日韩欧美在线影院| 看电影不卡的网站| 欧美一区二区精品在线| 爽爽淫人综合网网站| 欧美综合视频在线观看| 亚洲黄色av一区| 在线免费不卡视频| 一区二区三区在线不卡| 欧美在线看片a免费观看| 综合久久久久久| 在线一区二区三区四区| 亚洲乱码中文字幕| 在线看国产一区| 无码av中文一区二区三区桃花岛| 欧美三电影在线| 五月天一区二区| 精品日韩欧美一区二区| 国产激情一区二区三区| 国产精品久久午夜| 一本到三区不卡视频| 亚洲sss视频在线视频| 欧美一级夜夜爽| 国产精品一区免费在线观看| 国产日韩精品一区二区浪潮av| 国产成人欧美日韩在线电影| 日韩一区在线看| 欧美日韩国产另类不卡| 国内久久精品视频| 综合av第一页| 欧美丰满美乳xxx高潮www| 免费人成精品欧美精品| 国产人伦精品一区二区| 91视频国产资源| 日韩avvvv在线播放| 久久亚洲欧美国产精品乐播| 91啦中文在线观看| 老司机精品视频线观看86| 中文字幕中文在线不卡住| 欧美伦理视频网站| 成人性色生活片| 亚洲成年人网站在线观看| 精品国产在天天线2019| 色综合久久久久综合体桃花网| 免费观看在线综合| 最新国产精品久久精品| 91精品国产色综合久久ai换脸 | 91精品国产91久久久久久一区二区 | 成人一区二区在线观看| 亚洲mv大片欧洲mv大片精品| 亚洲精品一区二区三区四区高清| voyeur盗摄精品| 精品一区二区在线免费观看| 亚洲激情中文1区| 精品对白一区国产伦| 色综合久久88色综合天天免费| 久久se这里有精品| 亚洲一区二区三区美女| 国产拍揄自揄精品视频麻豆| 5858s免费视频成人| 97aⅴ精品视频一二三区| 久久er99热精品一区二区| 亚洲在线视频一区| 自拍偷自拍亚洲精品播放| 久久精品免费在线观看| 日韩久久精品一区| 欧美三级一区二区| 色综合天天综合给合国产| 国产一区在线观看麻豆| 日韩av电影天堂| 亚洲国产视频一区二区| 一区二区三区毛片| 亚洲女与黑人做爰| 国产精品国产三级国产aⅴ原创| 久久综合久色欧美综合狠狠| 91精品综合久久久久久| 欧美三级日韩三级| 欧美亚州韩日在线看免费版国语版 | 一个色综合av| 亚洲摸摸操操av| 国产精品福利一区| 亚洲天堂精品在线观看| 国产精品色在线观看| 中文字幕欧美日本乱码一线二线| 国产色爱av资源综合区| 久久天天做天天爱综合色| 2020国产精品久久精品美国| 26uuu久久综合| 久久久亚洲精品一区二区三区| 精品久久国产字幕高潮| 精品国产91久久久久久久妲己| 91精品国产91久久综合桃花| 日韩欧美资源站| 久久综合999| 欧美国产乱子伦 | 色婷婷亚洲综合| 欧美亚洲国产怡红院影院| 欧美日韩一区二区欧美激情| 在线综合视频播放| 欧美一级二级在线观看| 久久嫩草精品久久久久| 国产精品美女久久久久久久网站| 国产精品家庭影院| 亚洲一区中文在线| 久久精品国产成人一区二区三区 | 色综合久久综合网97色综合 | 人禽交欧美网站| 久久99久久精品欧美| 国产成人亚洲综合色影视| 91丨九色丨国产丨porny| 欧美日韩在线电影| 日韩精品一区二区三区四区视频| 国产亚洲综合av| 亚洲自拍都市欧美小说| 老司机精品视频线观看86 | 一区二区高清免费观看影视大全| 亚洲综合色视频| 狠狠色丁香婷婷综合| gogo大胆日本视频一区| 制服丝袜日韩国产| 国产三级一区二区| 亚洲最大成人网4388xx| 乱一区二区av| 欧美中文字幕一二三区视频| 欧美成人一级视频| 亚洲欧美国产三级| 国产一区二区三区黄视频| 91亚洲精品一区二区乱码| 日韩精品一区二区三区三区免费| 国产精品久久毛片| 激情深爱一区二区| 欧美日韩视频专区在线播放|