lq61625935 发表于 2011-10-28 00:49:09

assume中定义的段地址储存在什么地方?

assume cs:codesg,ds:data,ss:stack
data segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
    dw 0,0,0,0,0,0,0,0,0,0
stack ends

codesg segment
start:
    mov ax,stack   
    mov ss,ax
    mov sp,0h   
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push
    pop cs:   
    add bx,2
    loop s
   
    mov ax,4c00h
    int 21h
codesg ends
end start
例如这个程序,编译之后mov ax,stack   和mov ax,data。这两行代码中的stack和data被编译成了什么。
这两个地址不是运行的时候才知道吗?
编译器是怎样处理的呢。
我用debug查询确实被赋了正确的值

我用ultraedit直接打开exe文件

一个值是0001一个值是0000在运行的时候这两个值是怎么传递过来的呢?
是在加载的时候完成的?cpu怎么知道要替换这两个呢?

axxxxx 发表于 2011-10-28 02:57:46

段前缀是操作系统在执行程序时为程序所建立的一个信息块,    里面包括了传递给待运行程序的命令行参数,    程序运行结束时返回DOS所需的地址等有用的信息.

gongheng 发表于 2011-10-28 10:55:52

学习了!!!!!!!!!!!

lq61625935 发表于 2011-10-28 14:02:59

是不是在psp内存储着将代码中第几个字节替换位某个地址。编译之后没运行的时候是不是就只是mov ax.0001加载的时候系统就把0001这个数据给替换了。我如果把mov ax.data这段代码打很多边,那256个字节会不会不够存?
页: [1]
查看完整版本: assume中定义的段地址储存在什么地方?