认识保护模式之汇编复习3

上一节中,提到了这么几句代码

mov ax,4c00h

int 21h

中断的概念:

cpu具备的一种能力,能对cpu内部或外部产生的特殊信息进行检测并对该信息进行处理。这种信息就是中断


中断向量表


修改中断表,可以让cpu不去执行原来的中断程序从而去执行编写我们自己编写的程序

mov ds:[0],自己设定的中断处理程序偏移地址

mov ds:[2],自己设定的中断处理程序段地址


如何将一段汇编代码拷贝到指定的位置:

rep+movsb:

字节传送指令,指令在存储单元之间传送字符串

使用movsb时,ds:si指向源字符串的首地址,es:di指向目的地址

cld指令拷贝数据的方向时低字节向高字节拷贝,即si,di均+1,std与cld相反



下面的程序将在屏幕中间打印一行字符串

assume cs:code
code segment
	;第一步,修改中断向量表中0号中断对应的地址,使之指向我们自己编写的中断处理程序
	start:;程序的入口地址
	mov ax,0
	mov ds,ax;设置ds为0,我们要把中断处理程序放到地址为02000开始的一段地址空间中
	mov word ptr ds:[0],0200h
	mov word ptr ds:[2],0
	;第三步,把我们自己写好的0号中断处理程序拷贝到中断向量表中0号中断所指向的内存地址
	mov ax,cs
	mov ds,ax;将段地址赋值给ds,使其指向代码段的某处,然后进行代码复制
	mov si,offset int0;找到要复制的源的地址
	mov ax,0
	mov es,ax
	mov di,200h;要填充的目的地址
	mov cx,offset int0end-offset int0;需要复制的字节数
	cld
	rep movsb
	
	;第四部,调用0号中断,使其跳转到我们自己的中断程序
	mov ax,1000h
	mov bh,1
	div bh ;调用该除法以后,ah无法存储16位的余数,会发生溢出
	mov ax,4c00h
	int 21h
	;第二步:我们自己写的0号中断,使其在屏幕中间打印 i am student
	int0:jmp short int0start
	     db"i am student"
	int0start:
	mov ax,0b800h;配置显存首地址
	mov es,ax
	mov ax,cs
	mov ds,ax
	mov si,202h;字符串的位置
	mov di,12*160+36*2;显示在屏幕中间的位置
	mov cx,12
	s:
	mov al,ds:[si]
	mov es:[di],al
	inc si
	add di,2
	loop s;将字符串输出到屏幕中间
	
	mov ax,4c00h
	int 21h
	int0end:nop
	code ends
	end start



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值