• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

孤独的饺子、

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实验1 用机器指令和汇编指令编程

实验一

实验任务(1)

  用A命令和E命令两种方式将指令写入内存。用T命令单步调试,观察CS:IP的指向,附上实验截图。

  (1)A指令

    

    

  (2)E指令

            

 实验任务(2)

  写入指令:

               

  调试开始:

            

  调试结束:

            

  分析:2的8次方位256,对应于16进制的0100。

 实验任务(3)

  查看内存中PC机主板上的ROM中写有的生产日期,在内存FFF00H~FFFFFH的某几个单元中。

  查找该生产日期:

            

  分析:发现日期为1992年1月1日。

  尝试修改日期:

            

   分析:发现日期为1992年1月1日,并没有修改成功。其原因是,日期信息位于内存的ROM区域,无法进行写入或修改,这等于改写只读存储器中的内容。

实验任务(4)

  实验结果:

            

  分析:在窗口中多了个如图所示的小图标。

  尝试修改数据:

           

  分析:和第一次图标位置相同,但图标形状产生变化。

  尝试修改地址:

      

 

   分析:和第一次图标形状相同,但是图标位置发生改变。

   总结:在8086PC机内存中,A0000~BFFFF为显存地址空间,在此空间写入不同的数据可以显示不同的图标,在不同的地址中写入数据,图标显示的位置也不同。

实验二

 实验任务(1)

  使用 e 命令修改 内存单元0022:0~0022:f 中的数据,及修改后查看是否正确写入的操作:

          

   使用 a 命令输入的 p74 指令:

          

  每一行指令单步调试:

          

                     

          

         

  结果如下: 

   ax=5150;

   ax=A4A2;

   bx=5554;

   5x=ACAA;

   sp=00FE;  2200:00FE;  A4A2;

   sp=00FC;  2200:00FC;  ACAA;

   sp=00FE;  ax=ACAA;

   sp=0010;  bx=A4A2;

   sp=00FE;  2200:00FE;  5554;

   sp=00FC;  2200:00FC;  5756;

   总结:实际情况与预估一致。

 实验任务(2)

  使用A命令输入7行指令,然后使用E指令修改2000:0~2000:f的值,然后进行查看:

         

  单步调试每一行汇编指令,每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化:

    

        

        

   分析:查阅资料后发现,栈可以在执行指令时进行相关寄存器数据的暂存,暂存的有 CS、IP 等的值。

  (1)前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?

    第1行:将数值2000存入寄存器AX

    第2行:将AX寄存器中的数值赋给SS栈段段寄存器

    第3行:初始化栈顶偏移地址为10

    初始时栈顶为2000:0010,栈底为2000:000E

  (2) 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。

    查阅资料,我了解到在8086CPU下,自定义的内存空间作为栈时,CPU会为了保证栈的完整性,将与栈相关的变量一起存到了该内存空间内,如CS:IP等。

 

posted on 2020-10-12 19:50  孤独的饺子、  阅读(126)  评论(3)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3