• 实验三


    实验内容

    练习1

    编写汇编源程序t1.asm

    在此软件下完成

    输出结果为36

    将line4和line9中寄存器dl的值分别修改为0-9中任何一个数字,重新汇编,连接,运行,观察程序输出结果的变化。

     结果为寄存器dl中值的逐个输出。

     用debug对生成的可执行文件t1.exe进行调试。

    1.使用r命令查看。观察寄存器cx的值是多少,观察寄存器ds和cs的值是多少,它们之间是否满足关系(cs)=(ds)+10h。

    cx=0016 ds=075a cs=076a  满足(cs)=(ds)+10h

    2.psp(程序段前缀)的头两个字节是CD 20,用debug查看psp的内容,验证是否如此。

    百度上说

    program segment prefix ,简称PSP(程序段的前缀)
    当输入一个外部命令或通过EXEC子功能(系统功能调用INT 21h的子功能号为4BH)加载一子程序时,COMMAND确定当时内存可用空间的最低端作为程序段起点。在程序所占内存空间的前256个字节中,系统会为程序创建程序的前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;PSP内有程序返回、程序文件名等信息,可以通过研究psp定位文件名信息,进而获取文件名。
    从这段内存区的256字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0 (其中SA为系统为程序分配内存的起始位置的段地址即当前寄存器DS的内容)

    的确如此

    3.使用u命令对t1.exe进行反汇编,观察反汇编得到的源代码。

    4.使用t命令和p命令(遇到int命令时,用p命令)单步调试,观察结果。

    练习2

    同样的软件下出错了

    编写汇编源程序t2.asm

    实验3中第2个程序写法,里面隐藏着一个error,尽管在dosbox环境中汇编器没有报错,但在masm for windows集成软件环境里,明确定位了错误行,请尝试后,结合错误提示,把错误找出来并修正。

    无效的指令操作数

     大佬处得知 word ptr 指定长度

    8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。

    line6-7相当于mov [0], 0433h line9-10相当于mov [2], 0436h 至于为什么这样使用两条指令,而不直接简化写成上面的形式,有两个原因。其中一个 是方便以后循环;另一个原因,留待第5章再解释说明。暂时,先这样使用。 

    对源程序 t2.asm 进行汇编、连接、运行、调试

    1.对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察程序运行 结果,验证是否在屏幕左上方出现红色的数值36。

     

    经测试,有些平台在 dosbox 下运行这个程序时有些问题,如果屏幕左上方没有 输出结果,请运行程序t2.exe前,先输入cls命令清空一下屏幕,然后再执行t2.exe。

    2. 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

     

    3. 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

    延伸思考和分析

     练习一程序结果为寄存器dl中值的逐个输出。练习二为【bx】最低位输出,通过改变,高位控制颜色。

    二种方法输出位置不同,练习一直接输出,练习二位左上方输出。

    总结与体会

    在操作系统中,执行可执行文件时,操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置cs:ip指向第一条要执行的指令),然后由CPU执行程序。

     mov ax,4c00h

    int 21h

    这两条指令所实现的功能就是程序返回。

  • 相关阅读:
    CentOS 设置mysql的远程访问
    centos的防火墙命令
    gorm的related理解和实例
    epoll相比select,poll的2个改进点
    limit越往后越慢,如何解决?
    LRUCache的设计,实现和调试
    map可以并发读,不能并发写
    2020年4月上旬算法讨论4(快排和堆排)
    删除链表节点代码编写复盘(从直接思路到优雅思路)
    2020年3月下寻算法讨论3(链表-下)
  • 原文地址:https://www.cnblogs.com/byxy/p/9973947.html
Copyright © 2020-2023  润新知