linux内核bios,需要帮助了解Linux内核的BIOS中断调用

我正在学习Linux源代码以了解它如何获取内存映射。我认为它首先呼叫detect_memory(),其定义为here。该函数调用在同一个文件中定义的detect_memory_e820()。 detect_memory_e820()在48个电话intcall这是这样定义的:需要帮助了解Linux内核的BIOS中断调用

.code16gcc

.text

.globl intcall

.type intcall, @function

intcall:

/* Self-modify the INT instruction. Ugly, but works. */

cmpb %al, 3f

je 1f

movb %al, 3f

jmp 1f /* Synchronize pipeline */

1:

/* Save state */

pushfl

pushw %fs

pushw %gs

pushal

/* Copy input state to stack frame */

subw $44, %sp

movw %dx, %si

movw %sp, %di

movw $11, %cx

rep; movsd

/* Pop full state from the stack */

popal

popw %gs

popw %fs

popw %es

popw %ds

popfl

/* Actual INT */

.byte 0xcd /* INT opcode */

3: .byte 0

/* Push full state to the stack */

pushfl

pushw %ds

pushw %es

pushw %fs

pushw %gs

pushal

/* Re-establish C environment invariants */

cld

movzwl %sp, %esp

movw %cs, %ax

movw %ax, %ds

movw %ax, %es

/* Copy output state from stack frame */

movw 68(%esp), %di /* Original %cx == 3rd argument */

andw %di, %di

jz 4f

movw %sp, %si

movw $11, %cx

rep; movsd

4: addw $44, %sp

/* Restore state and return */

popal

popw %gs

popw %fs

popfl

retl

.size intcall, .-intcall

我的问题是,我无法弄清楚什么是DX寄存器的在这一点上的价值:movw %dx, %si和它是从哪里来的。

2014-04-03

Ashkan

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值