阅读:1420回复:4
问:代码没看懂(处理全局描述符表的一段汇编程序的数据段部分)
问题是:数据段DSEG 的存储空间是如何分配的?
请解释下面语句: GDT LABEL BYTE CODE_SEL = CODE-GDT GDTLEN = $-GDT 谢谢。 代码如下 ...... DESCRIPTOR STRUC LIMITL DW 0 BASEL DW 0 BASEM DB 0 ATTRIBUTES DW 0 BASEH DB 0 DESCRIPTOR ENDS PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS ATDW = 92H ATCE = 98H .386P DSEG SEGMENT USE16 GDT LABEL BYTE DUMMUY DESCRIPTOR <> CODE DESCRIPTOR <0FFFFH,,,ATCE,> CODE_SEL = CODE-GDT DATAS DESCRIPTOR <0FFFFH,0H,11H,ATDW,0> DATAS_SEL = DATAS -GDT DATAD DESCRIPTOR <0FFFFH,,,ATDW,> DATAD_SEL =DATAD-GDT GDTLEN = $-GDT VGDTR PDESC <GDTLEN-1,> BUFFERLEN = 256 BUFFER DB BUFFERLEN DUP(0) DSEG ENDS ...... [编辑 - 11/22/04 by sqc_mail] |
|
沙发#
发布于:2004-11-22 17:38
GDT LABEL BYTE
在数据段的开头打一个Label,这样便于后面的变量计算自己的偏移地址和长度 CODE_SEL = CODE - GDT 计算出来的CODE_SEL就是代码段在描述符表中的偏移 GDTLEN = $-GDT 这是描述符表的大小,包括1个代码,2个数据和1个unused,共32个Byte,这样写就省得算了 至于如何分配DSEG 的存储空间,应该是loader做的事吧,我只知道DOS下的exe加载器一般把数据段放在最前面,其它我就不知道了 |
|
板凳#
发布于:2004-11-22 18:46
changjt:谢谢!
GDT LABEL BYTE 与代码段的标号一样么(有什么区别),如: ....... next: ....... |
|
地板#
发布于:2004-11-22 20:19
next:标号一般仅在代码中作跳转使用。
label除了可作标号外,还常用在一些变量定义中,具有类型。 比如举两个例子都是用next:无法做到的: Int_V LABEL DWORD _IP dw ? _CS dw ? 这样既可以单独的访问IP和CS,还能直接访问到整个中断向量,用LABEL对同一个变量赋予不同的类型定义,使用很方便 。 public here here LABEL WORD next: 这样不用把代码打包成子例程就可以在另外的程序中去调用它,在联编程序时挺有用的,而普通的标号可都是私有的,不能在子例程外部调用。 暂时就想到这两个。 |
|
地下室#
发布于:2004-11-22 22:55
哦,THANK YOU
|
|