免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5332 | 回复: 15
打印 上一主题 下一主题

请教几句汇编语言是什么意思 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-13 10:13 |只看该作者 |倒序浏览
0. long __res;\
1. __asm__ volatile ("int $0x80" \
2.         : "=a" (__res) \
3.         : "0" (__NR_##name)); \

本人汇编学习的不深,求教上述汇编语言第二行与第三行是什么意思。谢谢

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-08-13 10:24 |只看该作者
int $0x80

产生0x80中断,这个中断是做什么用的,查一下。剩下的估计就容易明白了

论坛徽章:
0
3 [报告]
发表于 2010-08-13 10:33 |只看该作者
a Use the %eax, %ax, or %al registers.

= The operand can only be written to.

0 signals the compiler to use the same register with output

论坛徽章:
0
4 [报告]
发表于 2010-08-13 10:37 |只看该作者
int80是陷入系统调用的软中段,但是你程序中没有设置寄存器,不知道陷入那个系统调用

论坛徽章:
0
5 [报告]
发表于 2010-08-13 10:55 |只看该作者
回复 4# liying_gg

这里name的值是fork

论坛徽章:
0
6 [报告]
发表于 2010-08-13 11:00 |只看该作者
上面的代码就是头文件unistd.h中的一部分
#define __NR_fork        2
....
#define _syscall0(type,name) \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
        : "=a" (__res) \
        : "0" (__NR_##name)); \
if (__res >= 0) \
        return (type) __res; \
errno = -__res; \
return -1; \
}

而init文件中的main.c中调用语句是static inline _syscall0(int,fork)

论坛徽章:
0
7 [报告]
发表于 2010-08-13 11:12 |只看该作者
内联汇编的知识点

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
8 [报告]
发表于 2010-08-13 11:13 |只看该作者
第2行的意思是, 执行完汇编后, 把__res的值送给eax;
第3行的意思是,执行汇编之前, 把NR—XXX的值送给eax

论坛徽章:
0
9 [报告]
发表于 2010-08-13 11:44 |只看该作者
AT_T汇编语言格式uploadby_weball.pdf (89.38 KB, 下载次数: 285)
看看这个吧!

论坛徽章:
0
10 [报告]
发表于 2010-08-13 11:45 |只看该作者
回复 8# 帅绝人寰


还是不明白。。。
1.那代码所示long __res;根本没有初始化,这种情况下,将其值给寄存器eax有意义吗?
2.在已经把__res的值给eax的情况下,你再将NR_##NAME的值给eax,不是就覆盖掉了原有的内部值?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP