int 10H 显示字符串功能在《自己动手写OS》第五章代码中的分析

 读到《自己动手写OS》第五章,对于多次出现的int 10H 中断做个小小的分析。

对于清屏操作:

功能号:06H和07H

功能:初始化屏幕或滚屏
入口参数:AH=06H—向上滚屏,07H—向下滚屏
          AL=滚动行数(0—清窗口)
          BH=空白区域的缺省属性
          (CH、CL)=窗口的左上角位置(Y坐标,X坐标)
          (DH、DL)=窗口的右下角位置(Y坐标,X坐标)
出口参数: 无
这个操作不再赘述。

这里主要讲一下显示字符串的操作中断。
我们先来看一下传参情况:

功能号:13H

功能:在Teletype模式下显示字符串
入口参数:AH=13H
          BH=页码
          BL=属性(若AL=00H或01H)
          CX=显示字符串长度
          (DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL= 显示输出方式
 0—字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
 1—字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变

 2—字符串中含显示字符和显示属性。显示后,光标位置不变
 3—字符串中含显示字符和显示属性。显示后,光标位置改变

在  Tinix/chapter5/d  中的boot.asm代码中,DispStr 函数如下:

DispStr:

 mov ax, MessageLength
 mul dh          ;注意!dh也是参数,代表字符串的行号
 add ax, BootMessage
 mov bp, ax   ; ┓
 mov ax, ds   ; ┣ ES:BP = 串地址
 mov es, ax   ; ┛
 mov cx, MessageLength ; CX = 串长度
 mov ax, 01301h  ; AH = 13,  AL = 01h
 mov bx, 0007h  ; 页号为0(BH = 0) 黑底白字(BL = 07h)
 mov dl, 0
 int 10h  
 ret

由红色字段可见字符从dh行dl列开始显示,显示后,光标位置改变(若AL=0,则显示字符后光标停留在原处)

在  Tinix/chapter5/d  中的loader.asm代码中,DispStrRealMod 函数如下:

 mov ax, MessageLength
 mul dh
 add ax, LoadMessage
 mov bp, ax   ; ┓
 mov ax, ds   ; ┣ ES:BP = 串地址
 mov es, ax   ; ┛
 mov cx, MessageLength ; CX = 串长度
 mov ax, 01300h  ; AH = 13,  AL = 01h
 mov bx, 0007h  ; 页号为0(BH = 0) 黑底白字(BL = 07h)
 mov dl, 0
 add dh, 3   ; 此处注意!字符串序号+3 为最后的行号
 int 10h  
 ret
因此,若调用函数前dh=0,则在第3行(从第0行开始计数)显示字符串Loading

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值