将数据、代码、栈放到不同的段(感觉很好)

时间:2014-05-01 18:14:07   收藏:0   阅读:368

1.将数据、栈都放到代码段中太混乱了。下面我们写一个程序,将数据、代码、栈放到不同的段中

assume cs:code,ds:data,ss:stack
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
	mov bx,0
	mov cx,8
s:
	push [bx]
	add bx,2
	loop s
	mov bx,0
	mov cx,8
s0:
	pop [bx]
	add bx,2
	loop s0
	mov ax,4c00h
	int 21h
code ends
end start

(1)现在,程序中有多个段,我们如何访问段中的数据呢?当然要通过地址,而地址是分为两部分的,即段地址和偏移地址。我们如何指明要访问的数据的段地址呢?在程序中,段名就相当于一个标号,它代表段地址。所以指令”mov ax,data"的含义就是将名称为“data"的段的段地址送入ax。一个段中的数据的段地址可以由段名代表,偏移地址就要看它在段中的位置了。程序中”data“中的数据0abch的地址就是data:6。


(2)代码段、数据段、栈段完全是我们的安排

现在,我们以一个具体的程序来再次讨论一下所谓的代码段、数据段、栈段。在汇编程序中,我们可以定义很多的段,比如上面我们定义三个段“code”,“data",“stack”。我们可以安排他们存放代码段、数据、栈。那么我们如何让CPU按照我们的这种安排来执行这个程序呢?我们来看看源程序中对这三个段所做的处理:

将数据、代码、栈放到不同的段(感觉很好),码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!