当前位置: 代码迷 >> 汇编语言 >> 请问关于NASM的$使用
  详细解决方案

请问关于NASM的$使用

热度:3838   发布时间:2013-02-26 00:00:00.0
请教关于NASM的$使用
@ dd 0FFFFFFFFh ;   Link   to   next   device-header   block
dw 8000h ;   Driver   "device   attributes "
dw Strat ;   "Strategy "   routine   offset
VLF equ $-2 ;   (VDS   "lock "   flag   after   initialization)
IDEAdr equ $-1 ;   (Lower   IDE   status   address,   after   init)
dw DevInt ;   "Device-Interrupt "   routine   offset
PCIAdr equ $-2 ;   (PCI   UDMA   command   address,   after   init)
db 16,16, 'UDMA$ ',0   ;   Driver   name   (arrows   avoid   user   errors)

......

mov [bx+IDEAdr-@],bp;   Set   IDE   &   PCI   device-address   bytes

......

Strat mov [cs:Packet],bx ;   Save   DOS   request-packet   address

......


------------------------------
以上是一个驱动程序的部分代码。
IDEAdr、VLF是不是分别代表(@+4+2+2-1)、(@+4+2+2-2)?
执行   mov [bx+IDEAdr-@],bp;   前bx已经清零,这条语句是不是把bp的值存到(@+4+2+2-1)这个地址?


------解决方案--------------------------------------------------------
> IDEAdr、VLF是不是分别代表(@+4+2+2-1)、(@+4+2+2-2)?

IDEAdr、VLF分别代表(@+4+2+2-1-1)、(@+4+2+2-2-1)。

> 执行 mov [bx+IDEAdr-@],bp; 前bx已经清零,这条语句是不是把bp的值存到(@+4+2+2-1)这个地址?

bx+IDEAdr-@=> 0+(@+4+2+2-1-1)-@=> 6
把bp的内容存储到DS:[bx+IDEAdr-@]处,即[DS:0006 ]处。