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

    用机器指令和汇编指令编程

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

    img

    img

    img

    img

    mov ax,0021     ;将0021赋值给ax
    mov ds,ax       ;通过ax将0021赋给ds寄存器
    mov ax,2200     ;将2200赋值给ax
    mov ss,ax       ;通过ax将2200赋值给ss
    mov sp,0100     ;将0100赋值给sp,则栈段为2200:0100
    mov ax,[0]       ax=3130    ;此刻我们将0021:0000处的数据赋值给ax
    add ax,[2]       ax=6462    ;即ax+0021:0002
    mov bx,[4]       bx=3534    ;将0021:0004处的数据赋值给bx
    add bx,[6]       bx=6C6A    ;即bx+0021:0006
    push ax          sp=00FE    ;修改的内存单元地址是 2200:0100内容为6462;入栈
    push bx          sp=00FC    ;修改的内存单元地址是2200:00FC内容为6C6A;入栈
    pop ax           sp=00FE;ax=6C6A;将栈顶的数据出栈赋值给ax
    pop bx           sp=0100;bx=6462;将栈顶的数据出栈赋值给bx
    push [4]         sp=00FE;修改的内存单元地址是 2200:0100内容为3534  ;入栈
    push [6]         sp=00FC;修改的内存单元地址是2200:00FC内容为3736;入栈
    

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

    img

    img

    img

    mov ax,2000
    mov ss,ax   ;相当于将2000赋值给ss,即栈的段地址
    mov sp,10   ;相当于将0010赋值给sp,即栈的偏移地址
    

    那么初始的栈顶为2000:0010,而栈底则为2000:000E

    截图上看,我们在执行指令已经将2000:0 f内的数据全都赋值为零,而在进行栈的初始化后,其中的字节发生了改变,这是为什么呢?

    t命令实际是引发了单步中断,执行中断例程时,CPU会将一些中断例程使用的的寄存器变量自动压栈到栈中,此例中就包括了上述的寄存器变量的值。

    以上是我在网上搜索的结果,按照这种说法,CPU在执行初始化指令是将寄存器变量自动压栈,那么其中的数据也就改变了。

  • 相关阅读:
    安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息
    用jmeter监控服务器资源
    CSS获取兄弟节点
    selenium之CSS定位
    Linux find 命令详解
    git 添加文件的可执行权限
    判断三角形类型
    冒泡排序
    selenium 显示等待 隐式等待 和强制等待
    flask 基本配置和参数解释
  • 原文地址:https://www.cnblogs.com/-Anguvia-/p/9890771.html
Copyright © 2011-2022 走看看