荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: sinba (CL, never fly away!), 信区: Program
标  题: 操作系统课程设计——建议7
发信站: BBS 荔园晨风站 (Sun Oct 31 11:44:25 1999), 转信

(test3部分)

对操作系统可真算服了,我现在还搞不懂,在large模式下,
汇编各模块之间有什么不同。各有自己的ds,cs?
为这样一个问题弄了一整天,解决之道令我自己都说不出
所以然来,现提出以供大家指正。

我在system.asm中定义:

...
   public _fun00_ip
    public _fun00_cs
    public _fun01_ip
    public _fun01_cs
    public _f04_ip
    public _f04_cs
_data2 segment word public 'data2'
   _fun00_ip dw 0
   _fun00_cs dw 0
   _fun01_ip dw 0
   _fun01_cs dw 0
   _f04_ip dw 0
   _f04_cs dw 0
_data2 ends

_text segment public 'code'
      assume cs:_text,ds:_data2

...

在real.asm有
extrn _gotim_sch1:far
extrn _time: word
extrn _work1: word
public _ip00
public _cs00
public _ip00_t2
public _cs00_t2

_data segment word public 'data'
   _ip00 dw 0
   _cs00 dw 0
   _ip00_t2 dw 0
   _cs00_t2 dw 0
   _h8ip dw 0
   _h8cs dw 0
   _inseg dw 0
   _inea dw 0
_data ends

_text segment public 'code'
      assume cs:_text,ds:_data

...

然后在调用时

    push _f04_cs
    push _f04_ip
    ret

总是说cpu遇到非法指令。
用栈检查(源程序见前面文章),发现f04_cs,f04_ip在c下打印值正确,一旦
push到栈中就变了值(如果这时返回便出错),而回到c中又打印正确值。怎么
查都不想不通到底哪里错了。让人要跳楼的是同样操作的cs00,ip00却很正常。
狠狠心,大换血,将在system.asm的定义全改在real.asm中(违反常理),
程序如下:
real.asm:

public _ip00
public _cs00
public _ip00_t2
public _cs00_t2
public _fun00_ip
public _fun00_cs
public _fun01_ip
public _fun01_cs
public _f04_ip
public _f04_cs

_data segment word public 'data'
   _ip00 dw 0
   _cs00 dw 0
   _ip00_t2 dw 0
   _cs00_t2 dw 0
   _h8ip dw 0
   _h8cs dw 0
   _inseg dw 0
   _inea dw 0
   _fun00_ip dw 0
   _fun00_cs dw 0
   _fun01_ip dw 0
   _fun01_cs dw 0
   _f04_ip dw 0
   _f04_cs dw 0

_data ends

_text segment public 'code'
      assume cs:_text,ds:_data
...

而system.asm为:

...
    extrn _fun00_ip: word
    extrn _fun00_cs: word
    extrn _fun01_ip: word
    extrn _fun01_cs: word
    extrn _f04_ip  : word
    extrn _f04_cs  : word

_text segment public 'code'
      assume cs:_text
...

程序恢复正常,压栈值和c的打印值均正常,
system.asm中的调用:

    push _f04_cs
    push _f04_ip
    ret

工作正常,程序正常结束。
些许高兴之余,想从7楼跳下去,大侠们拉我一把!



--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.145]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店