3059/16=191 (a1=3) 191/16=11 (a2=15) 11/16=0 (a3=11) 所以N=48956D=BF3CH。 通过以上的介绍,我不知道你到底看懂没有,如果有的话,请你去看一下书本,把我没讲到的地方和讲过了的地方都仔细地看几遍。如果你根本就没有看懂,那么你就更需要去看书了,不要因为这就丧失掉学习的信心。你认真地把前边儿的CPU介绍看完,弄清楚寄存器的概念,再把后边汇编指令拿下,就可以上路了。你认真学,认真背的话,会发现其实并没你想像中的那么难。一星期的时间,就可大概掌握了,但只是掌握而已,最起码可以看懂汇编代码了。要真想学好的话,就连后边儿的也一同看了吧,再写一些小程序来练练手。当然想精通汇编,那可不是一天两天一月两月的事,但你只要有恒心,有什么搞不定的?CPU也是人做的,指令只是其中的一部分而已,人家能做出CPU,你还怕连使用都学不会?
课后FAQ Q:我以前学过8086/8088,并且也在DOS下写过程序,能行吗? A:绝对能行,相对8086/8088,现在的CPU在基本指令方面,也没有添加多少新的指令。你只需了解一下各寄存器的变化以及补充一下Windows程序的知识就成了。而且,既然你用汇编在DOS下写过程序,那么对Debug等调试器,肯定已经很上手了,所以你有先天的优势。 Q:汇编对我来说不成问题,可我为什么总是不上手呢? A:呵呵,这样的老鸟倒还有不少,他们把汇编用的相当熟练,但是,只是因为经验的原因,所以才觉的不上手的,许多人当初不也都这样吗?最起码我就是,见了CALL就跟进,呵呵,倒跟了不少API,所以对于这部分高手,你只需多练练手以及掌握一些分析的技巧就成了。 Q:我没学过编程,能学汇编吗? A:总的来说,也行。不过希望汇编的学习,不会使你丢掉学习其它高级语言的信心。:)
答网友问 Q:寄存器可以随便用么,有没有什么限制?写个程序的时候那些变量什么的可以放在任意的寄存器么? A:呵呵,我现在就来回答楼上朋友的问题。 寄存器有它的使用机制,及各个寄存器都有着明确的分工。 如小翠儿 如数据寄存器(EAX-EDX),它们都是通用寄存器,及在软件中,任何数据都可存放于此。但是除此之外,它们又可以都可以用于各自的专用目的。 例如: EAX可以作为累加器来使用,所以它是算术运算的主要寄存器。在乘除法等指令中指定用来存放操作数。比如在乘法中,你可以用AL或AX或EAX来装被乘数,而AX或DX:AX或EAX或EDX:EAX则用来装最后的积。 EBX一般在计算存储器地址时,它经常用作基址寄存器。 ECX则常用来保存计数值,如在移位指令它用来装位移量、循环和串处理指令中作隐含的计数器。 最后就剩下四大天王中的黎明了,近一段时间来,他总是比较低调...(你别打我了,我去撞墙好了)最后就剩下EDX了,一般在作双字长运算时把DX和AX组在一起存放一个双字长数(你还记的什么是双字长吧,举个例子,比如说有一个数二进制数据01101000110101000100100111010001,你要把它寄存起来,就可以把0110100011010100(即高十六位)放在DX中,把0100100111010001(即低十六位)放在AX中,这个数表示为DX:AX)当然完全可以用一个EDX就把这个数给装下。所以,还可以用EDX:EAX来装一个64位数据,这个你会推断出来吧。 而ESP、EBP、EDI、ESI,我上边儿以经大概介绍的差不多了,所以这里不说它们了。 当然还有其它的一些限制,因为我们只是要看程序的汇编代码(人家写好了的,肯定不会犯错误吧),而不是要去写,所以可以不必掌握。有性趣的话,去看相关书籍。 另外再说一下你的最后一个问题“写个程序的时候那些变量什么的可以放在任意的寄存器么? ”这句话我不明白你要问的是什么。我想你可能是把一些关点给搞错了,变量这词通常都是出现在高级语言中的,而你用高级语言写程序的话,完全不用理解那些寄存器什么的,这些都跟高级语言没什么关系。但是最终,高级语言也还是把你写的程序转换为对寄存器、内部存储器的操作。 <本章完>
(出处:清风网络学院)
上一篇:产品激活技术问答
下一篇:关于网页脚本解密
|