编写汇编中断处理程序 段地址的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:13:57
关于自己编写中断程序,通常我们都是先将自己编写的中断程序复制到一个段内存空间中,随后设置中断向量,使之与我们编写的中断程序相联系,最后就可以利用我们的中断了.复制中断程序时书上是这么写的:
mov ax,cs
mov ds,ax
mov si,offset doit
mov ax,0
mov es,ax
mov di,200h
mov cx,offset doitend-offset doit
cld
rep movsb
doit至doitend是我们编写的中断处理程序,我们要将它复制到一段内存中去,这里选择的是0:200h,编程序时,我们是将这段中断处理程序写在程序的最下面,这就设计到了cs段地址的问题,此程序中,默认我们写的程序的段地址与上面这一小段程序的段地址相同,但是如果在这两者之间有足够多的数据,或代码的话,显然两者的段地址是不同的..所以就会出现问题.
请求高人 这种想法有错误吗?

没有错。只有很大的汇编程序才可能会出现这种情形,这时offset doit 实际已>64K 使si溢出了.因此显然ds,si是错的。
你让我想到一个问题,如果代码足够长,代码顺序运行到64K边界时,要跨段了时,怎么办。我们写汇编代码时自然不用考虑这些事。我没有见到有书讲的这种情形的。但我猜是汇编器自动给我们在段末插入了一条段间跳转指令。