实验3 编程、编译、连接、跟踪

实验

将以下程序保存为asm文件,并使用Debug跟踪它的执行过程,写出每一步后,相关寄存器中的内容和栈顶的内容。

assume cs:codeseg

codeseg segment

    mov ax,2000H
    mov ss,ax
    mov sp,0
    add sp,10
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx
    
    mov ax,4c00H
    int 21H

codeseg ends

end

PSP的头两个字节是CD20

解答

1. 现将以上程序保存为asm文件

2. 进入Debug模式
3. 查看PSP的头两个字节是否为CD20

关于PSP的相关内容,请查看第四章 第一个程序中的4.9小节。

4. 使用T命令逐步执行,遇到int 21H命令后,要使用P命令。
  • 寄存器的初始状态:

    从寄存器的初始状态可以看出来,PSP的起始地址为075C:0000,程序的起始地址CS:IP为076C:0000
  • mov ax,2000H

    栈顶地址为076B:0000,内容为:0000
  • mov ss,axmov sp,0(栈段寄存器SS被改变后,下一条指令也紧接着被执行,有关这部分的内容,可看实验2 用机器指令和汇编指令编程)。

    栈顶地址为2000:0000,内容为:0000
  • add sp,10

    栈顶地址为2000:0000A,内容为:0000
  • pop ax

    栈顶地址为2000:000C,内容为:0000
  • pop bx

    栈顶地址为2000:000E,内容为0000
  • push ax

    栈顶地址为2000:000C,内容为0000
  • push bx

    栈顶地址为2000:000A,内容为0000
  • pop ax

    栈顶地址为2000:000C,内容为0000
  • pop bx

    栈顶地址为2000:000E,内容为0000
5. 程序的退出

(1)正常使用T命令执行mov ax,4c00H
(2)使用P命令执行int 21H

问题

在我的dosbox中,这个程序的初始栈顶地址总是被指定为2000:0000,当程序还没有执行改变栈段地址和偏移地址的汇编指令时,2000:0000~000F的内容为0:

但是一旦被执行了相关汇编指令后,即执行了以下三条命令:mov ss,ax,mov sp,0, add sp,102000:0000~000F的内容就发生了变化:

暂不知原因

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux驱动编程编译实验原理涉及以下几个方面: 1. 内核模块编程:Linux驱动程序以内核模块的形式存在,内核模块是一段可以被动态加载和卸载的代码。驱动程序需要使用适当的内核API函数来与硬件设备进行通信,以实现设备的控制和数据传输等功能。 2. 内核编译系统:Linux操作系统由内核和各种用户空间工具组成。内核编译系统负责构建和编译内核源代码,生成可加载模块和内核镜像。内核编译系统通常使用Makefile和一些配置文件来管理构建过程。 3. Makefile:Makefile是一个包含了构建规则和命令的文本文件,用于自动化构建过程。在驱动程序的开发中,Makefile用于指定编译器、链接器、源文件和目标文件等信息,并定义了编译和链接的规则。 4. 编译驱动程序:使用Makefile和相应的内核编译系统,可以将驱动程序源代码编译为可加载模块。编译过程会将源代码翻译成机器代码,并生成与内核版本匹配的模块文件。 5. 加载和卸载驱动程序:通过insmod命令可以将驱动程序加载到内核中,使其成为内核的一部分。加载驱动程序后,它可以与硬件设备进行交互。卸载驱动程序使用rmmod命令,将其从内核中移除。 6. 调试和日志:在驱动程序的开发和调试过程中,通常会使用调试工具和日志来定位问题和记录运行信息。Linux内核提供了printk函数来打印日志信息,可以通过dmesg命令查看系统日志。 以上是Linux驱动编程编译实验原理的基本概述。要深入学习和理解这些原理,需要进一步研究Linux内核开发和驱动程序开发的相关文档和资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Mercurial

请我喝杯焦糖玛奇朵叭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值