+ -
当前位置:首页 → 问答吧 → 我又来求解了!关于过程调用

我又来求解了!关于过程调用

时间:2010-12-12

来源:互联网

1 如何分辨过程和调用程序是不是在同一模块中?


2 stack segment 
  dw 100 DUP (?)
tos label word
 装填时
  mov ax,stack
  mov ss,ax
  mov sp,offset tos
 红字何解?


3 code1 segment
  main proc far
  assume cs:code1

start: ..
  ..

  call far ptr proadd  
  ret
 main endp
 code1 ends

  code2 segment
assume cs:code2
  proadd proc far
 ..
..
 proadd endp
 cpde2 ends
end start
 红字:用assume说明 CS与code2关联,就说明不在同一个代码段?
 蓝字:为何 用 ptr呢?

作者: znxllyuan   发布时间: 2010-12-12

1 如何分辨过程和调用程序是不是在同一模块中?
答:编译工具知道(哈哈)!自己设计时决定的吧,如果程序太大就分模块,用个外部说明就行。


2 stack segment  
  dw 100 DUP (?)
tos label word

答:类似于
tos dw $
但不占用这个单元。所以装填时,把SP指向你定义的100个字单元的下一个单元。


答:你可以试一下去掉ptr的结果(我自己还没试,因此后面的解释不一定正确)。是否没有ptr它会编译成近转移,因为根据assume的设定,proadd也在cs段,所以call proadd就忽略段前缀。
 

作者: shzhfu   发布时间: 2010-12-12

引用 1 楼 shzhfu 的回复:
1 如何分辨过程和调用程序是不是在同一模块中?
答:编译工具知道(哈哈)!自己设计时决定的吧,如果程序太大就分模块,用个外部说明就行。


2 stack segment
dw 100 DUP (?)
tos label word

答:类似于
tos dw $
但不占用这个单元。所以装填时,把SP指向你定义的100个字单元的下一个单元。

3
答:你可以试一下……

1 什么外部命令?
  每一个END 就是不同的模块?
 
3 proadd和调用程序不在一个代码段哇 一个assume CS:code1 一个assume cs:code2

作者: znxllyuan   发布时间: 2010-12-12

还有 tos label word
  书上说LABEL定义一个指定的符号名,该符号名的段地址和偏移地址与下面紧跟的存储单元的相应属性相同,但该符号的类型是新指定的。
在这里 stack segment  
  dw 100 DUP (?)
  tos label word
  stack ends
 中LABEL紧跟着的存储单元是什么?

作者: znxllyuan   发布时间: 2010-12-12