• 汇编实验2 用机器指令和汇编指令编程


    实验任务

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

    a.使用 e 命令修改 0021:0~0021:f 数据为30H,31H,32H,33H,34H,35H,36H,37H,并查看。

    截图

    b.将下面的程序段写入内存

    mov ax,0021

    mov ds,ax

    mov ax,2200

    mov ss,ax

    mov sp,0100

    mov ax,【0】;                                             ax=3130H;

    add  ax,【2】;                                             ax=6462H;

    mov bx,【4】;                                             bx=3534H;

    add  bx,【6】;                                             bx=6C6AH;

    push ax;                                                            sp=00FEH;           修改的内存单元的地址为2200:00FEH,内容为6462H;

    push bx;                                                         sp=00FCH;           修改的内存单元的地址为2200:00FCH,内容为6C6AH;

    pop ax;                                                           sp=00FEH;        ax=6C6AH;

    pop bx;                                                           sp=0100H;         bx=6462H;

    push 【4】                                                        sp=00FEH;        修改的内存单元的地址为2200:00FEH,内容为3534H;

    push 【6】                                                        sp=00FCH;        修改的内存单元的地址为2200:00FCH,内容为3736H;

    以上是我对这段代码的理论分析结果,接下来我们具体操作看看。

     输入期间发生了点小差错,不过没关系,继续补上(不知道对内存空间有没有影响)

     

    ax,bx的值都符合理论上的值。第一个SP也符合。

     

     

    查看内存单元,符合预期值。

    (2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

    输入7行指令,又打错了,汇编代码还需要多打打,用e命令对2000:0之后的16个内存单元值进行修改,

    然后通过d命令对内存单元进行查看,修改成功。

    2000:0开始的值未发生变化

     

    这一步2000:0 f 的值开始发生变化,缺少了mov ss,10的操作,ss段寄存器的值变为2000,数据段的地址发生了变化,

    进栈,操作

    3366H进栈,

    第一行代码的功能为将ax的值赋为2000,把ss段寄存器的赋为2000,此时的栈顶2000:0010,mov sp,10,的意思经过查阅资料发现是留10个内存空间给接下来的寄存器比如cs等等。

    至于书上写的中断机制,即debug每用t执行命令,会停止继续执行,显示当前每个存储器的状态和下步操作,而上面mov ss,10肯定执行了,但是下一步栈不能完全还原上一步中个存储器的状态,所以导致2000:0之后的f'个内存单元的数值发生了变化。

    总结与反思

    1.还需要注意push是sp-2,pop是sp+2,空栈的栈顶为0010H。

    2.对于-d命令可以时刻观察某一或某段内存单元的内容,有助于进行实验。

    3.通过查阅资料可以初步了解中断机制的过程,这是在以后的汇编编程中要注意的。

    4.汇编语言的书写 还需要经常练,经常写错,多敲个回车......

  • 相关阅读:
    HTML5来了,7个混合式移动开发框架
    React Native
    Cordova
    Java Next: Groovy、Scala or Clojure?
    分页 Database Frist
    Kindeditor编译器
    sql内连接
    layer删除
    实现用户注册,要求输入用户名之后,焦点离开判断用户名是否存在,如果存在给出提示,不存在允许注册改用户。要求使用AJAX
    实现根据用户名查询用户信息,要求用AJAX
  • 原文地址:https://www.cnblogs.com/-Cold/p/9862586.html
Copyright © 2020-2023  润新知