• 实验 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两条指令有了更进一步的掌握。 

      

      

  • 相关阅读:
    linux中内存使用,swap,cache,buffer的含义总结
    haproxy启动时提示失败
    pcs与crmsh命令比较
    用yum下载rpm包(不安装)到指定目录
    Openstack的镜像属性
    ceph 对接openstack liberty
    ceph 创建和删除osd
    linux之fstab文件详解
    OpenStack Swift集群部署流程与简单使用
    swift(Object Storage对象存储服务)(单节点)
  • 原文地址:https://www.cnblogs.com/Xingxixi/p/9863905.html
Copyright © 2020-2023  润新知