• int n:
    • n为中断类型码,引发中断过程
  • 编写中断例程(7ch) ```cpp ;求2*3456^2

assume cs:code code segment start:

  1. mov ax,cs
  2. mov ds,ax
  3. mov si,offset sqrt
  4. mov ax,0
  5. mov es,ax
  6. mov di,200h
  7. mov cx,offset sqrend-offset sqr ;放到安全内存
  8. cld
  9. rep movsb
  10. mov ax,0
  11. mov es,ax
  12. mov word ptr es:[7ch*4],200h ;安装
  13. mov word ptr es:[7ch*4+2],0
  14. mov ax,4c00h
  15. int 21h

sqrt:mul ax
iret sqrtend:nop

code ends end start

  1. ```cpp
  2. ;用7ch完成loop指令的功能
  3. ;中断例程如下
  4. lp: push bp
  5. mov bp,sp
  6. dec cx
  7. jcxz lpret
  8. add [bp+2],bx ;[bp+2]存的是调用中断例程的程序的IP的值,bx是偏移(又转移到标号s处:mov bx,offset s-offset send)
  9. lpret:pop bp
  10. iret

Bios和DOS提供的中断例程是如何安装到内存中的

  • 操作系统
  • 引导型病毒
  • int 10h:bios提供的中断例程

    • 一个中断例程有多个子程序,根据传入的参数决定执行哪个
    • 例如:
      1. ;设置光标位置(第0页第5行第12列)
      2. mov ah,2;2号子程序
      3. mov bh,0;第0
      4. mov dh,5;第5
      5. mov dl,12;第12
      6. int 10h
      1. ;在光标位置显示字符(第0页)
      2. mov ah,9;9号子程序
      3. mov al,'a';要显示的字符
      4. mov bl,7;颜色属性
      5. mov bh,0;第0
      6. mov cx,3;字符重复个数
      7. int 10h

      int 21h

  • 之前一直使用的是21h中断例程的4ch号功能,即程序返回功能

    1. mov ah,4ch ;执行程序返回功能
    2. mov al,0 ;存放返回值
    3. int 21h