求教
情景分析第一章里的AT&T汇编,讲到指令部里的%0,%1...代表寄存器的样板操作数,是什么意思啊?后面还有%0...%6,不太明白。还有那几个函数里为什么要定义几个int 变量d0,d1,d2... ?
我汇编学得不太好,还能往下读吗? next time when u mention a book, can u giveout the page number? i use the scanned e version, difficult to view and search. so if u can not give me the page number, it is painful for me to search from beginning. 是情景分析书上的24到26页 数字是和输入输出部的参数是对应的
从输出部到输入部的所有变量都算在内,从输出部的第一个变量开始算起,对应0,1,........
数字加上一个%,就是指变量
如果加上两个%,就是指变量的值
这和at&t汇编中%eax就是eax寄存器,如果是%%eax就是eax寄存器中的值一样.
比如:"=m" (v->counter)
:"ir" (i), "m"(v->counter)
第一行是输出部,第二行是输入部.
%0对应"=m" 后面的v->counter变量
%1 对应 (i)中的i变量
%2 对应 "m"后面的v->counter变量
=======================================================
那些d0,d1和d2是局部变量,这个目的你应该可以看懂
27页中
:"=&c" (d0), "=&D" (d1), "=&S"(d2)
:"0" (n/4), "q" (n), "1" ((long) to) , "2" ((long) from)
输出部有3个约束,对应操作数%0至%2,其中变量d0为操作数%0,必须放在寄存器ecx中,同样d1即%1必须放在edi中,d2即%2必须放在esi中。
输入部,有4个约束,对应操作数%3至%6,"0" (n/4)中的0表示%3(即n/4)和%0(即d0)要使用同一个寄存器,所以也必须是寄存器ecx。
同理,%5和%6,即参数to和from,分别与%1和%2使用相同的寄存器,所以必须是寄存器edi和esi。
这些局部变量就是用来暂存数值用的.
我想很多东西已经在书上说的比较明白,请仔细看书,认真琢磨.
你可以继续进行源代码的阅读,毕竟汇编语言不太多,只有几百行的汇编语句.不过如果你学习过汇编,你就会对这些东西有更深刻的理解,才能真正透彻理解底层的东西,比如在了解系统调用原理的时候,就应该对如何压栈的过程透彻理解,而这个需要你对汇编语言有一定的了解.
加油,这点困难不应该阻止你的阅读,坚持下去,但是基础知识是必不可少的.
:lol::lol::lol: thx xdwjack, u work so hard. 举手之劳,助人乃快乐之本嘛,呵呵 :lol::lol::lol::lol:
bow,:-D:-D:-D 哦,基本明白了(还得再琢磨一下,呵呵)
非常感谢xdwjack啊, :-):-)
我的汇编是以前在微机原理上学的,
哎,后悔这学期偷懒了,没选汇编 you're welcome! come on! :lol::lol::lol:
页:
[1]