From d5bb63618fee38e05d2009da20e68cdab75d0310 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Mon, 12 Aug 2024 19:05:18 -0600 Subject: [PATCH] C lvalues/rvalues, objects, and values. --- .../plugins/obsidian-to-anki-plugin/data.json | 10 +- notes/_journal/2024-08-12.md | 3 +- notes/c17/declarations.md | 3 +- notes/c17/index.md | 370 ++++++++++++++++++ notes/c17/types.md | 9 + notes/x86-64/instructions/condition-codes.md | 138 ++++++- 6 files changed, 507 insertions(+), 26 deletions(-) create mode 100644 notes/c17/types.md diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index 5808333..7a39e0f 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -309,9 +309,9 @@ "_journal/2024-02-23.md": "219ce9ad15a8733edd476c97628b71fd", "_journal/2024-02/2024-02-22.md": "312e55d57868026f6e80f7989a889c2b", "c17/strings.md": "2da50edd26eae35c81f70e65bbd12d49", - "c17/index.md": "78576ee41d0185df82c59999142f4edb", + "c17/index.md": "7662b066e7cf52e94d21fed57dfe227f", "c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500", - "c17/declarations.md": "e5b4268270bcec35e6f2e4b727c5494e", + "c17/declarations.md": "9d0cf7a345d89b454447b3f66d4b7b64", "algorithms/sorting/merge-sort.md": "6506483f7df6507cee0407bd205dbedd", "_journal/2024-02-24.md": "9bb319d5014caf962a9ce3141076cff4", "_journal/2024-02/2024-02-23.md": "0aad297148e8cc4058b48b7e45787ca7", @@ -569,7 +569,7 @@ "_journal/2024-06/2024-06-07.md": "c6bfc4c1e5913d23ea7828a23340e7d3", "lambda-calculus/alpha-conversion.md": "6df655e60976715e5c6fbbe72b628c6d", "lambda-calculus/index.md": "76d58f85c135c7df00081f47df31168e", - "x86-64/instructions/condition-codes.md": "77eda8d73ab458bd5ae2e6e11582be74", + "x86-64/instructions/condition-codes.md": "b9430cc0ad207f210a8d5ca6dacccbd5", "x86-64/instructions/logical.md": "818428b9ef84753920dc61e5c2de9199", "x86-64/instructions/arithmetic.md": "271218d855e7291f119f96e91f582738", "x86-64/instructions/access.md": "c19bc3392cf493fcc9becf46c818cc50", @@ -736,7 +736,9 @@ "_journal/2024-08/2024-08-09.md": "2ce3e0c468f51750d8ad86a19bcc3264", "_journal/2024-08-11.md": "acc91e07b43590e90846d2c936dcb3d5", "_journal/2024-08/2024-08-10.md": "08e7ea4a78c46645b93ec51e2372d04f", - "_journal/2024-08-12.md": "dbce7846aa65606fe528e4cd51022a9f" + "_journal/2024-08-12.md": "8a37a2d1381f9d9e29d83031bad80dd0", + "_journal/2024-08/2024-08-11.md": "acc91e07b43590e90846d2c936dcb3d5", + "c17/types.md": "2bca56b2d95cc358553fb798acde6522" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-08-12.md b/notes/_journal/2024-08-12.md index 8ac5e67..795de7d 100644 --- a/notes/_journal/2024-08-12.md +++ b/notes/_journal/2024-08-12.md @@ -8,4 +8,5 @@ title: "2024-08-12" - [ ] Sheet Music (10 min.) - [ ] Korean (Read 1 Story) -* Add more SET condition code checks. \ No newline at end of file +* Add more SET condition code checks. +* Notes on C lvalues and rvalues, objects and values. \ No newline at end of file diff --git a/notes/c17/declarations.md b/notes/c17/declarations.md index 23e104d..7b67934 100644 --- a/notes/c17/declarations.md +++ b/notes/c17/declarations.md @@ -8,7 +8,7 @@ tags: ## Overview -C declarations were designed so that the declaration of an object looks like the use of the object. This isn't quite true - keywords like `volatile` and `const` only exist in declarations - but for the most part, this philosophy can be leveraged to read C declarations. +C declarations were designed so that the **declaration** of an object looks like the use of the object. This isn't quite true - keywords like `volatile` and `const` only exist in declarations - but for the most part, this philosophy can be leveraged to read C declarations. ## Declarators @@ -911,4 +911,5 @@ END%% ## Bibliography * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +* “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). * Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. diff --git a/notes/c17/index.md b/notes/c17/index.md index 014185c..f135687 100644 --- a/notes/c17/index.md +++ b/notes/c17/index.md @@ -1,5 +1,375 @@ --- title: C17 +TARGET DECK: Obsidian::STEM +FILE TAGS: c17 tags: - c17 --- + +## Overview + +An **object** is a region of data storage in the execution environment, the contents of which can represent **values**. We say an object type is **complete** if there is sufficient information to determine the size of objects of that type. Otherwise we say it is **incomplete**. + +An **lvalue** is an expression (with non-`void` object type) that potentially designates an object. An **rvalue** is the "value of the expression." + +%%ANKI +Basic +What does an object refer to? +Back: A region of data storage in the execution environment, the contents of which can represent values. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What does a value refer to? +Back: The contents of an object when interpreted as having a specific type. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Cloze +A {value} refers to the contents of an {object} when interpreted as having a specific type. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Types are partitioned into what two categories? +Back: Object types and function types. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What is an object type? +Back: A type that describes objects. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What is a function type? +Back: A type that describes functions. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What two parts characterize a function type? +Back: The return type and the number/types of its parameters. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What does it mean for an object type to be complete? +Back: There is sufficient information to determine the size of objects of that type. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What does it mean for an object type to be incomplete? +Back: There is insufficient information to determine the size of objects of that type. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What is an lvalue? +Back: An expression (with non-`void` object type) that potentially designates an object. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Why are lvalues named the way they are? +Back: The name is an acronym for **l**ocator **value**. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What is an rvalue? +Back: The value of an expression. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Why are rvalues named the way they are? +Back: The name is an acronym for **r**ight **value**. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What object type can an lvalue *not* have? +Back: `void` +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What object type can an lvalue have? +Back: Any object type other than `void`. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Can an lvalue designate an object? +Back: Yes. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Can an lvalue designate a function? +Back: No. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `x` an lvalue or rvalue in the following snippet? +```c +int x = 10; +``` +Back: An lvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `int` an lvalue or rvalue in the following snippet? +```c +int x = 10; +``` +Back: Neither. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `10` an lvalue or rvalue in the following snippet? +```c +int x = 10; +``` +Back: An rvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* is `x` an lvalue in the following? +```c +int x = 10; +``` +Back: Because `x` refers to a memory location. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `x` an lvalue or rvalue in the following snippet? +```c +void x; +``` +Back: Neither. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `x` an lvalue or rvalue in the following snippet? +```c +void *x; +``` +Back: An lvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `y` an lvalue or rvalue in the following snippet? +```c +int y = x + 10; +``` +Back: An lvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `x` an lvalue or rvalue in the following snippet? +```c +int y = x + 10; +``` +Back: An rvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +In the second line, is `ptr` an lvalue or rvalue? +```c +int *ptr = &x; +*ptr = 10; +``` +Back: An lvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +In the second line, is `*ptr` an lvalue or rvalue? +```c +int *ptr = &x; +*ptr = 10; +``` +Back: An lvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `getValue` an lvalue or rvalue in the following snippet? +```c +int getValue () { + return 42; +} +``` +Back: Neither. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Is `getValue()` an lvalue or rvalue in the following snippet? +```c +int d = getValue(); +``` +Back: An rvalue. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* is `getValue` in the following snippet neither an lvalue nor an rvalue? +```c +int getValue() { + return 42; +} +``` +Back: The function name is just syntax. That is, it isn't an expression. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Are variables typically lvalues or rvalues? +Back: lvalues. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Are constants typically lvalues or rvalues? +Back: rvalues. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Are array elements typically lvalues or rvalues? +Back: lvalues. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Are dereferenced pointers typically lvalues or rvalues? +Back: lvalues. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Are temporary values typically lvalues or rvalues? +Back: rvalues. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Does `x` have complete or incomplete object type in the following? +```c +void x; +``` +Back: Incomplete. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Does `x` have complete or incomplete object type in the following? +```c +int x; +``` +Back: Complete. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +Does `x` have complete or incomplete object type in the following? +```c +void *x; +``` +Back: Complete. +Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +## Bibliography + +* “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). +* Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). \ No newline at end of file diff --git a/notes/c17/types.md b/notes/c17/types.md new file mode 100644 index 0000000..4ff53fe --- /dev/null +++ b/notes/c17/types.md @@ -0,0 +1,9 @@ +--- +title: Types +TARGET DECK: Obsidian::STEM +FILE TAGS: c17 +tags: + - c17 +--- + +## Overview \ No newline at end of file diff --git a/notes/x86-64/instructions/condition-codes.md b/notes/x86-64/instructions/condition-codes.md index 1a1c812..310080c 100644 --- a/notes/x86-64/instructions/condition-codes.md +++ b/notes/x86-64/instructions/condition-codes.md @@ -94,19 +94,32 @@ END%% ## SET -| Instruction | Synonym | Effect | Description | -| ----------- | -------- | --------------------------------- | ------------------------------------ | -| `sete` | `setz` | `D <- ZF` | Equal / zero | -| `setne` | `setnz` | `D <- ~ZF` | Not equal / not zero | -| `sets` | | `D <- SF` | Negative | -| `setns` | | `D <- ~SF` | Nonnegative | -| `setl` | `setnge` | `D <- SF ^ OF` | Less (signed `<`) | -| `setle` | `setng` | D <- (SF ^ OF) \| ZF | Less or equal (signed `<=`) | -| `setg` | `setnle` | `D <- ~(SF ^ OF) & ~ZF` | Greater (signed `>`) | -| `setge` | `setnl` | `D <- ~(SF ^ OF)` | Greater or equal (signed `<=`) | -| `setb` | `setnae` | `D <- CF` | Below (unsigned `<`) | +The description of the `SET` commands apply to the case of a comparison instruction. That is, the condition codes are set according to computation `t = a - b`, where `t`, `a`, and `b` may be interpreted as signed or unsigned depending on the `SET` instruction invoked. -Note how the other condition code effects are easy to derive from `setl` and `setb`. +| Instruction | Synonym | Evaluation | Description | +| ----------- | -------- | ---------------------------- | ------------------------------ | +| `sete` | `setz` | `ZF` | Equal / zero | +| `setne` | `setnz` | `~ZF` | Not equal / not zero | +| `sets` | | `SF` | Negative | +| `setns` | | `~SF` | Nonnegative | +| `setl` | `setnge` | `SF ^ OF` | Less (signed `<`) | +| `setle` | `setng` | (SF ^ OF) \| ZF | Less or equal (signed `<=`) | +| `setg` | `setnle` | `~(SF ^ OF) & ~ZF` | Greater (signed `>`) | +| `setge` | `setnl` | `~(SF ^ OF)` | Greater or equal (signed `<=`) | +| `setb` | `setnae` | `CF` | Below (unsigned `<`) | +| `setbe` | `setna` | CF \| ZF | Below or equal (unsigned `<=`) | +| `seta` | `setnbe` | `~CF & ~ZF` | Above (unsigned `>`) | +| `setae` | `setnb` | `~CF` | Above or equal (unsigned `>=`) | + +Note how the other condition code evaluations are easy to derive from `setl` and `setb`. + +%%ANKI +Basic +What arithmetic computation is a `SET` instruction's description based on? +Back: `t = a - b` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% %%ANKI Basic @@ -265,14 +278,6 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% -%%ANKI -Basic -What arithmetic computation is a `SET` instruction's interpretation of condition codes based on? -Back: `t = a - b` -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - %%ANKI Basic What is `l` in the `setl` instruction short for? @@ -500,6 +505,99 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +%%ANKI +Basic +What is `a` in the `seta` instruction short for? +Back: **A**bove. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +{`seta`} is a synonym for {`setnbe`}. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What condition code(s) does `seta` refer to? +Back: `CF` and `ZF`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In terms of condition codes, what value does `seta` put in its specified destination? +Back: `~CF & ~ZF` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is `ae` in the `setae` instruction short for? +Back: **A**bove or **e**qual. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +{`setae`} is a synonym for {`setnb`}. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What condition code(s) does `setae` refer to? +Back: `CF` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In terms of condition codes, what value does `setae` put in its specified destination? +Back: `~CF` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is `be` in the `setbe` instruction short for? +Back: **B**elow or **e**qual. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +{`setbe`} is a synonym for {`setna`}. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What condition code(s) does `setbe` refer to? +Back: `CF` and `ZF`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In terms of condition codes, what value does `setbe` put in its specified destination? +Back: `CF | ZF` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + ## Bibliography * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.