第6章 包含多个段的程序
6.1 在代码段中使用数据
dw 含义: 全称 define word
,在这里定义了8个字型数据,它们所占的内存空间大小为16字节
程序中的指令需要对这8个数据进行累加,8个数据放在哪里呢?
答:程序在运行的时候CS中存放代码段的的段地址。dw 定义的数据处于代码段的最开始,所以偏移地址为0,这8个数据在代码段的偏移0,2,4,6,8,A,C,E处。
**ends start:**指明程序的入口,被转化为一个入口地址
6.2 在代码段中使用栈
对于sp的理解:
第一步:看计算机系统内存:
SA : 10 : 23 12 56 04 …09 16个字节
SA : 20 : 0…0 对应 第二个 dw : 00000000
SA : 30 : 0…0 对应 第二个 dw : 00000000
mov ax,cs
mov ss,ax
mov sp,30h
下图是个人对这三句话的理解(不保证正确)
6.3 将数据、代码、栈放入到不同的段
对于sp的理解
c 等于开辟了一块空间,在这段空间中
SA : 0 : 00000000
SA : 10 : 000000000
然后就 sp 就指向了 20h
对段地址的引用
段名就相当于标号,代表了段地址。所以,mov ax,data
的含义就是将名称为“data”的段的段地址送入 ax。
偏移地址要看它在段中的位置,“data”段中的“0abch”的地址就是:data : 6,每个数据两个单位。
要送入 bx 中的话,代码如下:
mov ax,data
mov ds,ax
mov bx,ds:[6]