mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +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 结束-------------------------------------------------------------
|
|
|