汇编语言实验三

实验内容:

  • 练习1:编写第一个源程序,学会编程,编译,连接,跟踪

(1)首先在文本文档里面编写源程序:

(2)然后在dosbox下进行编译,连接,执行

可以看到输出结果为36

(3)将源程序的line4和line9的值进行修改,源程序修改如下:

(我将line4的3改为了6,将line9的6改为了7)

(4)编译,连接,执行以上修改后的源程序:

可以看到输出结果为67

(5)用debug对生成的可执行文件t1.exe进行调试:

  • 先用r命令查看:

可以观察到:

  1. cx寄存器的值为0016h,即源程序的长度为28个字节;
  2. 寄存器ds的值为075Ah,cs的值为076Ah,满足关系(cs)=(ds)+10h,即076Ah=075Ah+10h,这10h的区域则是PSP(程序段前缀)。
  • 用d命令查看PSP的内容:

可以观察到PSP的头两个字节确实是CD

  • 用u命令对t1.exe进行反汇编,可以观察到源代码:

  • 使用t命令和p命令进行单步调试:

一个小结:

    可以观察到单步执行下两次的输出结果分别为3和6;

    每次遇上int的时候都用p命令,实际上是调用了子程序的结果。

  •  练习2:编写第二个源程序,进行编译,连接,执行

 (1)进行源程序的编写:

(2)对程序进行编译,连接

(然后清屏再执行一下)

可以观察到左上方输出了红色的36

(3)修改源程序,将line7的0433h修改为0432h,将line10的0436h修改为0439h

(4)再执行修改后的程序

可以观察到左上方出现红色的29

(5)再次修改源程序,将line7的0433h→0333h,将line10 的 0436h→0336h

(6)再执行以上源程序

可以观察到左上方出现了蓝绿色的36

延伸思考和分析:

  • 练习2与实验一任务4的联系:都是向b800后的内存单元写入数据,即将数据输入了显存,所以会在显示屏上出现不同色彩的图案。
  • 我对源程序的理解:
assume cs:code
code segment
    mov ax,0b800h
    mov ds,ax       ;将显存内存单元的段地址传给ds
 
    mov bx,0
    mov [bx],0433h  ;向以ds为段地址,0为偏移地址的内存单元存入0433h,
                              ;其代表了红色的3
    add bx,2
    mov [bx],0436h  ;向以ds为段地址,2为偏移地址的内存单元存入0436h,
                             ;其代表了红色的6
    mov ax,4c00h
    int 21h
code ends
end
  • 练习1在显示数据时通过执行程序段本身来达到显示的效果,而练习2是通过将数据写入显存而达到显示的效果

总结与体会:

  • 我对练习1程序段的显示方法很感兴趣,于是上网搜查了一下,mov ah,2 ... int 21h有显示字符的功能,输出的是dl的值,但由于显示的时候要转换ASCII码值,所以要注意dl中的值;而在练习1中的程序段,3的ASCII码值为33h,6的ASCII码值为36h,所以最后通过该程序段能将“3”和“6”分别输出;由于输出的是dl的值,所以要显示“36”,就只能分为两次输出。
  • 通过本次实验,我熟悉了用dosbox来实现对汇编程序的编译,连接与跟踪执行的过程,熟悉了汇编程序的结构,对下一个实验进行的程序编写有很大的帮助。

 

posted @ 2018-11-14 19:57  Cyiii  阅读(1589)  评论(0编辑  收藏  举报