汇编-6.1-在代码段中使用数据

1.我们如果要一个程序在加载的时候取得所需要的空间,则必须要在源程序中做出说明。我们通过在源程序中定义段来进行内存空间的获取。
2.我们不能自己随便决定哪段空间可以使用,应该让系统来为我们分配。我们可以在程序中,定义我们希望处理的数据,这些数据就会被编译、连接程序作为程序的一部分写到可执行文件中。当可执行文件中的程序被加载入内存时,这些数据也同时被加载入内存中。与此同时,我们要处理的数据也就自然而然的获得了存储空间。
程序6.1
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

mov bx,0
mov ax,0

mov cx,8
s:add ax,cs:[bx]
add bx,2
loop s

mov ax,4c00h
int 21h

code ends
end
注:dw即“define word”;
2.程序入口不是我们所希望执行的指令。我们可以在源程序中指明程序的入口所在,如程序6.2:
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

start: mov bx,0
mov ax,0

 mov cx,8

s: add ax,cs:[bx]
add bx,2
loop s

mov ax,4c00h
int 21h

code ends
end start
注:end指令指明了程序的入口在标号start处,也就是说,“mov bx,0”是程序的第一条指令,在编译连接后,由“end start”指明的程序入口,被转化为一个入口地址,存储在可执行文件的描述信息中;在程序6.2生成的可执行文件中,这个入口的偏移地址部分为10H。当程序被加载入内存之后,加载者从程序的可执行文件的描述信息中读到程序的入口地址,设置CS:IP。这样CPU就从我们希望的地址处执行。
3.可执行文件由描述信息和程序组成,程序来自于源程序中的汇编指令和定义的数据;描述信息则主要是编译、连接查程序对源程序中相关的伪指令进行处理所得到的信息。
归根结底,我们要CPU从何处开始执行程序,只要在源程序中使用“end标号”指明就可以了。可以得出如下程序框架:
assume cs:code
code segment
.
.
数据
.
.
start:
.
.
代码
.
.
code ends
end start

猜你喜欢

转载自blog.csdn.net/changjucha3459/article/details/81157373