• 实验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关键数据,所以,你的栈里就有些不是你操作的数据了。

  • 相关阅读:
    NodeJS简介
    SQL学习笔记(1)
    Linux常用命令03
    Linux常用命令02
    Linux常用命令01
    Java接口和抽象类的区别
    Optional解决空指针
    JVM的内存管理机制-转载
    mysql explain详解-转载
    rabbitmq消息处理-转载
  • 原文地址:https://www.cnblogs.com/Vincent12/p/9892635.html
Copyright © 2020-2023  润新知