实验3
实验内容1:运行exe文件输出数据,并观察每一步的调试情况
步骤1:在记事本中编写t1.asm文件
步骤2:在dosbox环境下汇编、连接、运行文件,得到数据36
步骤3:修改dl寄存器中的值为0-9中任意一个数,重新编译链接运行,查看结果
步骤4:进入debug环境进行调试——
-r查看各寄存器的值;
-d查看PSP程序段前缀中前两个字节的值;(CS和DS寄存器相差10h:存放程序段前缀的内容,使程序返回时能记住返回的地址)
-u进行反汇编
步骤5:用-t(查看普通步骤)、-p(查看int 21h步骤)逐步调试,观察结果
tips:
1.在win7系统下可以用notepad打开一个文本文档,而win10Dosbox环境下不行;
2.用‘x’在寄存器中输入相应数据也可以输出同样结果)
个人理解:把0200h放入ax寄存器中,在dx中存入003xh(x为任意0-f的16进制数字),后面再加入int 21h的语句,运行后就会显示1Byte的x数据(其中a-f只会输出1)
实验内容2:运行exe程序在屏幕左上角输出带颜色的数字,逐步调试并观察其过程
步骤1:在记事本中编写t2.asm文件
步骤2:在dosbox环境下汇编、连接、运行文件,清屏后运行屏幕左上角显示红色的36
步骤3:修改原t2.asm中像内存单元传送的数据,运行后发现在屏幕上出现不同颜色的不同数字
tips:运用mov [偏移地址],数据 时,有的平台会显示向寄存器中存入了占多少存储单元的数据,有的不会)
个人理解:实验1中,我发现向从0b800开始的内存单元中写入数据,能在屏幕的不同位置输出不同颜色的各种符号。而通过本次实验,我还发现向0b800内存中写入数据两个字节数据xy3z,则会在屏幕左上角顶格出现数字z,而xy控制了输出数据z的颜色
实验3——总结
收获:通过本次实验,我初步了解了一个完整的汇编小程序的形成过程(汇编、连接、运行),并且通过debug环境逐步观察了各个寄存器的变化。学到了汇编程序中CS寄存器的值总是比DS多10h,原因是需要10h的空间存放PSP(程序段前缀)以标识代码运行完毕之后程序返回的位置。明白了-p命令是用来查看 int 21h 这条指令的执行过程的。还学到了可以用mov [寄存器],数据 这种方式来将数据存入以寄存器的内容为偏移地址的内存单元中。
问题:怎么用汇编语言编写一个从键盘输入字符,从屏幕输出字符的程序呢?
原文地址:https://www.cnblogs.com/cjh-1023/p/9979162.html