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

    实验任务:

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

    (为了便于验证实验结果,对「2. 实验任务」中的(1)做如下两点调整:① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H  ② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021)

    实验结果:

    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= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 6462H

    push bx       ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6c6AH

    pop ax        ;sp= 00FEH ,ax= 6c6AH

    pop bx        ;sp= 0100H ,bx= 6462H

    push [4]      ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 3534

    push [6]      ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 3736

    实验截图:

    (2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

     

    第一行汇编指令功能:将2000送入AX寄存器

    第二行:将ax的值赋给ss

    第三行:将0100赋给ss

    初始时栈顶和栈底分别是2000:0010和2000:000E。

    并且2000:0~2000:f的内容发生改变是因为在debug使用t等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。

  • 相关阅读:
    iOS URL中汉字的编码和解码
    指针函数和函数指针
    面试题1:赋值运算符函数
    线程安全的单实例模式
    大数相加
    网格走法
    stringstream字符串流的妙用
    判断一棵二叉树是否为二叉排序树
    idea 从javadoc中复制内容出来
    idea开启jquery提示及如何找到学习目标
  • 原文地址:https://www.cnblogs.com/Vincent12/p/9892635.html
Copyright © 2011-2022 走看看