zoukankan      html  css  js  c++  java
  • 实验3 编程、编译、连接、跟踪

    四、实验结论

    练习一:

    (1)编写汇编源程序 t1.asm;

    assume  cs:code
    code segment
        mov ah,2
        mov dl,6
        add al,30h
        int 21h
        
        mov ah,2
        mov dl,5
        add dl,30
        int 21h
    
        mov ah,4ch
        int 21h
    code ends
    end

     (2)对源程序 t1.asm 进行汇编、连接、运行、调试;

    step1:编译;

    step2:连接;

    step3:运行;

    以上step1~step3均直接在进入dosbox之后执行;


    如果将代码中两次给dl赋值的值改变,例如变为6和5,则运行之后会出现如下的结果:

    由此可以猜测:给dl赋的值会导致运行后出现不同的图标,每一个图标的形状应该和dl寄存器中的值有关;

    注:我将t1.asm文件存放在与有link.exe和masm.exe的目录下


    以下操作是进入debug环境进行调试的:

    (1)在debug中运行t1.exe文件并查看当前各个寄存器中的值;

    我们可以观察到CX中此时存储的值是0015,则说明当前代码的长度是15;

    (2)我们通过u命令进行反汇编,此时的代码是从当前CS和IP所指向的位置开始写入的(???此处不是很确定),所以我们应该从当前CS:IP指向的位置开始查看内存中的机器码以及反汇编之后得到的汇编指令。因为代码段的长度为15,但是初始地址是从0开始的,所以我们只需要查看偏移地址从0~14的内存空间。

    (3)由于此时CS:IP指向的就是当前代码段的起始位置,所以直接用t命令执行;

    此时我们看到下一条即将执行int 21这条命令,所以接下来用p命令执行;

    此时出现了图案;


    倘若此时还是用t命令执行,会出现以下情况,会发现下面要执行的命令不是我们所预期的;


     所以,我发现只要下一条命令是int 21,就用p命令执行,其他都可以用t命令执行;


    在单部调试过程中,DS和CS寄存器中的关系始终满足:CS=DS+10;

    验证PSP(程序段前缀)的头两个字节是 CD 20:


    练习2:

    (1)编写汇编源程序 t2.asm;

    assume cs:code
    code segment
        mov ax,0b800h
        mov ds,ax
    
        mov bx,0
        mov [bx],0433h
        
        add bx,2
        mov [bx],0436h
    
        mov ax,4c00h
        int 21h
    code ends
    end

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

    • 运行程序,没有出现预期的红色数字36;

    • 在执行t2.exe文件之前进行cls操作之后;

    • 将源代码中 line7 的 0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

    • 试将源代码中 line7 的 0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,得到可执行文件 t2.exe。


    在使用debug调试t2.exe文件的时候,我们进行单部调试;

    在执行完mov [bx],0433之后,已知这条语句和mov [0],0433等效;查看ds:0这段内存空间;发现没有将0433存入内存中!!!(已解决)

    同样的,mov [bx],0436执行之后,以ds:2开始的内存中也没有被存入数据,不知道原因是什么???(已解决)

    最后程序正常结束:


    Solution:

    • mov [bx],0433h和mov [bx],0436h都是无效指令,mov指令不支持将数据直接送入内存单元
    • 就我目前所知道的实现数值显示有两种方法:(1)用int 21中断(2)加数据写入显存中
  • 相关阅读:
    行动- 一桌菜,十几盘,有荤有素,有凉有热,怎么吃呢?你可以找一盘看起来好吃的,也可以找一盘离自己近的,都行。但是,得动筷子。不管怎么吃,最重要的是得动筷子。学技术也是一样。 有的人死活不动筷子,还不断念叨:“我要开始吃了。我马上就要开始吃了。我只要开始吃就能吃饱。我吃饱了就不饿了。你能不能告诉我该先吃哪一盘?先冷盘后热菜再喝汤这样是不是最好?但是我听说广东人都是先...
    行动
    互相牵制的能力
    我的信仰
    my life
    PDCA循环
    命运
    健身 赚钱 ; 旅行 用心爱一个人就行了 其他的都会开挂来临~
    灵魂
    陪伴的意义
  • 原文地址:https://www.cnblogs.com/Sun-Yiwen-blog/p/9964165.html
Copyright © 2011-2022 走看看