zoukankan      html  css  js  c++  java
  • 汇编——实验2

    实验2的任务相对较少,但是在预备知识中补充了一些新的概念和一个新的名词:中断机制。

    首先,在预备知识部分主要介绍了两大块内容。

    1.是在D,E,A,U命令中使用段寄存器;

    由之前所学到的知识可得调用d命令时,会出现"-d 段地址:偏移地址"的格式,由此引申出Debug在处理D命令的程序段中,必有将段地址送入段寄存器的代码,由CPU来执行这一段程序。而这一段寄存器就是ds段寄存器。同时D命令也提供了一种符合CPU机理的格式:"d 段寄存器:偏移地址"。例如:

    -r ds
    :1000
    -d ds:0      ;查看从1000:0开始的内存区间中的内容
    -r ds
    :1000
    -d ds:10 18       ;查看1000:10~1000:18中的内容

    同样的,E,U,A命令中也可以直接用段寄存器表示内存单元的段地址。见代码:

    -r ds
    :1000
    -e ds:0 11 22 33 44 55 66         ;在从1000:0开始的内存区间上写入数据
    
    
    
    -r ds
    :1000
    -u ds:0              ;以汇编指令的形式显示当前代码段中的代码
    
    
    
    -r ds
    :1000
    -a ds:0        ;以汇编指令的形式,向从1000:0开始的内存单元中写入指令

    2.是有关debug的T命令在执行修改SS得指令时出现的特殊情况(在这里引入了一个新的名词:中断机制)。

    这也与之后的实验任务(2)有关,让人感到很神奇的事情是在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也紧接着执行了,在这之中一定存在着我目前未知的“秘密”。在这里只能初步的下结论为 Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。这其中的原因与中断机制有关。(在这里我在网上搜索了一些有关中断机制的信息:https://blog.csdn.net/fivedoumi/article/details/50451228?utm_source=blogxgwz7)

    接着,就是实验的正文部分了。

    实验任务(1):使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况填空。

    (——首先用e命令修改内存单元内容)

    (——接着用a命令写入汇编指令,并开始调试)

    (——用t命令调试push ax指令,查看栈段中相应部分是否发生变化)

    (——用t命令调试push bx指令,查看栈段中相应部分是否发生变化)

    (——观察t命令在执行pop ax,pop bx时,ax与bx寄存器是否发生变化)

    (——把内存单元在储存的内容压入栈中,观察栈中内容是否发生变化)

    (上图是理论分析得出来的结果)

    实验发现实际与理论上的结果一样,但是在执行指令mov ss,ax后,紧接着就执行了mov sp,0100的指令,在黑框中没有显示出来,这与预备知识中第二块内容相吻合。

    实验任务(2):根据图中所给出的实验过程,分析为什么2000:0~2000:f中的内容会发生改变?

    (——a命令写入汇编指令,并查看相应内存单元的内容)

    (——开始单步调试,每次都查看相应的内存单元的内容)

    mov ax,2000——将2000H放入ax寄存器中,此时ax=2000H

    mov ss,ax——将ax寄存器中的内容移入ss寄存器中,此时ss=2000H

    mov sp,10——将10H移入sp寄存器中,此时sp=10H,意味着该空栈此时栈顶的位置在2000:0010的地方,而栈底为2000:000e的地址处。

    通过单步调试可以发现,内存地址从2000:0开始到2000:f结束的这段栈空间内,发生着一些很奇妙的变化。在还没开始将ax的值压入这段栈空间时,它内存单元的内容发生了改变。之后执行完push ax,栈内存单元内容发生改变是正常的,而在此之前会什么会发生变化呢?通过查看课后习题的答案,得到了这样的解释:因为Debug中使用T等指令引发了中断造成的,中断过程中使用当前栈空间存放CPU关键数据,所以此时该栈里有些不是我们自己的操作数据了。在解释中还提及到了如果在中断过程中压栈使栈越界的话,在windows下的命令窗口会强制关闭。想来或许这正是计算机的高深与神秘之处了。

  • 相关阅读:
    node.js 笔记一
    mysql 错误2203 1061 及安装最后出现2003现象的解决办法
    git shell 命令大全
    Mysql常用命令行大全
    php 魔术方法 说明
    php linux 环境搭建
    Linux下源码编译安装MySQL 5.5.8
    linux 压缩解压缩命令
    ftp 命令全集
    sublime text2
  • 原文地址:https://www.cnblogs.com/zjybel/p/9866611.html
Copyright © 2011-2022 走看看