段所占空间大小和特点
以8086为例,假如声明一个段,不论是数据段,栈段还是代码段, 一旦段里面有内容,那么会从一个新的段地址开始开辟空间,如果代码进行了分段处理,那么就会形成16字节对齐的现象
assume...ds:data
;场景一
data segment
;如果没有内容,则不开辟空间, 被编译器忽略
data ends
;场景二
data segment
dw 55FFH,55FFH ;后面的数据用...print:
mov bx,3000H
mov cx,4000H
ret
end start
内存分布如下:
我们发现data段并没有独占..., 和代码的编写有关系
如果不加start标记的话,汇编代码默认由上往下执行,cs+ip从上往下,所过之处,全部被当做代码处理, 因此即便你在数据段中存放指令,甚至打入代码起始标签也没有问题:
assume...16个字节代码后,由于段与段之间内存是连续分布的,如果ip的值刚好指向了代码段,那么紧接着执行代码段中的内容,如果ip没有指向代码段,则不执行, 这个情况是不可控的
code segment
mov