基础-5

多个代码段的程序

这种思想即: 将程序分为代码段,数据段,栈段

为规范内存的使用,程序员是不能随便决定内存空间的使用,应该让系统进行分配例如 数据段的并且连接的程序段.

数据段指令dw(define word):

       dw 1020h,2123h,0f212h  //定义字数据 若是在程序开头定义,则其偏移地址分别为0 2 4.  按照字符编址的.

//传输数据的宽度,则是能找到字符数据的地址位数.即可寻址范围

要注意:  定义的字数据段的数据长度和偏移地址的关系. 偏移地址以字符为单位编址,就先把定义的数据段计算出占多少字符.再加上当前偏移地址,并用16进制进行表示.

同时,定义了这些数据,也等价于申请了一定的内存空间.

通过end 标记//来指明代码段执行的入口


基础-5_第1张图片
多段框架

将栈段,数据段,代码段分别处理

assume cs:code,ds:data,ss:stack  //这一句只是提醒编译器,而无任何实质性作用

data segment

dw 0123h , 0223h , 0323h , 0254h ,0fff2h

data ends

stack segment

dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

stack ends

code segment

start:    mov ax,stack   //stack段 地址    

            mov ss,ax        //设置栈段寄存器

            mov sp,1Ch     //设置栈偏移地址(最大地址,栈底)

            mov ax,data     //data段  地址  

            mov ds,ax       //设置数据段的段寄存器

            mov bx,0

            mov  cx,8

           s:  push  [bx]

                add bx,2

           loop  s


             mov  ax,4c00h

             int 21h

code ends

end start

这段程序中,stack ,data , code ,start均为可变的名称。assume 只是关联了寄存器和段名并未让寄存器真正的赋值。cpu会根据end start 中start的标志来明确cs:ip的执行接口。分开段写目前有两个优点:1,有标志代表stack,data的入口地址。 2,容易区分

但是在过程中,其在内存中的分布依然是连续的。内存的分配和段的位置是相关的。

汇编中不能使用//进行注释

你可能感兴趣的:(基础-5)