[C 语言笔记--Day19] Condition Code 帮忙做出 C 语言的 if 语法

大纲

  1. C 语言中的 if
  2. x86-64 中的 condition code
  3. MSP430 的 status register
  4. 参考资料

1. C 语言中的 if

C 语言的就像其他的程序语言,有 if 的语法,

而这个语法就需要 condition code 的帮忙才能实作出来

不过这篇文章会着重在 condition code 的行为,

之後再来探讨他要如何帮忙实作出 if 语法

2. x86-64 中的 condition code

condition code 本质上就是一个 register

在 x86-64 的架构中共有 4 个,每个 condition code 都只有一个 bit

分别为:

  • CF: Carry flag (最近一次的运算结果发生 unsigned overflow 时设为 1)
  • ZF: Zero flag (最近一次的运算结果为 0 时设为 1)
  • SF: Sign flag(最近一次的运算结果为负数时设为 1)
  • OF: Overflow flag(最近一次的运算结果发生 signed overflow 时设为 1)

而这里所说的运算结果可以是 ADD, SUB, CMP 等等的指令

例如说 t = a + b 这个 C 语言句子 tab 都为 int 时:

condition code 被设为 1 的条件 注解
CF (unsigned)t < (unsigned) a Unsigned overflow
ZF (t == 0) Zero
SF (t < 0) Negative
OF (a < 0 == b < 0) && (t < 0 != a < 0) Signed overflow

3. MSP430 的 status register

MSP430 的 status register 中,也有同样功能的 4 个 bit

MSP430 x86-64
V OF Signed overflow
N SF Negative
Z ZF Zero
C CF Unsigned overflow

可以看这份文件的 3.2.3 Status Register (SR)

4. 参考资料


<<:  [Day 25] 指标预处理 - 趋势化资料

>>:  【Day15】浅谈系统入侵System Hacking(二)

【Day 30】总结

这 30 天我们整理了许多 Python 的基本语法,包括了基本的输入输出、if 判断式、while...

Java 开发 WEB 的好平台 -- Grails -- (2) 新增一个 Grails 专案

说明 我在本系列文章中,主要是采用 IntelliJ-IDEA 作为示范。但我不会在文章中跟你讲述如...

JS 07 - 原型方法

大家好! 昨天我们成功使用建构函式建立一个新物件,但是建立物件後能做什麽呢? 今天我们要介绍的就是,...

Swift 新手-phpMyAdmin GUI 管理 MySql 资料库

什麽是phpMyAdmin ? phpMyAdmin 是众多 MySQL 图形化管理工具中使用最为广...

[27] 用 python 刷 Leetcode: 455

原始题目 Assume you are an awesome parent and want to ...