![]() |
#2
zklhp2012-06-26 19:00
|
07D2H+10H 即 07E2H 是程序的地址。从07E2H开始,然后存放data段数据,stack段数据和code段数据。
data段数据空间是16B,stack占用空间是32B,由于编译器是从上往下编译的。然后07E2就是数据短的起始地址。stack段的起始地址就是07E2加上占用空间的16字节就是07E3了。所以07E3才是ss的段地址了!
红色字不理解,为什么07E2+16字节就万07E3了呢,07E2和07E3相差不是256个字节吗。
2:

assume cs:code,ss:stack,ds:data
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0] ;这的ds为什么省略的话会编译错误,
;我以前可以省略的呀。
;push [0] ;默认段地址不是在DS里面吗,为什么前面还要在加一个ds呢。
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0] ;这的ds为什么省略的话会编译错误,
;我以前可以省略的呀。
;push [0] ;默认段地址不是在DS里面吗,为什么前面还要在加一个ds呢。
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start