fwmzyw 发表于 2003-6-22 10:39:48

求教

情景分析第一章里的AT&T汇编,讲到指令部里的%0,%1...代表寄存器的样板操作数,是什么意思啊?后面还有%0...%6,不太明白。
还有那几个函数里为什么要定义几个int 变量d0,d1,d2... ?
我汇编学得不太好,还能往下读吗?

Dragonfly 发表于 2003-6-22 23:18:19

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.

fwmzyw 发表于 2003-6-23 20:34:44

是情景分析书上的24到26页

xdwjack 发表于 2003-6-23 21:28:46

数字是和输入输出部的参数是对应的

从输出部到输入部的所有变量都算在内,从输出部的第一个变量开始算起,对应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:

Dragonfly 发表于 2003-6-23 22:07:48

thx xdwjack, u work so hard.

xdwjack 发表于 2003-6-23 23:06:13

举手之劳,助人乃快乐之本嘛,呵呵 :lol::lol::lol::lol:

bow,:-D:-D:-D

fwmzyw 发表于 2003-6-24 13:02:18

哦,基本明白了(还得再琢磨一下,呵呵)
非常感谢xdwjack啊, :-):-)
我的汇编是以前在微机原理上学的,
哎,后悔这学期偷懒了,没选汇编

xdwjack 发表于 2003-6-24 13:46:48

you're welcome! come on! :lol::lol::lol:
页: [1]
查看完整版本: 求教