QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1156|回复: 7

求教

[复制链接]
发表于 2003-6-22 10:39:48 | 显示全部楼层 |阅读模式
情景分析第一章里的AT&T汇编,讲到指令部里的%0,%1...代表寄存器的样板操作数,是什么意思啊?后面还有%0...%6,不太明白。
还有那几个函数里为什么要定义几个int 变量d0,d1,d2... ?
我汇编学得不太好,还能往下读吗?
发表于 2003-6-22 23:18:19 | 显示全部楼层
next time when u mention a book, can u give  out 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.
回复

使用道具 举报

 楼主| 发表于 2003-6-23 20:34:44 | 显示全部楼层
是情景分析书上的24到26页
回复

使用道具 举报

发表于 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。

这些局部变量就是用来暂存数值用的.

我想很多东西已经在书上说的比较明白,请仔细看书,认真琢磨.

你可以继续进行源代码的阅读,毕竟汇编语言不太多,只有几百行的汇编语句.不过如果你学习过汇编,你就会对这些东西有更深刻的理解,才能真正透彻理解底层的东西,比如在了解系统调用原理的时候,就应该对如何压栈的过程透彻理解,而这个需要你对汇编语言有一定的了解.

加油,这点困难不应该阻止你的阅读,坚持下去,但是基础知识是必不可少的.

    
回复

使用道具 举报

发表于 2003-6-23 22:07:48 | 显示全部楼层
thx xdwjack, u work so hard.
回复

使用道具 举报

发表于 2003-6-23 23:06:13 | 显示全部楼层
举手之劳,助人乃快乐之本嘛,呵呵       

bow,      
回复

使用道具 举报

 楼主| 发表于 2003-6-24 13:02:18 | 显示全部楼层
哦,基本明白了(还得再琢磨一下,呵呵)
非常感谢xdwjack啊, :-)  :-)
我的汇编是以前在微机原理上学的,
哎,后悔这学期偷懒了,没选汇编
回复

使用道具 举报

发表于 2003-6-24 13:46:48 | 显示全部楼层
you're welcome! come on!     
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 11:50 , Processed in 0.055691 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表