汇编小结三
今天我们来通过一个实验来学习汇编语言中的a命令与t命令,通过这个实验我希望大家能够收获满满,这么课是一个很有趣的老师教的,所以想好好的总结这门课,当然,如果你用心阅读这篇文章,你会发现这也是一个有趣的实验哦,那么接下来就开始我们的旅程了吧。(就在刚刚又学会了一个小技巧,在markdown中设置目录:想分享给不会的小伙伴们,先引用@[toc]然后,结合#,这种一级,二级标题一起用。)
文章目录
知识预备
a命令:a命令的作用是在debug下,可以在指定的地址下写汇编指令,如mov ax,bx此类的指令。
t命令:t命令的作用是执行cs:ip在此时此刻指向的指令。
实验内容
1.1:用Debug的A命令以汇编指令的格式在内存中写入一条机器指令(mov bx,5678)
-a (这里可以指定地址按回车再敲 mov bx,5678),具体图片如下图所示,
1.2可以查看写入的汇编指令对应的机器码吗?怎么做?
想要查看写入的汇编指令的机器码,其实只要用到u命令就好了,u命令的主要作用:可以查看机器码对应的汇编指令,并且可以看机器码的大小,每条机器码的大小都不一定是相同的,我们可以通过机器码来判断他的大小。(如图所示)
地址后面紧跟着的就是机器码,并且两个16进制位为一个字节。
1.3若写入了多条汇编指令(mov ax,31 mov bx,ax add ax,bx),其地址以13F0:0110开头,怎么写入这些指令?怎么执行这3条指令?每次执行后,ip的增加值相同吗,为什么?
这里我们要知道的一件事情是,t命令执行的指令,是cs:ip
所指向的指令,所以如果我们要执行我们想要的指令的话,我们就应该通过r命令来修改cs与ip。
而且每次执行完后ip的增加值不相同,因为,每条指令的大小不同。
2.小测试
下面我们来通过这个小测试,来避免我们在学习的时候我们可能会犯的一些错误。
(1)用e命令在内存中某一段写入自己生日(BCD码)
(2)编写指令将内存中自己生日(BCD码)放入通用寄存器ax和bx中。提示:读取内存要先设置哪个段寄存器。(073f:0110)
以上是我在做实验的一些操作,由于那个实验还有有点多的,我截取了测试里面的一下部分来解释一些易错点。
易错点
当我们用e命令在指定的位置敲入我们的生日的时候,我们要注意我们输入的地址是那一段,并且值得我们注意的是,这一段地址是在内存空间的,在进行第二步中, 我们要注意用a命令写的指令所在的地址不要与上一步重合了,如果重合了的话,那就会出错,这是我们最容易出错的地方,虽然很好理解,但是值得我们注意。
小结
不知道大家在读完这篇文章后是否有些许收获呢?我个人感觉虽然干货不会有很多,但是我们坚持学下去,不断的积累,总结,反思,日积月累是可以学到很多东西的,所以大家还是要多多学习,加油!有问题,大家可以在评论区发言哦!