基础-5

作者: 秣崖 | 来源:发表于2017-01-19 14:02 被阅读0次

    多个代码段的程序

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

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

    数据段指令dw(define word):

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

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

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

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

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

    多段框架

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

    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

          本文链接:https://www.haomeiwen.com/subject/yycibttx.html