⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.asm

📁 参照MINIX3写的操作系统 用GCC+NASM+BOCHS开发
💻 ASM
字号:
extern  Disp_pos
global MemoryCopy
global MemorySet

global DisplayString
global DisplayColorString

global OutByte
global InByte
global LockIrq
global UnLock
global DisableIrq
global EnableIrq
MemoryCopy:
	push ebp
	mov  ebp,esp
	
	push esi
	push edi
	push ecx
	
	mov edi,[ebp+8]
	mov esi,[ebp+12]
	mov ecx,[ebp+16]
.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

MemorySet:
	push ebp
	mov ebp,esp
	
	push esi
	push edi
	push ecx

	mov edi,[ebp+8]
	mov edx,[ebp+12]
	mov ecx,[ebp+16]
.14:
	cmp ecx,0
	jz .24
	
	mov byte [edi],dl
	inc edi
	
	dec ecx
	jmp .14

.24:
	pop ecx
	pop edi
	pop esi
	mov esp,ebp
	pop ebp

	ret

DisplayString:
	push ebp 
	mov ebp ,esp
	
	mov esi,[ebp+8]
	mov edi,[Disp_pos]
	mov ah,0Fh
.12:
	lodsb
	test al,al
	jz .22
	cmp al,0ah
	jnz .32
	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 .12
.32:
	mov [gs:edi],ax
	add edi,2
	jmp .12
.22:
	mov [Disp_pos],edi
 	pop ebp
	ret

OutByte:
	mov edx,[esp+4]
	mov al,[esp+4+4]
	out dx,al
	nop
	nop
	ret

InByte:
	mov edx,[esp+4]
	xor eax,eax
	in al,dx
	nop 	
	nop 
	ret

DisplayColorString:
	push ebp 
	mov ebp ,esp
	UD
	mov esi,[ebp+8]
	mov edi,[Disp_pos]
	mov ah,[ebp+12]
	
.13:
	lodsb
	test al,al
	jz .23
	cmp al,0ah
	jnz .33
	push eax
	mov eax,edi
	mov bl,160
	div bl
	mov eax,0ffh
	inc eax
	mov bl,160
	mul bl
	mov edi,eax
	pop eax
	jmp .13
.33:
	mov [gs:edi],ax
	add edi,2
	jmp .13
.23:
	mov [Disp_pos],edi
 	pop ebp
	ret

DisableIrq:
        mov ecx, [esp+4]
	pushf 
	cli
	mov ah,1
	rol ah,cl
	cmp cl,8
	jae Disable8
Disable0:
	in al,0x21
	test al,ah
	jnz DisAlready
	or al,ah
	out 0x21,al
	popf
	mov eax,1
	ret
Disable8:
	in al,0xa1
	test al,ah
	jnz DisAlready
	or al,ah
	out 0xa1,al
	popf
	mov eax,1
	ret
DisAlready:
	popf
	xor eax,eax
	ret

EnableIrq:
        mov ecx, [esp+4]
	pushf
	cli
	mov ah,~1
	rol ah,cl
	cmp cl,8
	jae Enable8
Enable0:
	in al,0x21
	and al,ah
	out 0x21,al
	popf
	ret
Enable8:
	in al,0xa1
	and al,ah
	out 0xa1,al
	popf
	ret


LockIrq:
	cli
	ret	
UnLock:
	sti
	ret
	



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -