请教关于 lds 指令的一个弱智问题
这个是linux内核setup.s中取出hd0参数的代码 有一个地方很不懂 需要各位大虾提点一下 mov ax,#0x0000
mov ds,ax
!书上写的是 这里从0x41中断入口处取出hd0参数表 此时的ds = 0x0000
lds si,[4*0x41]
!问题出在这里 该代码执行以后 ds的值是多少? 0x0000还是 [4*0x41+2]?
!按照《linux内核完全注释》这书上的意思 是从0x41中断的入口地址处读
!取hd0参数表 可是lds 运行以后 好像ds的值改变了 那么结合下面的
!rep movsb 指令 拷贝的数据将是 movsb es:[di],ds:[si] 如果按照书上的意
!思要从0x41中断入口取硬盘参数的话 ds必须为0x0000 可是我查阅了下lds
!的用法如下:
!指针传送指令LDS
!LDS r16,mem ;r16←mem,DS←mem+2
!LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器。
!实际上,mem指定了主存的连续4个字节作为逻辑地址,即32位的地址指
!针。
!mov word ptr [3060h],0100h
!mov word ptr [3062h],1450h
!lds si,[3060h] ;ds=1450h,si=0100h
!这里ds的值是改变了的 所以请问各位大虾 这段代码又是怎么回事?
!hd0参数表的入口到底在那里?
mov ax,#INITSEG
mov es,ax
mov di,#0x0080
mov cx,#0x10
rep
movsb
[[it] 本帖最后由 xmy20051643 于 2008-5-7 10:35 编辑 [/it]]