汇编学习--7.11--多段综合编程

来源:互联网 发布:疯狂java讲义第4版下载 编辑:程序博客网 时间:2024/04/30 02:20
  • 定义数据:dw 数据,数据,数据——define word
                              db 数据,数据,数据——define byte
    在源代码段中使用数据:
               在debug中加载.exe文件,我们手动将CS:IP指向指令执行的第一句,然后就可以执行。
               在系统中如果要直接执行.exe文件,会出现问题,因为程序的入口处并不是代码,而是数据。因此,用“ start:”标号和对应的end “start”标号来设置程序的入口。
            
  • 在代码段中使用栈:
                申请栈空间:通过定义数据来获得一段空间。即定义:dw 0,0,0,0,0,0,0,0,0
                初始化栈空间:将SS:SP指向CS:(数据段长度+栈段长度),注意是16进制!示例:
    dw  0123H,0123H,0123H,0123H,0123H,0123H,0123H,0123H         数据共16字节,IP:00——0F
    dw 0,0,0,0,0,0,0,0        栈共16字节,IP:10——1F
    则SS:SP 为CS:20
    数据、代码、栈放在一个段的结构:
    assume cs:code
    code segment
                ……数据……
                ……堆栈……
    start:
                ……代码……
    code ends
    end start
  • 可执行文件:= 描述信息 + 程序。
                   程序 = 原程序的指令 + 数据;
           描述信息 = 处理伪指令所得到的信息。
               
  • 在程序中,段名就相当于标号,它代表了段地址,是即时数而非存储器操作数。
          
  • 将数据、代码、栈放入不同的段:在代码段中,入口处就在第一条指令处;用代码段标号来初始化SS和DS的地址,如: mov ax  , data       mov ss , ax      mov sp , 10H
          
  • 包含多个段的程序结构:
    assume cs:code ds:data ss:stack
    data segment                            ;最先出现的data段的段地址最小
                ……数据……
    data ends
    stack segment                           ;其次是stack段的段地址增加
                ……堆栈……
    stack ends
    code segment                            ;最后code出现最晚,段地址继续增加
    start:
                ……代码……
    code ends
    end start
           
  • 如果一个程序中,段的顺序为:代码——数据——栈,而代码段共有34个字节的指令,数据段有4个字节的指令,栈段有4个字节的指令,且代码段段地址为X。那么(DS)=X+3 ,(SS)=X+4。
    计算方法:34/16=2.1 >= 2.0 ,则(2.0+1)*16=48 byte 或者写为3H byte。
                        4/16=0.2 >=0.0,则(0.0+1)*16=16byte 或者写为 1H byte。

     

  • 原创粉丝点击