• 【8086汇编-Day5】第二次实验


    • debug的使用

    偷个懒,之前写过了这里不再赘述

    • 实验

    1)实验1

    要求:用e将一些数据写入内存,用a写入一段程序,t 逐条执行 观察具体参数变化,并探究现象

    1.e写入,d检查

    2.a写入程序

    3.t 逐条执行

    这几步执行完,寄存器 ax=3130,这就体现了小端法:取低地址单元地址为字数据地址,以及数据存取原则:高高,低低。接着add完ax正常变成了6462。bx同理

    4.

    做完之后,ax寄存器和bx的值就交换了,这就是栈的先进后出。

    然后展示下push完内存里具体怎么存的

    5.

    这里其实重点是明白,压栈,弹出操作对象是字数据(两个字节)

    2)

    过程如下

    这里前三步是初始化栈的操作,ss保存的栈顶段地址,sp保存的栈顶偏移地址是10H,初始化后栈底地址就是栈顶地址-2,即2000:f

    这里有个重点,观察一下,一段内存被当作栈段来使用时,这段内存发生了什么变化?

    为了便于观察(其实也没多少帮助)我把2000:0000到000f内存全部赋1。

    可以看到,当栈初始化完后,有10个字节发生了变化,(由于用d查看的时候漏了一个字节,不过结合后面的显示结果可以猜出来遗漏掉的那个字节)

    变化具体如下图

    这个貌似涉及到中断的知识,我就简单讲下了,从栈底往上看,前两个字节放入标志寄存器的值(据说),接着两个字节压入了,cs寄存器的值,再接着是ip的值,紧接着两个字节的零(我没搞清是什么含义),最后2000:7 2000:8两个字节就是ax的值。

    为什么这是10字节是这么用呢,这大概就是中断过程

    • 总结

    为了理解现象中10个字节的变化的原因,特意去看了中断过程的知识,虽然自己懂了点,但是表达不出来很难受。

    还有疑问:为什么标志寄存器的值是01A3,还是说这两个字节根本就不是标志寄存器的值?

    还有然后存ip寄存器跟存ax的中间那两个字节的0是什么含义,希望有大佬解答下。。。

  • 相关阅读:
    hdu 4293 2012成都赛区网络赛 dp ****
    hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
    hdu 4288 线段树 暴力 **
    hdu 4278 2012天津赛区网络赛 数学 *
    zoj 3888 线段树 ***
    虚拟化技术详解
    BRD、MRD 和 PRD 之间的区别与联系有哪些?
    salt-master配置、salt-minion配置
    Shell 脚本实现 Linux 系统监控
    Centos 7 安装 Xen
  • 原文地址:https://www.cnblogs.com/hackmylife/p/9869682.html
Copyright © 2020-2023  润新知