汇编语言学习--包含多段的程序

1.程序获得所需的空间有两种,一种是加载程序时为程序分配,另外一种是程序在执行的过程中向系统请求空间。

2.在代码段中使用数据

从规范的角度上讲,我们是不能随便的给程序分配空间,应该让系统给我们分配,当我们的执行文件中的程序被加载到内存时,数据也被同时加载,此时我们的数据就获得了所需要的空间了

assume cs : code

code segment

dw 0123h, 0456h,0798h                   ;dw代表定义字型数据,这些数据的地址应当在cs:bx上!由于其段地址就放在cs上

start:  mov bx , 0                               ;指明了程序的入口!dw后面的数据都是系统来分配的

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

3.在代码段中使用栈

1.设置栈顶

start : mov ax , cs

           mov ss , ax

           mov sp , 30h            ;设置栈顶cs:30

           mov bx , 0                ;数据cs:0

           mov cx , 8

s:        push cs : [bx]          

           add   bx , 2

           loop s

4.将数据,代码,栈放入不同的段

代码

assume cs : code , ds : data , ss : stack

data segment

dw 0123h, 0456h,0789h

data ends

stack segment

dw 0,0,0,0,0

code segment

start: mov ax , stack

          mov ss , ax                     ;8086中,不能之直接将一个数据放入段地址中

          mov sp ,20h                    ;设置了栈顶指向了stack:20h

          mov ax , data

          mov ds , ax                     ;ds指向了data,含义是,将名称为“data”的段的段地址送入ax中,一个段中的数据的段地址可有段名代表,偏移地址就要看这个数据在这个段中的位置了

          mov bx , 0

          mov cx , 8

s: push [bx]                         ;默认为ds:bx

         add bx , 2

         loop s

         mov bx , 0

s0:  pop [bx]

         add bx , 2

         loop s0

         mov ax , 4c00h

         int 21h

code ends

end start

posted @ 2010-04-05 19:39  云端小飞象cg  阅读(240)  评论(0编辑  收藏  举报