• 变量存储与长度


    研究实验三

    在学习汇编语言的时候,提供了很多种寻址方式,便于我们找到内存单元地址,我们关注数据,无非关注数据的两个量:数据存放的位置;数据有多大。那么,在C语言中,我们如何使用内存存储数据,使得我们能够达到和汇编一样的水平:即我们清楚的知道我们的数据在哪,我们知道我们的数据与多大?

    下面通过实验一研究,C语言中数据如何放置到内存中,通过其汇编代码使我们更清晰的去认识这一点:

    图1  uml.c程序对应的汇编代码

    对于图中显示的汇编代码存在下列问题:字符’a’的偏移地址是2000,那么它的段地址是谁?即如何找到’a’?

    通过单步执行程序,发现和汇编语言中国结论一样,段地址默认还是DS

    通过修改ip使其指到1fa,开始用t命令单步执行程序,然后通过d命令查看相应内存内容,发现C语言对使用内存存储数据达到了和汇编语言一样的目的!

    以及我们发现如下特点,对于C语言中所出现的段地址:偏移地址或者寄存器表示偏移地址的情况,均采用寄存器BX传递地址。

    用C语言在屏幕上显示字符:

    图2  C语言屏幕显示

    可以发现,再次印证,C语言能够达到和汇编同样的目的,同样能够随心所欲的操控内存。

    图3 全局变量和局部变量

    从对应的汇编语言可以看出的,全局变量存在一个固定的内存里,而局部变量存放在堆栈中。而push bp,mov bp,sp的作用就是为了用于存放局部变量的而设置的。

    图4  返回值

    通过汇编代码可以看出程序返回值存放在AX中。

    图5  安全空间

     

    总结体会:

    本次研究实验,最重要的是学到了两点:C语言也可以和汇编语言一样,能够达到随心所欲操控内存的目的,不管对于何种语言,我们对所关心数据的参数,无非是数据在哪,数据有多大。以及,全局变量存放在一个固定的内存单元中,局部变量存放在堆栈中。

  • 相关阅读:
    ovs QOS
    OpenvSwitch端口镜像
    MyCat入门指南
    Mycat跨分片Join
    MyCAT 命令行监控
    MyCat的分片规则
    FreeMarker初探--介绍
    FreeMarker初探--安装FreeMarker
    linux 安装配置zookeeper
    Maven 环境搭建及相应的配置
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/7995360.html
Copyright © 2020-2023  润新知