Linux: compare的直观性

最近看到一个接口函数是比较两个时间值,直观性的理解这个函数非常重要,

c 复制代码
/*
 * lhs < rhs:  return <0
 * lhs == rhs: return 0
 * lhs > rhs:  return >0
 */
static inline int timespec64_compare(const struct timespec64 *lhs, const struct timespec64 *rhs)
{
	if (lhs->tv_sec < rhs->tv_sec)
		return -1;
	if (lhs->tv_sec > rhs->tv_sec)
		return 1;
	return lhs->tv_nsec - rhs->tv_nsec;
}

如果想直观的理解,就要理解为返回的结果是lhs减去rhs,这有点类似,汇编语言的风格。汇编的格式分为AT&T和Intel的风格:

ATT版的格式;

GAS:GNU Assembly;gcc 汇编器

ATT的格式是:AX->BX (mov AX, BX) 所有寄存器名称之前都有%出现,为了区分与符号名称。为什么ATT会选用这个格式呢?The 'source, dest' convention is maintained for compatibility with previous Unix assemblers,是为了和之前的Unix的编译器兼容。还是向后兼容,所以历史以及传承的重要性在计算机里可以很好的表现处理。

Intel的格式是:AX=BX (mov AX, BX)

这两种格式,实现的工作,正好相反(对于mov指令来说)。

https://blog.csdn.net/qq_36428903/article/details/117615087

memcmp 的比较也是类似的规律

https://www.man7.org/linux/man-pages/man3/memcmp.3.html

相关推荐
迷枫7121 小时前
DM8 目录结构与常用排查入口梳理
服务器·数据库
2301_803538951 小时前
Java读取Word图片的两种实用方法
java·开发语言·word
运维栈记1 小时前
API Error: 400 Request body format invalid
linux·ai
C+-C资深大佬2 小时前
SSM 框架(Spring + SpringMVC + MyBatis)
java·spring·mybatis
帅次2 小时前
Android 17 开发者实战:核心更新与应用场景落地指南
android·java·ios·android studio·iphone·android jetpack·webview
小白兔奶糖ovo2 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
Ramble_Naylor2 小时前
东方通(TongWeb)SpringBoot开发指导
java·spring boot
大鹏说大话2 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
weixin_394758032 小时前
CRMEB 会员电商系统PRO系统安装之宝塔安装教程-新手推荐(软件管理)
服务器·阿里云
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【64】 ReactAgent 长期记忆
java·人工智能·spring