zoukankan      html  css  js  c++  java
  • 实验 2 用机器指令和汇编指令编程

    实验任务一、

      ·使用e命令修改 0021:0~0021:f数据,将连续8个字节改为30H, 31H, 32H, 33H,34H,35H,36H,37H,使用d命令查看修改后的结果

      

      ·使用debug,写入程序段(将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021)

      将程序段写入后,可以使用r指令查看当前CS:IP

      

      使用t指令单步执行查看结果

      ·mov ax,0021

      

      ·mov ds,ax

      

      ·mov ax,2200

      

      ·mov ss,ax

      

      【注意:此处指令 mov sp,0100被略过,原因:在执行修改ss的指令后,即此处执行mov ss,ax后,下一条指令因中断机制被紧接执行】

      ·mov ax,[0]

      

      ->ax=3130

      ·add ax,[2]

      

      ->ax=6462

      ·mov bx,[4]

      

      ->bx=3534

      ·add bx,[6]

      

      ->bx=6c6a

      ·push ax

      

      ->sp=00fe  修改的内存单元的地址为2200:00fe,内容为6462h

      ·push bx

      

      ->sp=00fc  修改的内存单元的地址为2200:00fc,内容为6c6ah

      ·pop ax

      

      ->sp=00fe  ax=6c6a

      ·pop bx

      

      ->sp=0100  bx=6462

      ·push [4]

      

      ->sp=00fe  修改的内存单元的地址为2200:00fe,内容为6c6ah

      ·push [6]

      

      ->sp=00fc  修改的内存单元的地址为2200:00fc,内容为3736h

    实验任务二、

      1.记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f的值,及修改后查看的部分

      

      

      

      2.单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。

      第一步:mov ax,2000

      

      内容没有变化

      第二步+第三步:mov ss,ax+mov sp,10

      

      【注意到,此时在执行完mov ss,ax后,同样由于中断机制,紧接着执行mov sp,10语句。且mov sp,10必须跟在mov ss,ax后,(因为EA(有效地址)=段基址*16+偏移地址,设置了段基址,就得马上设置偏移地址,否则就会默认sp(堆栈指针)为0。故一般需要连着使用。)】

      前三步执行的作用:设置ss=2000h,sp=0010h 即初始化栈顶

      初始化栈顶2000:0010  初始化栈底:2000:0010

    总结、

      通过实验,更进一步了解了CPU提供的栈机制,也对push、pop两条指令有了更进一步的掌握。 

      

      

  • 相关阅读:
    PHP微信墙制作
    SSM框架构建多模块之业务拆分实践
    系统设计和系统划分有定律可循
    说说application/x-www-form-urlencoded和application/json的区别
    记一次Eclipse关于JDK和JRE的问题
    SVN和Git的比较
    程序员枪击事件引发的背后思考
    高性能JavaScript之加载和执行
    业务拆分的思考
    谈谈运维人员谨慎操作系统环境和管理
  • 原文地址:https://www.cnblogs.com/Xingxixi/p/9863905.html
Copyright © 2011-2022 走看看