zoukankan      html  css  js  c++  java
  • [汇编语言]-第六章 包含多个段的程序 将数据,代码,栈放入不同的段

     1 assume cs:code,ds:data,ss:stack
     2 data segment
     3     dw    0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
     4 data ends
     5 stack segment
     6     dw    0,0,0,0,0,0,0,0
     7 stack ends
     8 code segment    
     9 start:    mov ax,stack
    10         mov ss,ax
    11         mov sp,16    ;将设置栈顶ss:sp指向stack:16
    12         
    13         mov ax,data
    14         mov ds,ax    ;ds指向data 
    15         
    16         mov bx,0    ;ds:bx指向data段中第一个单元
    17         mov cx,8
    18     s:    push [bx]
    19         add bx,2
    20         loop s        ;将以上代码段0-16单元中的8个字符型数据依次入栈
    21         
    22         mov bx,0
    23         mov cx,8
    24     s0:    pop [bx]
    25         add bx,2
    26         loop s0        ;以上依次出栈8个字符型数据到代码段0-16单元中
    27         
    28         mov ax,4c00H
    29         int 21h
    30 code ends
    31 end start            ;指名程序的入口在start处

    1- 程序中有多个段,如何访问段中数据? 通过地址,段地址:偏移地址

      在程序中段名就相当于一个段号,它代表了段地址.

      mov ax,data //将名称为data的段地址送入ax

    2- Debug运行程序后 cx = 0050 表示整个code段为 50Byte 

    段地址+1 表示偏移地址+16

    0B60-0B61中间有0-F个字节

    想要存储50Byte的字节程序,需要50/16=3表示段地址+3

    code起始段地址为0B60则存储完代码后的段地址为0B62,如在接data段,则data段的段地址起始为0B63

    3-如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((N+15)/16)*16

    N分为被16整除和不被16整除。

    当N被16整除时: 占有的空间为(N/16)*16

    当N不被16整除时: 占有的空间为(N/16+1)*16,N/16得出的是可以整除的部分,还有一个余数,余数肯定小于16,加上一个16。

    两种情况总结成一个通用的公式:((N+15)/16)*16

  • 相关阅读:
    [Linux]yum开启rpm包缓存
    [Linux]centOS7-1-1503-x86_64下安装VM-TOOLS
    [Linux]centOS7下RPM安装Perl
    vue 之 pageage.json 和 webpack.config.js
    node 之 apache
    node 之 express
    node 之 基础知识
    npm nvm nrm的关系
    echarts 学习笔记
    git 操作学习
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3545951.html
Copyright © 2011-2022 走看看