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

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

?? ssdeclar.asm

?? Dos6.0
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
	inc	ax
	jz	OMError
	and	ax,not 1		;Round up to next word
;Make sure it's not too big
	mov	cx,ax
	add	ax,[bp-SsCom].COM_oValCur	;Get oValue
        jc	OMError
	call	ChkComSize
 	jc	OkRet				;Return with CY set if error
	add	bx,[bp-SsCom].COM_bdType.BD_pb	;bx = pTypCur
	xchg	ax,cx
	ret

ExtendType:
;Grow the COMMON type table
;
;Inputs:
;	bx = new length
;	dx = oTyp
;Outputs:
;	CY set if failed (error reported)
;Preserves:
;	bx,cx,dx

	push	dx
	push	cx
	push	bx
	inc	bx
	inc	bx				;Need at least one more word
	cmp	dx,ET_FS			; Record? Fixed?
	.erre	ET_FS EQ ET_MAX 		
	jb	SmallTyp			
	inc	bx				; FS have cbFixed
	inc	bx				;Records have oRS too
SmallTyp:
.errnz	COM_bdType - SsCom
	push	bp				;Owner
	push	bx				;New size
	call	BdRealloc			;Extend COMMON type table
	call	OMEcheck			;See if it worked
	pop	bx				;oTypCur
	pop	cx
	pop	dx
	ret

	page
;***
;Ss_ReDim - Scan opReDim
;
;Purpose:
;
;   Scan opReDim.
;
;   The opReDim opcode comes after a AIdLd opcode.  This scan
;   routine receives a scan stack entry describing the referenced
;   variable as follows:
;
;		oTx	    Always immediately preceeding point
;		oType	    <-- (Top of stack)
;
;   Tasks include:
;
;	1. Bind to executor
;	2. Coerce remaining arguments to integers
;	3. if argument is the first reference to an array
;	   then set whether the array is $STATIC or $DYNAMIC
;	4. Test for REDIMing a $STATIC array error.
;
;Input:
;
;   ax	  = executor
;   bx	  = 2 * opcode
;   es:si = pcode source address
;   es:di = pcode emission address
;
;Output:
;
;   si, di updated
;
;Modifies:
;
;Exceptions:
;
;   Ss_Error
;
;******************************************************************

	page

SsProc	ReDim
	STOSWTX 			;Emit the executor
	dec	si
	dec	si			;Report errors on preceding AIdLd

	pop	ax			;Discard oType of array
	DbAssertTst ax,z,ST_Array?,SCAN,<Ss_ReDim: Non-array>
	pop	bx			;BX = oTx after exAIdLd
	call	MakeArrayRef		;Convert to exAdRf

	    mov     bx,PTRTX[si-2]		;BX = oVar
	    add     bx,[mrsCur.MRS_bdVar.BD_pb] ;BX = pVar

	test	byte ptr [bx].VAR_fStat,FV_STATIC ;Is this a static array?
	jnz	ReDimStatic		;REDIM stmt. $Static arrays not allowed.
ReDimX:
	inc	si
	inc	si
	jmp	[ScanRet]		;Scan next opcode

ReDimStatic:
	mov	ax,MSG_OBA		;Array already dimensioned
	call	SsError
	jmp	ReDimX

	page
;SetArrayType
;
;Purpose:
;
;   Routine to set FV_STATIC and FV_STATICSET in an array var entry.
;
;   This routine sets FV_STATIC to the value in f_StaticCalc iff
;   FV_STATICSET is FALSE.  It then ensures that FV_STATICSET is TRUE.
;
;Input:
;
;   f_StaticCalc = TRUE if type is $STATIC, else FALSE
;   bx		 = pVariable for an array variable
;
;Outputs:
;
;   CY set if first reference
;
;Preserves:
;
;   all


	public	SetArrayType
SetArrayType:
	or	[SsFlags],SSF_HaveDimmed	;Had a DIM: no OPTION BASE now
SetArrayTypeNoDim:
	DbChk	pVar,bx 			;Verify that this is a variable
SetArrayTypePublic:
	TestM	[bx].VAR_flags,FV_STATICSET	
						;Determine if the $STATIC flag
						; is already set for this array.
	jnz	SetArrayTypeX			;Already set - nothing to do.

	;Note:	In EB, all declarations at the module
	;level are shared and all at the the procedure level
	;are not therefore there need not be two checks.

	    ;Don't set flags for shared variables while scanning proc

	    TestM   [bx].VAR_flags,FVSHARED	; Shared variable?
	    jz	    SetStatic			;If not, set bit
	    test    byte ptr [grs.GRS_oRsCur+1],80H ;Scanning module level?
	    jnz     SetArrayTypeX		;If not, don't set bit
SetStatic:

	.errnz	FALSE
	cmp	[f_StaticCalc],FALSE
	je	@F				;$DYNAMIC, leave FV_STATIC clear

	; Array is dynamic if it lives on the procedure frame

	    TestM   [bx].VAR_flags,FRAME	; In the stack?
	    jz	    @F				; Brif array is on frame
	or	byte ptr [bx].VAR_fStat,FV_STATIC	;Set $STATIC
@@:
	or	WORD PTR [bx].VAR_Flags,FV_STATICSET	; Indicate FV_STATIC is set.
	stc
SetArrayTypeX:
	ret



sEnd	SCAN


sBegin	CP

assumes cs, CP

;***
;ChainCommon - prepare blank common for chaining
;
;Purpose:
;
;   Module type tables will be destroyed by chaining, so the
;   COMMON type table must stop referring to it.  Instead, user
;   type entries are replaced with a flag and the size of the type.
;   Type checking against the chained-to program will only compare
;   record sizes.
;
;Preserves:
;
;   dx
;
;Modifies:
;
;   si
;
;***********************************************************************
;
cProc	ChainCommon,<PUBLIC,FAR,NODATA>,<SI>
cBegin
	mov	si,[grs.GRS_bdtComBlk.BD_pb]	;pBlankCommon
	DbAssertRel [si].COM_ogNam,z,NULL,CP,<ChainCommon: 1st block in bdtComBlk is not for blank COMMON> 
	mov	cx,[si].COM_bdType.BD_cbLogical	;Size of type table
	mov	si,[si].COM_bdType.BD_pb	;pTypeTable
	add	cx,si			;Ending address
LookForRecord:
	cmp	cx,si			;Reach end?
	jbe	CommonReady
	lodsw
	cmp	ah,cDimsFlag+StaticFlag	;Static array?
	jz	SkipStatic
	cmp	ah,cDimsFlag		;Array count?
	jnz	Element
GetElement:
	lodsw				;Skip count, do element
Element:
	cmp	ah,LengthFlag		;Already converted?
	jz	SkipOver
.errnz	ET_MAX - ET_FS			; ensure FS is max type
	cmp	ax,ET_MAX		;Record type or fixed length string?
	jb	LookForRecord		; If not, look at next
;Have a record or fixed length string
	xchg	bx,ax			;Save oTyp in bx
	lodsw				;Get oRS
	je	LookForRecord		; brif fixed length string
	xchg	bx,ax			;oTyp to ax, oRS to bx
	call	CbTypOTypOMrs		;Get its size
	mov	byte ptr [si-3],LengthFlag	;Flag as size-only entry
	mov	[si-2],ax
	jmp	LookForRecord

SkipStatic:
	cbw				;ah=0
	shl	ax,1
	shl	ax,1			;Size of dimensions
	add	ax,(size AD-1)		;Skip AD
	add	si,ax			;Point to element
	jmp	GetElement

SkipOver:
	lodsw				;Skip over length
	jmp	LookForRecord

CommonReady:
cEnd

;***
;SsTrimCommon
;
;Purpose:
;
;   After chaining, blank COMMON could be larger than actually used.
;   This routine trims it back, releasing any owners.  The value table
;   is not actually shortened (it could be in a UL), but the type table
;   is, and that's what counts.
;
;   THIS ROUTINE MUST NOT BE CALLED IF SCAN ERROR OCCURED
;
;Inputs:
;
;   [oTypComMax] = max size of type table
;   [oValComMax] = max size of value table
;
;***********************************************************************
	public	SsTrimCommon

SsTrimCommon:
	push	si
	push	di
	mov	si,[grs.GRS_bdtComBlk.BD_pb]	;pBlankCommon
	cmp	[si].COM_bdValue.BD_cbPhysical,UNDEFINED ; QuickLib common?
	jz	SharedQLB			; brif so -- don't delete
						; or zero-fill common
	mov	cx,[si].COM_bdType.BD_cbLogical
	mov	bx,[si].COM_bdValue.BD_pb	
	add	bx,[oValComMax]
	mov	si,[si].COM_bdType.BD_pb	;Pointer to type table
	add	cx,si				;Point last+1 of type table
	add	si,[oTypComMax]
	call	DelCommon
	mov	si,[grs.GRS_bdtComBlk.BD_pb]	;pBlankCommon
;Zero fill trimmed part of value table
	mov	di,[oValComMax]
	push	ds
	pop	es				;Make sure es=ds
	mov	cx,[si].COM_bdValue.BD_cbLogical
	sub	cx,di				;Amount to zero fill


	add	di,[si].COM_bdValue.BD_pb
	shr	cx,1
	xor	ax,ax
rep	stosw

SharedQLB:					
	mov	ax,[oTypComMax] 		
	mov	[si].COM_bdType.BD_cbLogical,ax ; Trim the type table

	pop	di
	pop	si
	ret


;***
;SsAdjustCommon
;
;Purpose:
;
;   Called whenever a QBI-specific COMMON value table is moved (by heap
;   management code).  Updates the backpointers to all SD's and string
;   array descriptors found in the value table for the given COMMON block.
;
;Inputs:
;
;   bx = pointer to COM_bdType field
;   di = adjustment factor to be passed on runtime
;	    if di=0, delete all SD's and arrays
;
;***********************************************************************

DelCommon:
;si = starting point in type table
;bx = starting point in value table
;cx = ending point in type table
	xor	di,di
	push	si
	jmp	short TestEndCommon

	public	SsAdjustCommon
SsAdjustCommon:
	push	si
	mov	cx,[bx].BD_cbLogical
	mov	si,[bx].BD_pb		;Pointer to type table
	mov	bx,[bx-COM_bdType].COM_bdValue.BD_pb
	add	cx,si			;Point last+1 of type table
TestEndCommon:
	cmp	si,cx			;End of type table?
	jae	AdjustX
	lodsw				;Get type table entry
	cmp	ah,cDimsFlag+StaticFlag	;Static array?
	jz	AdjustStatic
	cmp	ah,cDimsFlag		;Array?
	jz	AdjustArray
	cmp	ax,ET_MAX		; Record ?
	ja	AdjustRecord		; Brif yes
	.erre	ET_MAX LE 0100h 	; Assure we can use AL
	cmp	al,ET_SD		; String type?
	jb	NotRecord		; Brif not
	    .erre   ET_FS EQ ET_SD+1	; Assure JA is sufficient
	    .erre   ET_FS EQ ET_MAX	; Assure no new types added
	    ja	    RecWithLen		; Brif fixed string

	call	AdjustOneSD
	jmp	TestEndCommon

AdjustRecord:				
	test	ah,LengthFlag		;Has record been crunched to length?
	jnz	RecWithLen
	push	bx
	mov	bx,[si]			;Get oMRS
	inc	si
	inc	si
	call	CbTypOTypOMrs
	pop	bx
	jmp	short AddCbTyp

AdjustX:
	pop	si
	ret

NotRecord:
	call	CbTypOTyp		;Get length of item
AddCbTyp:
	inc	ax			
	and	al,not 1		;Round even
	add	bx,ax
	jmp	TestEndCommon

RecWithLen:
	lodsw				;Get length of record or string
	jmp	AddCbTyp

AdjustStatic:
	cmp	[si].AD_fhd.FHD_hData,0	;Any space in array?
	jz	AdjustX			;In the middle of building an entry


	add	[si].AD_fhd.FHD_oData,di;Adjust pointer to array data
	cbw				;ah=0
	shl	ax,1
	shl	ax,1			;Size of dimensions
	add	ax,(size AD-1)		;Skip header
	xchg	dx,ax			;Save in dx
	mov	ax,[si].AD_fhd.FHD_cPara;Get size of array
	add	si,dx			;Point to element
	cmp	word ptr [si],ET_SD	;String array?
	jz	AdjSdStatic
	add	bx,ax
EatOTyp:
	lodsw				;Get oTyp
	cmp	ax,ET_FS		
	    .erre   ET_FS EQ ET_MAX	
	jb	TestEndCommon		
	lodsw				;Skip over oMRS/length
	jmp	TestEndCommon

AdjustArray:
	push	cx
	push	bx
	or	di,di			;Delete the array?
	jz	DelArray
	lodsw				;Get oTyp of array
	cmp	ax,ET_SD		;Array of strings?
	jne	NoAdjArray
UpdStrings:				
	push	bx			;First arg for runtime
	push	di			;2nd arg for runtime
	call	B$IAdUpd		;Have runtime do update
AddCbArray:
	pop	bx
	pop	cx
	add	bx,ComArraySize
	jmp	TestEndCommon

DelArray:
	push	bx			;First arg for runtime
	call	B$IErase		;ERASE array (no heap movement varient)
	lodsw				;Get oTyp
NoAdjArray:				
	cmp	ax,ET_FS		
	    .erre   ET_FS EQ ET_MAX	
	jb	AddCbArray		
	lodsw				;Skip over oMRS/length
	jmp	AddCbArray

AdjSdStatic:
;ax has size of array
	shr	ax,1
	shr	ax,1			;ax = no. of 4-byte SD's
	push	cx
	xchg	cx,ax			;No. of elements to cx
AdjustEachSD:
	call	AdjustOneSD
	loop	AdjustEachSD
	pop	cx
	jmp	EatOTyp

AdjustOneSD:
	push	cx
	push	bx
	push	bx			;First arg for runtime
	or	di,di
	jz	DelSD
	push	di			;2nd arg for runtime
	call	B$ISdUpd
AddCbSD:
	pop	bx
	pop	cx
	add	bx,4			;Size of SD in value table
	ret

DelSD:
	call	B$STDL			;Delete the SD
	jmp	AddCbSD

sEnd	CP

end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久| 亚洲欧洲成人自拍| 欧美日韩精品一区二区天天拍小说| 国产精品91一区二区| 国产一区三区三区| 久久精品国产在热久久| 久久精品国产一区二区三| 蜜臀精品一区二区三区在线观看| 日一区二区三区| 精品一区二区三区欧美| 国产在线精品免费av| 福利一区在线观看| 91一区一区三区| 欧美在线观看禁18| 日韩亚洲欧美在线| 国产欧美日韩精品a在线观看| 国产网红主播福利一区二区| 国产精品狼人久久影院观看方式| 国产精品嫩草99a| 亚洲一区二区三区爽爽爽爽爽| 亚洲国产sm捆绑调教视频 | 中文字幕佐山爱一区二区免费| 中文字幕欧美日韩一区| 亚洲三级在线观看| 视频一区免费在线观看| 久久99最新地址| 成人午夜在线视频| 欧美日韩国产小视频| 精品国产sm最大网站免费看| 亚洲欧美在线视频| 日本大胆欧美人术艺术动态| 国产精品小仙女| 在线观看一区二区视频| 欧美一区国产二区| 自拍偷拍亚洲激情| 国产在线国偷精品免费看| 色乱码一区二区三区88| 日韩欧美一二三四区| 中文字幕一区二区三区av| 欧美96一区二区免费视频| 不卡一区二区在线| 日韩精品一区二区三区四区视频| 亚洲欧美色图小说| 国产一区二区视频在线播放| 欧美日韩一区二区电影| 欧美韩日一区二区三区| 蜜桃av一区二区三区| 色综合视频在线观看| 久久九九国产精品| 日韩avvvv在线播放| 欧洲日韩一区二区三区| 国产精品理论片| 秋霞成人午夜伦在线观看| 国产91精品欧美| 日韩三级精品电影久久久| 夜夜精品视频一区二区| 成人美女视频在线看| 久久亚洲欧美国产精品乐播| 视频在线观看国产精品| 色呦呦国产精品| 国产精品动漫网站| 国产91高潮流白浆在线麻豆| 精品国产污污免费网站入口| 日韩精品91亚洲二区在线观看 | 3atv在线一区二区三区| 亚洲男同1069视频| av在线不卡网| 欧美国产视频在线| 国产成人精品综合在线观看| 久久网站最新地址| 精东粉嫩av免费一区二区三区| 91精品国产乱| 免费的国产精品| 欧美一级欧美一级在线播放| 亚洲6080在线| 欧美日韩国产综合草草| 午夜精品国产更新| 91精品国产丝袜白色高跟鞋| 日本成人中文字幕在线视频| 日韩欧美一区二区久久婷婷| 麻豆一区二区99久久久久| 日韩精品一区二区三区中文不卡| 麻豆精品新av中文字幕| 亚洲精品一区二区三区福利| 国精产品一区一区三区mba视频| 久久久久一区二区三区四区| 成人一区二区在线观看| 中文字幕一区二区不卡| 91麻豆精品在线观看| 亚洲高清视频中文字幕| 正在播放亚洲一区| 国产综合久久久久久鬼色| 国产无一区二区| 99久久久无码国产精品| 亚洲综合男人的天堂| 91精品国产入口| 国产精品资源在线观看| 国产精品久久久久一区二区三区| 99re热视频精品| 性久久久久久久久久久久| 欧美不卡一区二区三区| av高清不卡在线| 视频在线在亚洲| 欧美国产精品劲爆| 在线视频国内一区二区| 久久成人免费网| 日韩码欧中文字| 精品国产免费人成在线观看| 国产suv精品一区二区6| 亚洲丶国产丶欧美一区二区三区| 日韩精品一区在线| 91行情网站电视在线观看高清版| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品国产成人国产三级| 91精品在线免费观看| 不卡的av网站| 麻豆freexxxx性91精品| 亚洲欧洲中文日韩久久av乱码| 日韩三级在线观看| 欧美性大战xxxxx久久久| 国产成人精品免费一区二区| 日韩国产欧美三级| 亚洲激情综合网| 亚洲国产精品ⅴa在线观看| 欧美一区二区三区播放老司机| 99国产精品久久| 国产乱码精品一区二区三区忘忧草| 亚洲图片一区二区| 亚洲天堂久久久久久久| 国产欧美日本一区视频| 日韩亚洲欧美综合| 欧美视频日韩视频在线观看| av一二三不卡影片| 国产一区在线不卡| 久久国产精品露脸对白| 日日夜夜一区二区| 亚洲午夜一区二区三区| 中文字幕在线免费不卡| 久久精品亚洲一区二区三区浴池| 欧美一级视频精品观看| 欧美日韩一区二区三区高清| 91国偷自产一区二区三区观看| 丰满放荡岳乱妇91ww| 国产成人av一区二区三区在线观看| 美国十次综合导航| 麻豆国产精品一区二区三区 | 成人午夜看片网址| 国产在线视频精品一区| 久久黄色级2电影| 久久精品国产精品亚洲综合| 青青草国产精品亚洲专区无| 日韩高清电影一区| 日本一区中文字幕| 久久国产精品一区二区| 国产一区二区三区综合| 国产激情精品久久久第一区二区 | 日韩精品乱码av一区二区| 性做久久久久久免费观看| 亚洲成人一区在线| 亚洲成人动漫在线观看| 日韩精品91亚洲二区在线观看| 午夜精品成人在线视频| 日韩不卡手机在线v区| 奇米777欧美一区二区| 久久精品国产第一区二区三区| 国内精品自线一区二区三区视频| 国产美女久久久久| 大白屁股一区二区视频| 91美女在线观看| 欧美日韩午夜在线视频| 欧美一区二区福利视频| 精品国产3级a| 中文字幕在线观看一区二区| 伊人夜夜躁av伊人久久| 日本欧美一区二区三区乱码| 久久99久久99| 成人午夜精品在线| 精品视频123区在线观看| 精品少妇一区二区三区在线视频| 亚洲国产经典视频| 亚洲一区在线看| 国产曰批免费观看久久久| 99国产精品久久久久久久久久| 欧美色老头old∨ideo| 久久久久久久久久久久久久久99 | 69堂精品视频| 日本一区二区三级电影在线观看| 中文字幕一区二区三区四区 | 色婷婷久久久亚洲一区二区三区 | 亚洲一区精品在线| 国产一区二区三区香蕉| 欧美在线视频不卡| 久久网站热最新地址| 亚洲午夜免费电影| 国产高清不卡一区| 777精品伊人久久久久大香线蕉| 国产精品国产三级国产有无不卡 | 亚洲va韩国va欧美va| 国产成人免费视频网站| 正在播放亚洲一区|