《汇编语言》检测点3.2解析
(1)补全下面的程序,使其可以将10000H~1000FH中的八个字,逆序复制到20000H~2000FH。逆序复制的含义图3.17所示(图中内存里的数据均为假设)
。
movax,1000H
movds,ax
________
________
________
push[0]
push[2]
push[4]
push[6]
push[8]
push[A]
push[C]
push[E]
解析:老实说,刚开始看到这个题目后,我的脑子一片空白,根本无法进行八卦化形。这是我领悟八卦化形思想后,第一次遇到这种情况。这说明某个知识点我没有掌握,没用通过化形法掌握。
不过,我还是告诉自己,仔细研究,耐心琢磨,虽然知道要初始化栈顶,后来忍不住比对答案,发现自己初始化栈顶的对象是错误的,但初始化栈顶的思维没错。
我错就错在当时学内存单元或者[]还没领悟化形学习法,于是只好翻到前面的章节恶补。呵呵,现在终于弄懂了,请看我的解析。
movax,1000H
movds,ax
________
________
________
push[0]
请看上面的代码级最上面的图形。
也就是说,一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间。
DS是什么?DS就是运输机,起到桥梁的作用。
今后DS出现的,直接条件反射出一家运输机,然后反射出目的地,也就是指向的内存单元。
所以答案是:
movax=2000H
movss=ax
movsp=10H
(2)补全下面的程序,使其可以将10000H~1000FH中的八个字,逆序复制到20000H~2000FH。
movax,2000H
movds,ax
________
________
________
pop[E]
pop[C]
pop[A]
pop[8]
pop[6]
pop[4]
pop[2]
pop[0]
大家看,一旦看到ds,直接反射出一家运输机,再次条件反射出运输机的目的地,[E]、[C]、[A]等,也就是指向的内存单元。所以,答案应该是
movax=1000H
movss=ax
movsp=0H
有人说,这什么逻辑,太简单了吧。呵呵,难而不会,会而不难。就这么简单,但我开始的一片空白确实需反思啊。本文由“冒牌汇编高手”写于2014年1月12日凌晨2是13分。