汇编学习(七)8086汇编拾遗 (6)

前边我们已经基本学完了8086的语法,接下来进入系统学习阶段。

中断这个概念蕴含的意思想当的多,但是这里我们只考虑8086的中断模式,等后边学到x86的时候在讨论现代计算机系统的中断,一样会以Linux操作系统为例。

这里简要的就跟随王爽的《汇编语言》走了。

内中断的产生:

@除法错误        0

@单步执行        1

@执行into指令   4

@执行int指令     int n   (n:整形字节数,告诉CPU 中断号)

中断向量表:

中断向量表在内存中保存,其中存放着256个中断所对应的的中断处理程序入口。

中断过程:

8086CPU中断过程:

1.取的中断类型码

2.pushf   保存标记寄存器值

3.TF = 0,IF = 0

4.push CS

5.push IP

6.ip = N*4   cs = (N*4+2)

中断处理程序的一般常规使用

1.保存用到的寄存器

2.处理中断

3.恢复用到的寄存器

4.使用iret 指令返回
assume cs:code code segment start: mov ax,cs mov ds,ax ;设置代码段,我们需要把代码段的中断处理程序拷贝到向量表可以找到的地方去 mov si,offset do0 mov ax,0 mov es,ax mov di,200h ;将代码拷贝到中断的代码处ds:[si] 的数据到 es:[di] 以cx 为长度 mov cx,offset do0end - offset do0 cld ;设置si,di 每次加1 rep movsb mov ax,0 ;设置中断向量到中段向量表 mov es,ax ;将中段向量的代码CS:IP记录到相应中断号上 mov word ptr es:[0*4],200h ;中断号查找位置N * 4 ,N*4 + 2 mov word ptr es:[0*4+2],0 mov ax,4c00h ;此程序在这里其实就结束了,我们已经将代码放到了,中断向量的地方 int 21h do0: jmp short do0start ;我们必须把字符串放到代码里,不然安装程序结束后代码就内存释放了 db "hello world!" do0start: ;0号中断处理程序,将数据打印到屏幕上 mov ax,cs mov ds,ax mov si,202h mov ax,0b800h mov es,ax mov di,12*160+36*2 ;12行16列 mov cx,12 S:mov al,ds:[si] mov ah,01000010B mov es:[di],ax inc si inc di inc di loop s mov ax,4c00h int 21h do0end:nop code ends end start 

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值