王爽汇编语言第三版实验2

实验任务

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

assembly 复制代码
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0]     ;ax=C0EAH
add ax,[2]     ;ax=COFCH
mov bx,[4]    ;bx=30F0H
add bx,[6]     ;bx=6021H
push ax       ;sp=00FEH ; 修改的内存单元的地址是2200:00FE内容为COFCH
push bx       ;sp=00FCH ; 修改的内存单元的地址是2200:00FC内容为6021
pop ax       ;sp=00FEH ; ax=6021H
pop bx       ;sp=0100H; bx=COFCH
push [4]      ;sp=00FEH; 修改的内存单元的地址是2200:00FE内容为30F0
push [6]      ;sp=00FCH; 修改的内存单元的地址是2200:00FC内容为2F31

解答:

  1. 首先用d命令得到内存FFFF0~FFFFF中的值
  1. 通过显示的值,进行手算一遍,填入上方的表格

  2. 写程序验证,方便起见,我从内存段1000:0开始编写

  3. 执行程序

这里可以注意到在执行完mov ss,ax后立刻执行了mov sp,0100,因此程序直接跳到mov ax,[0000]


分析后面写

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

解答:

首先使用debug写入相应的命令,对程序的运行结果进行验证

事先在2000:0处写入0

修改cs和ip寄存器的值

执行命令,并查看2000:0的值

这些数值很容易能看出是寄存器的内容

  • 现象:在程序未执行之前,内存地址2000:00仅显示0值,但是在构建栈结构后,此内存地址显示出新数据

  • 分析:在网上搜集资料后,得知当使用t命令触发单步中断时,发生了寄存器值入栈操作,CPU自动将中断处理所需的注册值压入栈中,这解释了这些数据的来源。

  • 具体内容:参照课本P249,P238

相关推荐
liulilittle1 天前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
工业互联网专业1 天前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验
small_wh1te_coder2 天前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c
Ronin-Lotus14 天前
微处理器原理与应用篇---ARM常见汇编指令
汇编·arm开发·微处理原理与应用
永夜的黎明17 天前
【二进制安全作业】250616课上作业1-栈溢出漏洞利用
c语言·汇编·安全
Geometry Fu19 天前
物联网控制技术 知识点总结 第三章 汇编语言 第四章 C51语言
汇编·物联网·51单片机
半桔19 天前
【Linux手册】进程的状态:从创建到消亡的“生命百态”
linux·运维·服务器·汇编·深度学习·面试
一条叫做nemo的鱼22 天前
从汇编的角度揭开C++ this指针的神秘面纱(下)
java·汇编·c++·函数调用·参数传递
一条叫做nemo的鱼23 天前
从汇编的角度揭开C++ this指针的神秘面纱(上)
汇编·c++·算法·函数调用·this指针·参数传递
qwertyuiop_i24 天前
汇编(函数调用)
汇编·windows·函数调用