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

    实验2

    1、          debug的使用之 段寄存器的使用

    -d 段寄存器:偏移地址 (偏移地址2)

    查看从【段寄存器:偏移地址】开始到偏移地址2(默认128字节)的内存中的内容

    示例:

     

     

    -e 段寄存器:偏移地址 修改值

    修改从【段寄存器:偏移地址】开始的内存中的内容

    示例:

     

    -u 段寄存器:偏移地址

    显示从【段寄存器:偏移地址】开始的汇编指令

    示例:

     

    -a 段寄存器:偏移地址

    从【段寄存器:偏移地址】开始写入指令

    示例:

     

    2、          实验任务

    (1)     将程序段写入内存,填空,单步执行后对比结果,并分析

    步骤:

    l  使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操 作

     

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

     

    l  每一行指令单步调试,观察结果

     

    填空结果:

     

    分析原因:粗心,pop 指令后,FE+2=100,而不是10

    (2)     将程序段写入内存,单步执行后思考比对结果

    步骤:

    l  使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分

     

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

     

    我的理解:

    前三行指令表明:

    1.将2000H数值传入寄存器ax中

    2.将寄存器ax的内容存入段寄存器ss中

    3.将10H数值传入寄存器sp中

    即修改栈顶指针的位置,留下一段空间作为栈使用

    初始时,栈顶是20110H,栈底是20000H

    经过我的观察,在涉及到修改栈寄存器ss的指令时,总是会自动执行下一步修改寄存器sp的值,可能这是一种简化的用法,使执行更方便

    实验2——总结

    我学到了:

    栈机制,栈在内存中的存储,栈的实现:栈顶指针与栈底指针、两个栈的寄存器(段寄存器ss,寄存器sp)、push与pop操作以及操作过程中两个寄存器的内容是怎么变化的,栈顶超界的问题不会被检查出来。

    我的感受:

    栈是一个常用的结构,能方便地逆序存储数据、交换数据,其基本原理也对我们理解指针有重要帮助,好好掌握能使我们受益匪浅

    ---恢复内容结束---

  • 相关阅读:
    intel instruction 指令速查
    WinDbg双机调试配置
    MSDN上关于WinDbg的手册
    build temu error about SDL
    taintCheck的实现
    Vim使用taglist功能
    Windows编写driver
    cabal替代脚本
    怎样理解Functor与Monad
    haskell基本语法
  • 原文地址:https://www.cnblogs.com/cjh-1023/p/9867911.html
Copyright © 2011-2022 走看看