mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; 显示 AL 中的数字
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
DispAL:
 | 
						|
	push	ecx
 | 
						|
	push	edx
 | 
						|
	push	edi
 | 
						|
 | 
						|
	mov	edi, [dwDispPos]
 | 
						|
 | 
						|
	mov	ah, 0Fh			; 0000b: 黑底    1111b: 白字
 | 
						|
	mov	dl, al
 | 
						|
	shr	al, 4
 | 
						|
	mov	ecx, 2
 | 
						|
.begin:
 | 
						|
	and	al, 01111b
 | 
						|
	cmp	al, 9
 | 
						|
	ja	.1
 | 
						|
	add	al, '0'
 | 
						|
	jmp	.2
 | 
						|
.1:
 | 
						|
	sub	al, 0Ah
 | 
						|
	add	al, 'A'
 | 
						|
.2:
 | 
						|
	mov	[gs:edi], ax
 | 
						|
	add	edi, 2
 | 
						|
 | 
						|
	mov	al, dl
 | 
						|
	loop	.begin
 | 
						|
	;add	edi, 2
 | 
						|
 | 
						|
	mov	[dwDispPos], edi
 | 
						|
 | 
						|
	pop	edi
 | 
						|
	pop	edx
 | 
						|
	pop	ecx
 | 
						|
 | 
						|
	ret
 | 
						|
; DispAL 结束-------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; 显示一个整形数
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
DispInt:
 | 
						|
	mov	eax, [esp + 4]
 | 
						|
	shr	eax, 24
 | 
						|
	call	DispAL
 | 
						|
 | 
						|
	mov	eax, [esp + 4]
 | 
						|
	shr	eax, 16
 | 
						|
	call	DispAL
 | 
						|
 | 
						|
	mov	eax, [esp + 4]
 | 
						|
	shr	eax, 8
 | 
						|
	call	DispAL
 | 
						|
 | 
						|
	mov	eax, [esp + 4]
 | 
						|
	call	DispAL
 | 
						|
 | 
						|
	mov	ah, 07h			; 0000b: 黑底    0111b: 灰字
 | 
						|
	mov	al, 'h'
 | 
						|
	push	edi
 | 
						|
	mov	edi, [dwDispPos]
 | 
						|
	mov	[gs:edi], ax
 | 
						|
	add	edi, 4
 | 
						|
	mov	[dwDispPos], edi
 | 
						|
	pop	edi
 | 
						|
 | 
						|
	ret
 | 
						|
; DispInt 结束------------------------------------------------------------
 | 
						|
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; 显示一个字符串
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
DispStr:
 | 
						|
	push	ebp
 | 
						|
	mov	ebp, esp
 | 
						|
	push	ebx
 | 
						|
	push	esi
 | 
						|
	push	edi
 | 
						|
 | 
						|
	mov	esi, [ebp + 8]	; pszInfo
 | 
						|
	mov	edi, [dwDispPos]
 | 
						|
	mov	ah, 0Fh
 | 
						|
.1:
 | 
						|
	lodsb
 | 
						|
	test	al, al
 | 
						|
	jz	.2
 | 
						|
	cmp	al, 0Ah	; 是回车吗?
 | 
						|
	jnz	.3
 | 
						|
	push	eax
 | 
						|
	mov	eax, edi
 | 
						|
	mov	bl, 160
 | 
						|
	div	bl
 | 
						|
	and	eax, 0FFh
 | 
						|
	inc	eax
 | 
						|
	mov	bl, 160
 | 
						|
	mul	bl
 | 
						|
	mov	edi, eax
 | 
						|
	pop	eax
 | 
						|
	jmp	.1
 | 
						|
.3:
 | 
						|
	mov	[gs:edi], ax
 | 
						|
	add	edi, 2
 | 
						|
	jmp	.1
 | 
						|
 | 
						|
.2:
 | 
						|
	mov	[dwDispPos], edi
 | 
						|
 | 
						|
	pop	edi
 | 
						|
	pop	esi
 | 
						|
	pop	ebx
 | 
						|
	pop	ebp
 | 
						|
	ret
 | 
						|
; DispStr 结束------------------------------------------------------------
 | 
						|
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; 换行
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
DispReturn:
 | 
						|
	push	szReturn
 | 
						|
	call	DispStr			;printf("\n");
 | 
						|
	add	esp, 4
 | 
						|
 | 
						|
	ret
 | 
						|
; DispReturn 结束---------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; 内存拷贝,仿 memcpy
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
; void* MemCpy(void* es:pDest, void* ds:pSrc, int iSize);
 | 
						|
; ------------------------------------------------------------------------
 | 
						|
MemCpy:
 | 
						|
	push	ebp
 | 
						|
	mov	ebp, esp
 | 
						|
 | 
						|
	push	esi
 | 
						|
	push	edi
 | 
						|
	push	ecx
 | 
						|
 | 
						|
	mov	edi, [ebp + 8]	; Destination
 | 
						|
	mov	esi, [ebp + 12]	; Source
 | 
						|
	mov	ecx, [ebp + 16]	; Counter
 | 
						|
.1:
 | 
						|
	cmp	ecx, 0		; 判断计数器
 | 
						|
	jz	.2		; 计数器为零时跳出
 | 
						|
 | 
						|
	mov	al, [ds:esi]		; ┓
 | 
						|
	inc	esi			; ┃
 | 
						|
					; ┣ 逐字节移动
 | 
						|
	mov	byte [es:edi], al	; ┃
 | 
						|
	inc	edi			; ┛
 | 
						|
 | 
						|
	dec	ecx		; 计数器减一
 | 
						|
	jmp	.1		; 循环
 | 
						|
.2:
 | 
						|
	mov	eax, [ebp + 8]	; 返回值
 | 
						|
 | 
						|
	pop	ecx
 | 
						|
	pop	edi
 | 
						|
	pop	esi
 | 
						|
	mov	esp, ebp
 | 
						|
	pop	ebp
 | 
						|
 | 
						|
	ret			; 函数结束,返回
 | 
						|
; MemCpy 结束-------------------------------------------------------------
 | 
						|
 |