汇编语言实验三
Posted kwcymino
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言实验三相关的知识,希望对你有一定的参考价值。
实验内容:
-
练习1:编写第一个源程序,学会编程,编译,连接,跟踪
(1)首先在文本文档里面编写源程序:
(2)然后在dosbox下进行编译,连接,执行
可以看到输出结果为36
(3)将源程序的line4和line9的值进行修改,源程序修改如下:
(我将line4的3改为了6,将line9的6改为了7)
(4)编译,连接,执行以上修改后的源程序:
可以看到输出结果为67
(5)用debug对生成的可执行文件t1.exe进行调试:
- 先用r命令查看:
可以观察到:
- cx寄存器的值为0016h,即源程序的长度为28个字节;
- 寄存器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来实现对汇编程序的编译,连接与跟踪执行的过程,熟悉了汇编程序的结构,对下一个实验进行的程序编写有很大的帮助。
以上是关于汇编语言实验三的主要内容,如果未能解决你的问题,请参考以下文章