zoukankan      html  css  js  c++  java
  • 汇编 实验二

    实验任务1:

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

    mov ax,0021
    mov ds,ax
    
    mov ax,2200
    mov ss,ax
    
    mov sp,0100
    
    mov ax,[0]                              ;ax=3130
    add  ax,[2]                              ;ax=6462
    mov bx,[4]                              ;bx=3534
    add  bx,[6]                              ;bx=6C6A
    
    push ax                             ;sp=00FE;修改后的内存单元的地址是220FE    内容为 6462
    push bx                             ;sp=00FC;修改后的内存单元的地址是220FC    内容为 646A
    pop ax                               ;sp=00FE;ax=6C6A
    pop bx                               ;sp=0100;bx=6462
    
    push [4]                            ;sp=00FE;修改后的内存单元的地址是220FE    内容为 3534
    push [6]                            ;sp=00FC;修改后的内存单元的地址是220FC    内容为 3736
    

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

    2.使用a命令输入指令

    3.对每一行指令进行单步调试

    检验一致

    实验任务2

    观察实验过程,分析为什么2000:0~2000:f中的内容会发生改变?

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

    2.单步调试每一步,并同时查看2000:0~2000:f的值

     分析:

    前三行汇编指令的功能为:将20000H~2000FH这段空间当做栈,初始化栈顶为2000:0010

    栈底为栈顶+2  即2000:0012

    基于单步调试观察到的变化,我觉得:

    因为我们一开始将2000:0~2000:f的这段空间作为一个栈来使用

    所以对这个栈进行的操作就会体现在这段空间里,因此内容肯定会发生变化

    总结与体会:

    栈作为一个逻辑上的数据结构,具有后进先出的特性。我们可以安排任意何时的段作为内存,本质上都是

    二进制数据,区别有寄存器决定,如CS,IP决定指令,SS,SP决定栈段。

    push和pop实质上是内存转移指令,在栈空时,栈顶为栈底-2,存储时都以字为单位存储。

  • 相关阅读:
    Linux基础巩固--Day4--文本处理
    Linux基础巩固--Day3--用户组及权限操作
    2020撸python--argparse列出D盘目录详情
    2020撸python--socket编程
    Linux基础巩固--Day2--文件操作
    Linux基础巩固--Day1--背景介绍
    Let's Go -- 初始go语言
    ValueError: Related model 'users.UserProfile' cannot be resolved
    半虚拟化驱动virtio-Windows
    virt-install 创建虚拟机
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/9851855.html
Copyright © 2011-2022 走看看