下面这段汇编代码是从磁盘第2扇区读取4个扇区2K字节到内存0x90200开始处。使用的是INT 0x13 BIOS中断程序,主要就是学习一下到底该如何调用这个中断程序。

Bootsect代码详解续

JNC:如果CF标志位没有被置位。J就是段内跳转指令。常数用#号打头。

读完磁盘4个扇区后,仍然是用INT 0x13中断程序,ah=0x08,dl=0,可以获取到磁盘信息:

Bootsect代码详解续

Bootsect代码详解续

需要说明的是第86行,因为是使用的软盘启动,软盘的磁道号不会超过256的,所以高两位肯定都是0,而这里主要是想获取每道的扇区数量。

另外,上面代码中使用了“段超越”或者称为段覆盖前缀,将cx(每磁道扇区数)复制到CS:sectors内存处。这里思考一个问题如果不用seg cs,每磁道扇区数会被保存在哪个段呢?另外,INT 0x13修改了es的值,es被修改成了什么?

 

下面再继续分析获取光标位置和打印文本信息的代码:

Bootsect代码详解续

ah=0x03表示读取光标的位置,光标位置存放在DH(y轴)和DL(x轴),bh==0表示以图形方式显示。

ah=0x13表示从ES:BP内存处读取cx=24个字符显示并且移动光标。

下面看下msg1的定义:

Bootsect代码详解续

Loading system ...为18个byte,加上回车和换行符6个byte共24个字符。

 

相关文章:

  • 2022-12-23
  • 2021-07-18
  • 2021-09-02
  • 2021-12-03
  • 2022-12-23
  • 2022-12-23
  • 2021-12-23
  • 2021-04-12
猜你喜欢
  • 2021-12-11
  • 2021-07-14
  • 2021-10-05
  • 2021-05-16
  • 2021-05-22
  • 2021-08-25
  • 2022-12-23
相关资源
相似解决方案