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

📄 string.asm

📁 一个简单的操作系统,用的是nasm写的,包括进程调度,中断处理
💻 ASM
字号:

global PM_DispStr
global PM_DispInt
_Disposition	dd	(15*80+0)*2	;保护模式下显示字符串位置
PM_Disposition	equ	_Disposition
PM_DispStr:
	push	ebp
	mov	ebp,esp

	push	esi
	push	edi
	push	eax
	push	ebx
	push	edx

	mov	esi,[ebp+8]
	mov	edi,[PM_Disposition]

.1:
	lodsb
	test	al,al
	jz	.2
	cmp	al,0a0h
	jz	.3
	mov	ah,0fh
	mov	[gs:edi],ax
	add	edi,2
	jmp	.1	

.3
	xor	edx,edx
	mov	eax,edi
	mov	ebx,160
	div	ebx
	inc	eax
	mul	ebx
	cmp	edx,0
	jnz	.4
	mov	edi,eax
	jmp	.1
	
.4:	
	
	jmp $
.2
	mov	[PM_Disposition], edi

	pop	edx
	pop	ebx
	pop	eax
	pop	edi
	pop	esi
	mov	esp,ebp
	pop	ebp
	ret
	
;以16进制输出al中的数字
;影响寄存器:无
PM_DispAL
	push	ebp	;1046d
	mov	ebp,esp

	push	edi
	push	edx
	push	ecx
	push	eax

	mov	edi,[PM_Disposition]
	mov	dl,al
	shr	al,4
	mov	ecx,2
.1
	cmp	al,9
	ja	.2
	add	al,'0'
	jmp	.3	

.2	
	sub	al,10
	add	al,'A'
.3
	mov	ah,0fh
	mov	[gs:edi],ax
	add	edi,2
	mov	al,dl
	and	al,0fh
	loop	.1

	mov	[PM_Disposition],edi

	pop	eax
	pop	ecx
	pop	edx
	pop	edi

	mov	esp,ebp
	pop	ebp
	ret

;以十六进制输出4字节大小的整型值
;影响寄存器:无
PM_DispInt:
	push	ebp
	mov	ebp,esp

	push	edi
	push	eax

	mov	eax,[ebp+8]
	push	eax
	shr	eax,24
	call	PM_DispAL

	mov	eax,[esp]
	shr	eax,16
	call	PM_DispAL

	mov	eax,[esp]
	shr	eax,8
	call	PM_DispAL

	pop	eax
	call	PM_DispAL

	mov	ah,0fh
	mov	al,'H'
	mov	edi,[PM_Disposition]
	mov	[gs:edi],ax
	add	edi,2
	mov	[PM_Disposition],edi

	pop	eax
	pop	edi

	mov	esp,ebp
	pop	ebp
	ret
	

⌨️ 快捷键说明

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