• 实验3 编程、编译、链接、跟踪


    练习1:

    输入代码:

     1 assume cs:code
     2 code segment
     3     mov ah,2
     4     mov dl,3
     5     add dl,30h
     6     int 21h
     7     
     8     mov ah,2
     9     mov dl,6
    10     add dl,30h
    11     int 21h
    12 
    13     mov ah,4ch
    14     int 21h
    15 code ends
    16 end

    效果图:

    在DOS虚拟环境下用edit新建文本kk.asm代码如下:

    可以在用type + 文件名查看代码:

    对kk.asm进行汇编:

    第一种方法:进入masm后,再输入文件名。

    第二种方法:直接masm + 文件名

    连接:同样是两种,同上,不再赘述(只需选一种即可)

     运行:

     

    修改:将 line4和line9种寄存器dl 的值分别修改7,9

     

    再次汇编、连接、运行:

    得到结果79,将第四行dl修改后7H再加30H等于37H,显示在屏幕上为7

    同理,将第九行dl改为9H再加30H等于39H,显示在屏幕上为9 

    用debug进行调试:

    用U指令反汇编一下:

    再用T/P指令单步执行:

    遇到int 21时,需用P去执行而不是T,否则显示不出数字。

     说明:t命令和p命令的区别

      单步执行程序时,如果遇到子程序或中断服务程序:

       若使用t命令,则进入子程序或中断服务程序,继续单步执行;

      若使用p命令,则把子程序或中断服务程序当做是一个整体执行。 

    上面仔细看每一步都可以发现:

      CS=DS+10H

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

    PSP是内存去的前256个字节(10H),DOS用这段内存进行通信。该字节后是存放程序的空间。

     练习2:

    输入代码:

     1 assume cs:code
     2 code segment
     3     mov ax,0b800H
     4     mov ds,ax
     5 
     6     mov bx,0
     7     mov [bx],0433H
     8 
     9     add bx,2
    10     mov [bx],0436H
    11 
    12     mov ax,4C00H
    13     int 21H
    14 code ends
    15 end

    输入该程序:

    运行结果:

    没有预期的红色36

    清屏(cls)再次运行:

    修改line7的0433h→0432h, line10 的 0436h→0439h,

    然后重新汇编、连接,清屏运行:

    变成了:

    红色的29

    再次修改结果:

      line7的0433h→0333h, line10 的 0436h→0336h

    后重新汇编、连接,清屏,执行t2.exe

    得到了蓝绿色的36

    联系实验1,任务四:

    都是往B8100H内存中写入数据。

    其中,B8100H内存中分配给显示区的虚拟内存区。

    向地址A0000~BFFFF的内存单元中写数据,就是向显存中写入数据,

    这些数据会被显示卡输出到显示器上。

    本实验的练习2等价于在debug中

    -e B810:0 33 04 36 04
    -e B810:0 32 04 39 04
    -e B810:0 33 03 36 03

    (老是打错字符,所以退出清屏,直接用-e写入了第三)

    实验1-4写入,效果和本实验的练习2效果相同!

    位置是前面B8100控制的,改成B800同样会出现在第一个位置。

    大家可以自己实验一下。在实验1-4,大家应该修改过。

    猜测:

    应该是ds=B810,B810表示字符出现的位置

    [0]=33表示字符3,[1]=03表示颜色

    同理,[2]表示字符,[3]表示颜色。

    [x-1]当x为奇数时,写入该内存单元的16H ACSII码表示的字符。

    [x-1]当x为偶数时,是字符的颜色。

    由于时间原因,我就不继续搞下去了。

    有兴趣的小伙伴可以继续哟!

    记得写完了@我一下。

    实验总结与感受:

      第一感到写实验报告的快乐,同时花费大量的时间。

      当然基本的汇编法则早在反复输入中,深刻地刻在脑海。此处不再赘述。

      我一直不建议死记,在实践的时候,用到它,就自然记住了。

  • 相关阅读:
    为什么 JVM 不用 JIT 全程编译?
    JVM Internals
    JIT与JVM的三种执行模式:解释模式、编译模式、混合模式
    Dart编译技术与平台
    Dart 库预览
    使用VSCode开发Flutter
    环境变量
    使用Homebrew管理你的mac开发包
    brew 又叫Homebrew,是Mac OSX上的软件包管理工具
    使用async/await消除callback hell
  • 原文地址:https://www.cnblogs.com/auspice/p/9966226.html
Copyright © 2020-2023  润新知