int 0x13:参考INT 13H
ah为功能号,当ah=0x02时:从驱动器读取扇区。此时有
输入参数表:
| 寄存器名称 | 表示的参数 |
|---|---|
| AH | 0x02 |
| AL | 读取多少个扇区 |
| CH | 磁道号 |
| CL | 扇区号 |
| DH | 磁头号 |
| DL | 驱动号 |
| ES:BX | 读入缓冲区位置 |
返回参数表:
| 寄存器名称 | 参数 |
|---|---|
| CF | 进位标志,如果发生错误,就置位;没有错误就清0 |
| AH | 返回代码 |
| AL | 实际读取的扇区数 |
DL的确定方法:
现在的硬盘会兼容这种寻址方式,并且现在对于INT13 已经进行了扩展。
jnc: 如果CF=0,则跳转。
rep movw :从DS:SI中移动CX个字(word)到ES:DI。
jmpi 段内偏移,段号:表示段间跳转。
2.gnu as相关lss:可以参考head. S analysis – linux-0.11 analysis notes (V)
以intel汇编的指令格式使用lss应该是:
lss r32,m16:32
表示将一个长指针载入到ss:r32中。其中ss中为段选择符,r32(一个通用寄存器)中为段中偏移地址。m16:32 表示一个内存操作数,这个操作数是一个长指针,由 2 部分组成:16位段选择器和32位偏移量。
out:I/O操作指令,功能为把AL/AX的数据送到IO地址,IO地址如果大于FFH,则地址需要放入DX,要输出字节,默认使用AL寄存器,要输出字,默认使用AX寄存器。 即I/O端口放在dx寄存器中;要输出的数据放在al或ax中。
lea:Load effective address,取有效地址,也就是取偏移地址。lea指令用于把源操作数的地址偏移量传送目的操作数。
AT&T汇编的寻址方式可以参考AT&T汇编的寻址方式
pushfl:参考Flag Instructions。Pushes the eflags register onto the top of the stack。将eflag寄存器压入栈顶。
shl:参见shl 和 shr指令(逻辑移位指令),逻辑左移指令。注意,参考博客中为Intel,不是AT&T。
jb:参见13-ZF标志位,JB和JNB跳转指令。jump when below,注意,参考博客中为Intel,不是AT&T。
loop:参见汇编loop指令及用法解释。每执行一次,cx寄存器减1,直到为0。



