assume中定义的段地址储存在什么地方?
assume cs:codesg,ds:data,ss:stackdata 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怎么知道要替换这两个呢?
段前缀是操作系统在执行程序时为程序所建立的一个信息块, 里面包括了传递给待运行程序的命令行参数, 程序运行结束时返回DOS所需的地址等有用的信息. 学习了!!!!!!!!!!! 是不是在psp内存储着将代码中第几个字节替换位某个地址。编译之后没运行的时候是不是就只是mov ax.0001加载的时候系统就把0001这个数据给替换了。我如果把mov ax.data这段代码打很多边,那256个字节会不会不够存?
页:
[1]