zoukankan      html  css  js  c++  java
  • 汇编语言-第13章

    第十三章 int指令
    *int n引发n号中断过程,执行过程如下:
    (1)取得中断类型码n
    (2)pushf,TF=0,IF=0
    (3)push cs,push ip
    (4)(cs)=(0000:(4n+2)),(ip)=(0000:(4n))
    *用int 7ch实现loop指令功能的分析
    (1)loop实现的是指令跳转,属于短转移,即位移量在-128~127之间;同时,需要获得cx以确定循环次数;通过判断cx是否为0来决定是否执行跳转。
    (2)cx值可从调用程序中获得;7ch中断例程依据判断cx=0?来确定跳转,可以想到用jmp指令实现(?未深入细想)或者按书上用iret,修改栈顶元素的值,使其指向跳转目的偏移地址即可。
    (3)实现如下:
    ;参数cx:循环次数,bx:跳转位移量
    loopint:
           push bp
           dec cx
           jcxz loopintend
           mov bp,sp
           add [bp+2],bx
    loopintend:
           pop bp
           iret
    为什么要选用bp,为什么不能直接add ss:[sp+2],bx?,这是一个疑惑。

    *基本输入输出系统(BIOS)
    BIOS存放于ROM中,主要包括:
    (1)硬件系统的检测和初始化程序
    (2)外部中断和内部中断的例程
    (3)用于对硬件设备进行I/O操作的中断例程
    (4)其他和硬件系统相关的中断例程

    *BIOS和DOS提供的中断例程安装过程:
    (1)开机CPU加电,初始化cs=0ffffh,ip=0;0ffff:0000处有一条跳转指令,转去执行BIOS中的硬件系统检测和初始化程序;
    (2)初始化程序建立BIOS所支持的中断向量,即在中断向量表中登记BIOS提供的中断例程的入口地址;BIOS的中断例程固化在ROM中无需安装;
    (3)硬件系统检测和初始化完成后,调用int 19h引导操作系统,从而将计算机交由操作系统控制;
    (4)DOS启动后,安装其提供的中断例程,并登记例程入口地址。

    *BIOS和DOS中断例程应用
    BIOS和int提供的中断例程,都用ah来传递其内部子程序的编号
    (1)设置光标位置;10h中断例程的2号子程序
    mov ah,2     ;设置子程序编号
    mov bh,0     ;设置页码
    mov dh,5    ;设置行号
    mov dl,12    ;设置列号
    int 10h
    (2)在光标位置现实字符;10h中断例程的9号子程序
    mov ah,9     ;设置子程序编号
    mov al,'a'     ;设置字符
    mov bl,5    ;设置字符属性
    mov bh,5    ;设置页码
    mov cx,3    ;设置字符重复个数
    int 10h
    (3)程序返回;21h中断例程的4ch号子程序
    mov ah,4ch     ;设置子程序编号
    mov al,0        ;设置返回值
    int 21h
    (4)在光标位置显示字符串;21h中断例程的9号子程序;

  • 相关阅读:
    android apk瘦身之 图片压缩 tinypng
    java 1.7 新io 实践 NIO2
    Still unable to dial persistent://blog.csdn.net:80 after 3 attempts
    dex2oat 加载多次
    android stadio open recent 在同一窗口打开
    &运算符的应用
    MethodTrace 生成的trace文件为空
    MethodTrace 生成的trace文件为空
    error: unknown host service 的详细解决办法
    error: unknown host service 的详细解决办法
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3267172.html
Copyright © 2011-2022 走看看