汇编语言12---中断

中断机制

; 将代码段寄存器和我们的代码段关联起来
; 将数据段寄存器和我们的数据段关联起来
; 注:这里的关联并没有任何实际操作,相当于给我们自己的注释而已
; 相当于即使不写这一行也没有关系
assume cs:code, ds:data
  
; 数据段开始
data segment  
    ; 创建字符串
    ; 汇编打印字符串要在尾部用 $ 标记字符串的结束位置
    ; 将字符串用hello做一个标记,方便后面使用它
    hello db 'Hello World, Whip!$'
     
; 数据段结束  
data ends

; 代码段开始
code segment  
; 指令执行的起始,类似于C语言的main函数入口
start:  
    ; 汇编语言不会自动把数据段寄存器指向我们程序的数据段
    ; 将数据段寄存器指向我们自己程序的数据段
    mov ax, data
    mov ds, ax

    ; 打印字符串的参数
    ; DS:DX=串地址,将字符串的偏移地址传入dx寄存器
    ; 字符串是在数据段起始创建的,它的偏移地址是0h
    ; offset hello 即找到标记为hello的数据段字符串的编译地址
    ; 还可以写成 mov dx, 0h
    mov dx, offset hello  
    ; 打印字符串,ah=9h代表打印
    mov ah, 9h   
    int 21h  
    
    ; 正常退出程序,相当于高级语言的 return 0
    mov ah, 4ch
    int 21h
     
; 代码段结束      
code ends     
   
; 程序的结束
end start

x86的中断机制与单片机相似,中断是由于软件或者硬件的信号使CPU暂停当前的任务,转而去执行另一段服务程序。

硬中断(外中断):由外部设备,如网卡、硬盘随机引发的,比如网卡收到数据包的时候,就会发出一个中断。类似于单片机硬件中断
软中断(内中断):由执行中的指令产生的,可以通过程序控制触发。

x86一般通过int中断码配合ah寄存器来使用:内存中有一张中断向量表,用来存放中断码处理中断程序的入口地址。CPU在接受到中断信号后,暂停当前正在执行的程序,跳转到中断码对应的向量表地址处去执行中断。

常见中断:

int 10h 用于执行BIOS中断
int 3 断点中断,用于调试程序
int 21h 用于执行DOS系统功能调用,AH寄存器存储功能号。
int 21h --ah=09H 显示字符串 会使用参数DS:DX=串地址 返回(DS:DX+1)=实际输入的字符数
int 21h --ah=4c 带返回码结束 会使用参数AL=返回码 无返回参数

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值