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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? proc32.ash

?? 一個x86匯編器,能在一些算法優(yōu)化上能其很大作用
?? ASH
字號:
;--------=========xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=========--------
;
;   Copyright (C) 1999 by Andrew Zabolotny
;   Miscelaneous NASM macros that makes use of new preprocessor features
; 
;   This library is free software; you can redistribute it and/or
;   modify it under the terms of the GNU Library General Public
;   License as published by the Free Software Foundation; either
;   version 2 of the License, or (at your option) any later version.
; 
;   This library is distributed in the hope that it will be useful,
;   but WITHOUT ANY WARRANTY; without even the implied warranty of
;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;   Library General Public License for more details.
; 
;   You should have received a copy of the GNU Library General Public
;   License along with this library; if not, write to the Free
;   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;
;--------=========xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=========--------

;   The macros in this file provides support for writing 32-bit C-callable
;   NASM routines. For a short description of every macros see the
;   corresponding comment before every one. Simple usage example:
;
;	proc	sin,1
;		targ	%$angle
;		fld	%$angle
;		fsin
;	endproc	sin

%ifndef __PROC32_ASH__
%define __PROC32_ASH__

[WARNING -macro-selfref]

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Mangle a name to be compatible with the C compiler
; Arguments:
;   The name
; Example:
;		cname (my_func)
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%ifdef EXTERNC_UNDERSCORE
		%define	cname(x) _ %+ x
%else
		%define	cname(x) x
%endif

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Import an external C procedure definition
; Arguments:
;   The name of external C procedure
; Example:
;		cextern	printf
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		cextern	1
		%xdefine %1 cname(%1)
	%ifidni __OUTPUT_FORMAT__,obj
		extern	%1:wrt FLAT
	%else
		extern	%1
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Export an C procedure definition
; Arguments:
;   The name of C procedure
; Example:
;		cglobal	my_printf
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		cglobal	1
		%xdefine %1 cname(%1)
		global	%1
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Misc macros to deal with PIC shared libraries
; Comment:
;   Note that we have a different syntax for working with and without
;   PIC shared libraries. In a PIC environment we should load first
;   the address of the variable into a register and then work through
;   that address, i.e: mov eax,myvar; mov [eax],1
;   In a non-PIC environment we should directly write: mov myvar,1
; Example:
;		extvar	myvar
;		GetGOT
;	%ifdef PIC
;		mov	ebx,myvar	; get offset of myvar into ebx
;	%else
;		lea	ebx,myvar
;	%endif
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%ifdef PIC
		cextern	_GLOBAL_OFFSET_TABLE_
	%macro	GetGOT	0
		%ifdef .$proc.stkofs
			%assign .$proc.stkofs .$proc.stkofs+4
		%endif
		call	%$Get_GOT
	%$Get_GOT:
		pop	ebx
		add	ebx,_GLOBAL_OFFSET_TABLE_ + $$ - %$Get_GOT wrt ..gotpc
	%endmacro
	%macro	extvar	1
		cextern	%1
		%xdefine %1 [ebx+%1 wrt ..got]
	%endmacro
%else
	%define	GetGOT
	%macro	extvar	1
		cextern	%1
	%endmacro
%endif

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Begin a procedure definition
;   For performance reasons we don't use stack frame pointer EBP,
;   instead we're using the [esp+xx] addressing. Because of this
;   you should be careful when you work with stack pointer.
;   The push/pop instructions are macros that are defined to
;   deal correctly with these issues.
; Arguments:
;   First argument - the procedure name
;   Second optional argument - the number of bytes for local variables
;   The following arguments could specify the registers that should be
;   pushed at beginning of procedure and popped before exiting
; Example:
;   proc	MyTestProc
;   proc	MyTestProc,4,ebx,esi,edi
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		proc	1-3+ 0
		cglobal	%1
		%push	%1
		align	16
%1:
		%xdefine %$proc.name %1
	; total size of local arguments
		%assign %$proc.locsize (%2+3) & 0xFFFC
	; offset from esp to argument
		%assign	%$proc.argofs 4+%$proc.locsize
	; additional offset to args (tracks push/pops)
		%assign	.$proc.stkofs 0
	; offset from esp to local arguments
		%assign %$proc.locofs 0
	; Now push the registers that we should save
		%define %$proc.save %3
	%if %$proc.locsize != 0
		sub	esp,%$proc.locsize
	%endif
		push	%$proc.save
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Declare an argument passed on stack
;   This macro defines two additional macros:
;     first (with the name given by first argument) - [esp+xx]
;     second (with a underscore appended to first argument) - esp+xx
; Arguments:
;   First argument defines the procedure argument name
;   Second optional parameter defines the size of the argument
;   Default value is 4 (a double word)
; Example:
;		arg	.my_float
;		arg	.my_double,8
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		arg	1-2 4
	%ifndef %$proc.argofs
		%error	"`arg' not in a proc context"
	%else
	; Trick: temporary undefine .$proc.stkofs so that it won't be expanded
		%assign	%%. .$proc.stkofs
		%undef .$proc.stkofs
		%xdefine %{1}_ esp+%$proc.argofs+.$proc.stkofs
		%xdefine %1 [esp+%$proc.argofs+.$proc.stkofs]
		%assign .$proc.stkofs %%.
		%assign %$proc.argofs %2+%$proc.argofs
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Declare an local variable
;     first (with the name given by first argument) - [esp+xx]
;     second (with  a slash prefixing the first argument) - esp+xx
; Arguments:
;   First argument defines the procedure argument name
;   Second optional parameter defines the size of the argument
;   Default value is 4 (a double word)
; Example:
;		loc	.int_value
;		loc	.double_value,8
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		loc	1-2 4
	%ifndef %$proc.locofs
		%error	"`loc' not in a proc context"
	%elif %$proc.locofs + %2 > %$proc.locsize
		%error	"local stack space exceeded"
	%else
		%assign	%%. .$proc.stkofs
		%undef .$proc.stkofs
		%xdefine %{1}_ esp+%$proc.locofs+.$proc.stkofs
		%xdefine %1 [esp+%$proc.locofs+.$proc.stkofs]
		%assign .$proc.stkofs %%.
		%assign %$proc.locofs %$proc.locofs+%2
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Get the type of given size into context-local variable %$type
; Arguments:
;   Size of type we want (1,2,4,8 or 10)
; Example:
;		type	4	; gives "dword"
;		type	10	; gives "tword"
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		type	1
	%if %1 = 1
		%define	%$type byte
	%elif %1 = 2
		%define	%$type word
	%elif %1 = 4
		%define	%$type dword
	%elif %1 = 8
		%define	%$type qword
	%elif %1 = 10
		%define	%$type tword
	%else
		%define %$. %1
		%error "unknown type for argument size %$."
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Same as `arg' but prepends "word", "dword" etc (typed arg)
;     first (with the name given by first argument) - dword [esp+xx]
;     second (with  a slash prefixing the first argument) - esp+xx
; Arguments:
;   Same as for `arg'
; Example:
;		targ	.my_float	; .my_float is now "dword [esp+xxx]"
;		targ	.my_double,8	; .my_double is now "qword [esp+xxx]"
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		targ	1-2 4
	%ifndef %$proc.argofs
		%error	"`targ' not in a proc context"
	%else
		arg	%1,%2
		type	%2
		%assign	%%. .$proc.stkofs
		%undef .$proc.stkofs
		%xdefine %1 %$type %1
		%assign .$proc.stkofs %%.
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Same as `loc' but prepends "word", "dword" etc (typed loc)
;     first (with the name given by first argument) - dword [esp+xx]
;     second (with  a slash prefixing the first argument) - esp+xx
; Arguments:
;   Same as for `loc'
; Example:
;		tloc	int_value
;		tloc	double_value,8
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		tloc	1-2 4
	%ifndef %$proc.locofs
		%error	"`tloc' not in a proc context"
	%else
		loc	%1,%2
		type	%2
		%assign	%%. .$proc.stkofs
		%undef .$proc.stkofs
		%xdefine %1 %$type %1
		%assign .$proc.stkofs %%.
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Finish a procedure
;   Gives an error if proc/endproc pairs mismatch
;   Defines an label called __end_(procedure name)
;   which is useful for calculating function size
; Arguments:
;   (optional) The name of procedure
; Example:
;   endproc	MyTestProc
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%push	tmp	; trick: define a dummy context to avoid error in next line
%macro		endproc	0-1 %$proc.name
	%ifndef %$proc.argofs
		%error "`endproc' not in a proc context"
	%elifnidn %$proc.name,%1
		%define %$. %1
		%error "endproc names mismatch: expected `%$proc.name'"
		%error "but got `%$.' instead"
	%elif %$proc.locofs < %$proc.locsize
		%error	"unused local space declared (used %$proc.locofs, requested %$proc.locsize)"
	%else
%$exit:
	; Now pop the registers that we should restore on exit
		pop	%$proc.save
		%if %$proc.locsize != 0
		add	esp,%$proc.locsize
		%endif
		ret
__end_%1:
		%pop
	%endif
%endmacro
%pop

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   A replacement for "push" for use within procedures
; Arguments:
;   any number of registers which will be push'ed successively
; Example:
;		push	eax,ebx,ecx,edx
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		push	0-*
; dummy comment to avoid problems with "push" on the same line with a label
	%rep	%0
		push	%1
		%rotate	1
		%assign .$proc.stkofs .$proc.stkofs+4
	%endrep
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   A replacement for "pop" for use within procedures
; Arguments:
;   any number of registers which will be pop'ed in reverse order
; Example:
;		pop	eax,ebx,ecx,edx
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		pop	0-*
; dummy comment to avoid problems with "pop" on the same line with a label
	%rep	%0
		%rotate	-1
		pop	%1
		%assign .$proc.stkofs .$proc.stkofs-4
	%endrep
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Replacements for "pushfd" and "popfd" that takes care of esp
; Example:
;		pushfd
;		popfd
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		pushfd	0
		pushfd
		%assign .$proc.stkofs .$proc.stkofs+4
%endmacro
%macro		popfd	0
		popfd
		%assign .$proc.stkofs .$proc.stkofs-4
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Exit from current procedure (optionally on given condition)
; Arguments:
;   Either none or a condition code
; Example:
;		exit
;		exit	nz
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		exit	0-1 mp
		j%1	near %$exit
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   start an conditional branch
; Arguments:
;   A condition code
;   second (optional) argument - "short" (by default - "near")
; Example:
;		if	nz
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		if	1-2 near
; dummy comment to avoid problems with "if" on the same line with a label
		%push	if
		j%-1	%2 %$elseif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   define the "else" branch of a conditional statement
; Arguments:
;   optionaly: "short" if jmp to endif is less than 128 bytes away
; Example:
;		else
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		else	0-1
	%ifnctx if
		%error	"`else' without matching `if'"
	%else
		jmp	%1 %$endif
%$elseif:
		%define	%$elseif_defined
	%endif
%endmacro

;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
; Summary:
;   Finish am conditional statement
; Arguments:
;   none
; Example:
;		endif
;-----======xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx======-----
%macro		endif	0
	%ifnctx if
		%error	"`endif' without matching `if'"
	%else
		%ifndef %$elseif_defined
%$elseif:
		%endif
%$endif:
		%pop
	%endif
%endmacro

%endif ; __PROC32_ASH__

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂蜜桃一区二区三区| 久久久久久黄色| 丁香婷婷综合激情五月色| 亚洲黄色av一区| 国产日韩av一区| 日韩午夜在线影院| 欧美日韩免费观看一区二区三区| 国内一区二区视频| 久久综合网色—综合色88| 高清成人免费视频| 国产一区二区久久| 久久99精品久久久久久久久久久久 | 国产精品美女久久久久aⅴ| 色94色欧美sute亚洲线路一ni| 久久精品国产99国产精品| 日韩精品成人一区二区在线| 一二三区精品视频| 一区二区激情视频| 一区二区在线电影| 亚洲精品成人在线| 亚洲黄一区二区三区| 国产精品视频麻豆| 国产精品久久三区| 中文字幕在线不卡一区| 亚洲欧美自拍偷拍| 2020国产精品| 国产色综合久久| 中文天堂在线一区| 最新日韩在线视频| 国产精品进线69影院| 欧美高清一级片在线观看| 精品电影一区二区| 久久久久99精品国产片| 国产欧美日韩综合精品一区二区 | 精品免费国产一区二区三区四区| 欧美人与禽zozo性伦| 337p亚洲精品色噜噜| 日韩精品最新网址| 久久久久久久久久久久久女国产乱| 久久综合九色综合欧美就去吻| 精品免费国产一区二区三区四区| 久久久精品日韩欧美| 亚洲欧洲日韩在线| 亚洲国产wwwccc36天堂| 日日夜夜免费精品| 国产精品99久久久久久有的能看| 99精品国产视频| 欧美色视频一区| 国产亚洲精品中文字幕| 有坂深雪av一区二区精品| 亚洲超碰97人人做人人爱| 日韩高清一级片| 免费观看久久久4p| 97成人超碰视| 日韩欧美色电影| 亚洲视频一二区| 奇米精品一区二区三区在线观看| 国产成人精品免费| 欧美日韩综合色| 国产精品入口麻豆九色| 亚洲制服丝袜在线| 国产精一区二区三区| 色猫猫国产区一区二在线视频| 欧美一区二区三区四区在线观看 | 韩国一区二区视频| 91久久精品一区二区三| 久久先锋影音av鲁色资源| 亚洲欧美一区二区三区国产精品| 欧美a一区二区| 99国产精品国产精品毛片| 日韩一卡二卡三卡| 一区二区三区蜜桃| heyzo一本久久综合| 欧美成人一区二区三区片免费 | 成人国产视频在线观看| 日韩一区二区三区免费观看| 亚洲日本丝袜连裤袜办公室| 韩国视频一区二区| 日韩小视频在线观看专区| 一区二区视频在线| 成人精品国产一区二区4080| 欧美成人精品1314www| 午夜精品成人在线视频| 91亚洲精品一区二区乱码| 久久久精品影视| 麻豆视频观看网址久久| 欧洲人成人精品| 亚洲精品久久久蜜桃| 成人av在线网| 国产精品国产自产拍高清av王其| 国模娜娜一区二区三区| 欧美理论在线播放| 午夜国产精品一区| 欧美精品久久一区| 亚洲gay无套男同| 欧美精品国产精品| 亚洲午夜免费视频| 91国产成人在线| 亚洲影视在线播放| 91精品国产综合久久精品麻豆| 亚洲一区二区精品视频| 欧美日韩一区高清| 亚洲18色成人| 在线播放一区二区三区| 日韩成人伦理电影在线观看| 国产福利精品一区二区| 久久久夜色精品亚洲| 麻豆成人久久精品二区三区红| 91精品国产综合久久久久久久| 日韩精品一区第一页| 日韩精品影音先锋| 国产伦理精品不卡| 国产精品久久三区| 色婷婷精品久久二区二区蜜臀av | 亚洲一区二区三区三| 91精品国产综合久久小美女| 性做久久久久久免费观看| 欧美三级韩国三级日本一级| 亚洲免费在线观看视频| 91精品国产手机| 国产成人精品免费一区二区| 亚洲欧洲av色图| 日韩欧美三级在线| 成人久久视频在线观看| 亚洲成人在线观看视频| 欧美不卡一区二区| 97久久精品人人做人人爽50路 | 中文字幕在线不卡视频| 欧美日韩亚洲综合在线| 久久超碰97中文字幕| 国产精品对白交换视频| 欧美精品一级二级| 91在线视频免费91| 日精品一区二区三区| 国产日产亚洲精品系列| 欧美日韩精品一区二区三区 | 日韩有码一区二区三区| 久久久久国产精品麻豆| 在线观看免费成人| 国产毛片精品视频| 日韩精品国产精品| 亚洲精品一二三四区| 日韩欧美黄色影院| 欧美亚洲一区二区在线| 国产成人精品影视| 久久黄色级2电影| 亚洲一区二区精品3399| 国产欧美日韩不卡| 日韩一区二区免费在线观看| 国产电影精品久久禁18| 亚洲精品自拍动漫在线| 久久嫩草精品久久久精品一| 欧美性xxxxxx少妇| 99久久免费视频.com| 美腿丝袜亚洲色图| 亚洲国产日韩综合久久精品| 中文字幕第一区二区| www日韩大片| 日韩免费看的电影| 欧美三级日韩三级国产三级| 成人短视频下载| 韩国理伦片一区二区三区在线播放| 欧美激情资源网| 日韩美女视频在线| 91精品国产高清一区二区三区蜜臀 | 欧美精品亚洲一区二区在线播放| 91丨porny丨国产| 91老师国产黑色丝袜在线| 91福利视频久久久久| 欧美亚洲愉拍一区二区| 欧美一区二区私人影院日本| 91精品国产综合久久福利| 欧美成人vr18sexvr| 国产精品日日摸夜夜摸av| 一卡二卡三卡日韩欧美| 石原莉奈在线亚洲二区| 九九**精品视频免费播放| 福利电影一区二区| 色视频欧美一区二区三区| 911精品产国品一二三产区| 欧美v日韩v国产v| 国产精品久久久久久久久免费桃花 | 处破女av一区二区| 欧美色精品在线视频| 久久综合久久综合久久| 国产精品嫩草久久久久| 天使萌一区二区三区免费观看| 久久www免费人成看片高清| 成人99免费视频| 日韩欧美国产一区在线观看| 国产精品天干天干在观线| 一区二区成人在线视频| 看片的网站亚洲| 91成人免费在线视频| 国产婷婷色一区二区三区四区| 亚洲一二三区不卡| 国产不卡在线播放| 日韩欧美一区二区在线视频| 最新日韩在线视频| 国产精品一区不卡|