Jumps, conditional moves, and conditional transfer.

main
Joshua Potter 2024-09-26 07:32:54 -06:00
parent dd5769b630
commit b72a654a34
11 changed files with 403 additions and 21 deletions

View File

@ -333,7 +333,7 @@
"_journal/2024-02/2024-02-27.md": "f75a0d04a875aeee932343dae0c78768",
"filesystems/index.md": "cbd2b0290a3ba3b32abec4bd8bfefad5",
"filesystems/cas.md": "d41c0d2e943adecbadd10a03fd1e4274",
"git/objects.md": "03c452a26374b1a99983157f236c5a3d",
"git/objects.md": "887ebb42a6fb7c0ff448dd482ba53922",
"git/index.md": "ca842957bda479dfa1170ae85f2f37b8",
"encoding/integer.md": "54130a02e1fc0a6033ce6ab7a781b0ae",
"_journal/2024-02-29.md": "f610f3caed659c1de3eed5f226cab508",
@ -756,7 +756,7 @@
"_journal/2024-08/2024-08-15.md": "7c3a96a25643b62b0064bf32cb17d92f",
"_journal/2024-08-17.md": "b06a551560c377f61a1b39286cd43cee",
"_journal/2024-08/2024-08-16.md": "da1127a1985074a3930b4c3512344025",
"set/order.md": "3bf63dd9c8ce6d2b4c6905dab0bd4aad",
"set/order.md": "07f5799751f0b4080c13626a0b8c95ef",
"_journal/2024-08-18.md": "6f8aec69e00401b611db2a377a3aace5",
"ontology/philosophy/properties.md": "41b32249d3e4c23d73ddb3a417d65a4c",
"_journal/2024-08-19.md": "94836e52ec04a72d3e1dbf3854208f65",
@ -764,7 +764,7 @@
"_journal/2024-08/2024-08-17.md": "b06a551560c377f61a1b39286cd43cee",
"calculus/bounds.md": "cbae7421eaa096cd17a2f9de079f593d",
"calculus/index.md": "5ee4d950533ae330ca5ef9e113fe87f3",
"x86-64/instructions/conditions.md": "c5571deac40ac2eeb8666f2d3b3c278e",
"x86-64/instructions/conditions.md": "e95de2b5a5e47a8d00e66020a5c6ee15",
"_journal/2024-08-20.md": "e8bec308d1b29e411c6799ace7ef6571",
"algebra/arch-prop.md": "bca3724ef5aae3f7f20907108087af47",
"_journal/2024-08/2024-08-19.md": "94836e52ec04a72d3e1dbf3854208f65",
@ -794,7 +794,7 @@
"_journal/2024-08/2024-08-25.md": "a3337b4658677810127350ef3e0ad146",
"_journal/2024-08-27.md": "d9ffc6ea2128ab5a86ab5f2619206736",
"_journal/2024-08/2024-08-26.md": "6f40716e2f01cd097d4881259babf1ba",
"c17/types/conversions.md": "843ece1b41a227618c797b25cbcdd98b",
"c17/types/conversions.md": "4e46d7814bb6e9374be528567e6d1ac5",
"_journal/2024-08-28.md": "c9c0e7ab8bcbf23d6332b3f19ec4d997",
"_journal/2024-08-30.md": "ff50eb8dd5124c20d4fa291d8b675238",
"_journal/2024-08/2024-08-28.md": "92e653379c8d7594bb23de4b330913fe",
@ -833,7 +833,13 @@
"_journal/2024-09/2024-09-20.md": "69cf79bb0cb8c116a9c0f671671fdc44",
"_journal/2024-09-22.md": "2d00b00b4eb9964465f30210187603cf",
"_journal/2024-09/2024-09-21.md": "2e6425f4db0187082947c3e0cb24f754",
"algorithms/bfs.md": "2734400c0a5843c92adbc2a0f06d4d56"
"algorithms/bfs.md": "bc322d510fe25389b3996344b126e497",
"_journal/2024-09-23.md": "c0a87ca092a36e2761e844f34296f2f7",
"_journal/2024-09/2024-09-22.md": "c27835ce1d82d10c906b40b420145d0c",
"_journal/2024-09-25.md": "4527ac5c132aaf5adc6e624c5e4aca5e",
"_journal/2024-09/2024-09-23.md": "d5589199e01c1794774b310e94d89374",
"_journal/2024-09-26.md": "ce334b0576d6d7495150abd5c7e1ce61",
"_journal/2024-09/2024-09-25.md": "c8a3414e27c8ce635fe995c2dfbf6019"
},
"fields_dict": {
"Basic": [

View File

@ -0,0 +1,11 @@
---
title: "2024-09-26"
---
- [ ] Anki Flashcards
- [x] KoL
- [x] OGS
- [ ] Sheet Music (10 min.)
- [ ] Korean (Read 1 Story)
* Notes on [[conditions|conditional transfer]] of control vs. data.

View File

@ -0,0 +1,9 @@
---
title: "2024-09-23"
---
- [x] Anki Flashcards
- [x] KoL
- [ ] OGS
- [ ] Sheet Music (10 min.)
- [ ] Korean (Read 1 Story)

View File

@ -0,0 +1,11 @@
---
title: "2024-09-25"
---
- [x] Anki Flashcards
- [x] KoL
- [x] OGS
- [ ] Sheet Music (10 min.)
- [ ] Korean (Read 1 Story)
* Notes on [[conditions#JMP|jump instructions]].

View File

@ -70,7 +70,7 @@ END%%
%%ANKI
Cloze
We say a sequence is {$\Delta^k$-constant} when the {$k$th differences is constant}.
We say a sequence is {$\Delta^k$-constant} when the {$k$th differences are constant}.
Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf).
<!--ID: 1713580109189-->
END%%

View File

@ -135,7 +135,7 @@ END%%
%%ANKI
Basic
Which standard graph representation has worst-case BFS running time of $O(\lvert V \rvert + \lvert E \rvert)$?
Back: The adjacency-matrix representation.
Back: The adjacency-list representation.
Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022).
<!--ID: 1727044035989-->
END%%
@ -148,6 +148,14 @@ Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (
<!--ID: 1727044035983-->
END%%
%%ANKI
Basic
Which standard graph representation has worst-case BFS running time of $O(\lvert V \rvert^2)$?
Back: The adjacency-matrix representation.
Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022).
<!--ID: 1727357400678-->
END%%
%%ANKI
Basic
Given graph $\langle V, E \rangle$ with adjacency-matrix representation, what is the worst-case run time of BFS?

View File

@ -259,7 +259,7 @@ END%%
%%ANKI
Basic
When is the type domain of `a + b` equal to `signed int`?
When is the common real type of `a + b` equal to `signed int`?
```c
unsigned short a;
signed int b;
@ -295,7 +295,7 @@ END%%
%%ANKI
Basic
Suppose `a` and `b` has signed and unsigned types. When is `a + b` signed?
Suppose `a` and `b` has signed and unsigned types respectively. When is `a + b` signed?
Back: When `b`'s type has lower rank and the range of `b` is included in the range of `a`.
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
<!--ID: 1724762203460-->

View File

@ -155,14 +155,6 @@ Reference: Scott Chacon, *Pro Git*, Second edition, The Experts Voice in Soft
<!--ID: 1709345254701-->
END%%
%%ANKI
Basic
How is e.g. `.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4` encoded?
Back: As a `zlib` data formatted file.
Reference: Scott Chacon, *Pro Git*, Second edition, The Experts Voice in Software Development (New York, NY: Apress, 2014).
<!--ID: 1709345254705-->
END%%
%%ANKI
Basic
What plumbing subcommand is used to inspect git objects?

View File

@ -488,7 +488,7 @@ END%%
%%ANKI
Basic
Consider an equivalence class of $x$ (modulo $R$). What kind of mathematical object is $R$?
Back: A relation.
Back: An equivalence relation.
Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977).
<!--ID: 1721098094144-->
END%%

View File

@ -10,7 +10,111 @@ tags:
A number of instructions operate with respect to the [[registers#Condition Codes|condition code registers]].
## CMP and TEST
> The conventional way to implement conditional operationsis through a conditional transfer of *control*, where the program follows one execution path when a condition holds and another when it does not.
>
> An alternate strategy is through a conditional transfer of *data*. This approach computes both outcomes of a conditional operation and then selects one based on whether or not the condition holds.
%%ANKI
Basic
What does the conditional transfer of control refer to?
Back: Following one execution path when a condition holds and another when it does not.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091064-->
END%%
%%ANKI
Basic
What does the conditional transfer of data refer to?
Back: Moving data between destinations based on a condition.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091070-->
END%%
%%ANKI
Cloze
With respect to assembly, we usually discuss either conditional transfer of {1:control} or {1:data}.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091074-->
END%%
%%ANKI
Basic
What does "conditional transfer" refer to in the context of control?
Back: The movement of the PC to a different address depending on conditions.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091079-->
END%%
%%ANKI
Basic
What does "conditional transfer" refer to in the context of data?
Back: The actual moving of data between destinations if a condition is satisfied.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091083-->
END%%
%%ANKI
Basic
*Why* might conditional transfers of control be less performant than that of data?
Back: Branch prediction penalties may be more expensive than computing both branches' instructions.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091088-->
END%%
%%ANKI
Basic
When can we not use conditional transfer of data?
Back: When a branch may yield an error or some other side effect.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091092-->
END%%
%%ANKI
Basic
The following pseudocode is a demonstration of the conditional transfer of what?
```
v = then-expr;
ve = else-expr;
t = test-expr;
if (!t) v = ve;
```
Back: Data.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091096-->
END%%
%%ANKI
Basic
The following pseudocode is a demonstration of the conditional transfer of what?
```
if (!test-expr)
goto false;
v = then-expr;
goto done;
false:
v = else-expr;
done:
```
Back: Control.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091101-->
END%%
%%ANKI
Basic
*Why* couldn't we use conditional transfer of data with the following expression?
```c
xp ? *xp : 0
```
Back: Dereferencing `xp` may throw a null pointer dereferencing error.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
<!--ID: 1727357091105-->
END%%
## Instructions
### CMP and TEST
| Instruction | Operands | Based On | Description |
| ------------ | ---------- | --------------------- | ----------- |
@ -96,7 +200,7 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program
<!--ID: 1717941416513-->
END%%
## SET
### SET
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.
@ -109,7 +213,7 @@ The description of the `SET` commands apply to the case of a comparison instruct
| `setl` | `setnge` | `SF ^ OF` | Less (signed `<`) |
| `setle` | `setng` | <code>(SF ^ OF) \| ZF</code> | Less or equal (signed `<=`) |
| `setg` | `setnle` | `~(SF ^ OF) & ~ZF` | Greater (signed `>`) |
| `setge` | `setnl` | `~(SF ^ OF)` | Greater or equal (signed `<=`) |
| `setge` | `setnl` | `~(SF ^ OF)` | Greater or equal (signed `>=`) |
| `setb` | `setnae` | `CF` | Below (unsigned `<`) |
| `setbe` | `setna` | <code>CF \| ZF</code> | Below or equal (unsigned `<=`) |
| `seta` | `setnbe` | `~CF & ~ZF` | Above (unsigned `>`) |
@ -602,6 +706,247 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program
<!--ID: 1723471919361-->
END%%
### JMP
Jump instructions are categorized as either **direct** or **indirect**. Direct jump instructions specify a label whereas indirect jump instructions specify a `*` followed by an memory operand.
| Instruction | Synonym | Jump Condition | Description |
| ----------------- | -------- | ---------------------------- | ------------------------------ |
| `jmp` *Label* | - | 1 | Direct jump |
| `jmp` *\*Operand* | - | 1 | Indirect jump |
| `je` *Label* | `jz` | `ZF` | Equal / zero |
| `jne` *Label* | `jnz` | `~ZF` | Not equal / not zero |
| `js` *Label* | - | `SF` | Negative |
| `jns` *Label* | - | `~SF` | Nonnegative |
| `jl` *Label* | `jnge` | `SF ^ OF` | Less (signed `<`) |
| `jle` *Label* | `jng` | <code>(SF ^ OF) \| ZF</code> | Less or equal (signed `<=`) |
| `jg` *Label* | `jnle` | `~(SF ^ OF) & ~ZF` | Greater (signed `>`) |
| `jge` *Label* | `jnl` | `~(SF ^ OF)` | Greater or equal (signed `>=`) |
| `jb` *Label* | `jnae` | `CF` | Below (unsigned `<`) |
| `jbe` *Label* | `jna` | <code>CF \| ZF</code> | Below or equal (unsigned `<=`) |
| `ja` *Label* | `jnbe` | `~CF & ~ZF` | Above (unsigned `>`) |
| `jae` *Label* | `jnb` | `~CF` | Above or equal (unsigned `>=`) |
%%ANKI
Basic
How is the operand of a direct jump formatted?
Back: As a label.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613515-->
END%%
%%ANKI
Basic
How is the operand of an indirect jump formatted?
Back: As an `*` followed by a register or memory address.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613523-->
END%%
%%ANKI
Basic
Is the following considered a direct or indirect jump?
```x86
jmp *(%rax)
```
Back: Indirect.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613529-->
END%%
%%ANKI
Basic
Is the following considered a direct or indirect jump?
```x86
jmp .L1
```
Back: Direct.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613532-->
END%%
%%ANKI
Basic
Is the following considered a direct or indirect jump?
```x86
jmp *%rax
```
Back: Indirect.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613535-->
END%%
%%ANKI
Basic
Is the following considered a direct or indirect jump?
```x86
jg *%rax
```
Back: N/A. This is not a valid instruction.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613542-->
END%%
%%ANKI
Basic
What is a jump target?
Back: An address of some destination instruction specified by a jump instruction.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613546-->
END%%
%%ANKI
Basic
What restriction is enforced on the operand of nonconditional jump instructions?
Back: N/A.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613554-->
END%%
%%ANKI
Basic
What restriction is enforced on the operand of conditional jump instructions?
Back: Conditional jumps can only be direct.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613558-->
END%%
%%ANKI
Basic
A PC-relative jump encoding encodes the difference between what two addresses?
Back: The jump target and that of the instruction immediately following the jump.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613567-->
END%%
%%ANKI
Basic
What is "PC" in "PC-relative" short for?
Back: **P**rogram **C**ounter.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613575-->
END%%
%%ANKI
Basic
How large is a PC-relative jump offset encoding?
Back: 1, 2, or 4 bytes.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613579-->
END%%
%%ANKI
Cloze
A {PC-relative} jump encoding contrasts an {absolute} jump encoding.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613590-->
END%%
%%ANKI
Basic
How large is an absolute jump address encoding?
Back: 4 bytes.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613596-->
END%%
%%ANKI
Basic
*Why* is PC-relative addressing performed relative to the instruction after a jump?
Back: It is convention to update the PC as the first step of executing any instruction.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613602-->
END%%
%%ANKI
Basic
*Why* is PC-relative encoding more compact than absolute encoding?
Back: Offsets may be expressable in 1 or 2 bytes instead of 4.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613607-->
END%%
%%ANKI
Basic
*Why* is PC-relative encoding more portable than absolute encoding?
Back: Because object code can shift position in memory without alteration.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613613-->
END%%
%%ANKI
Basic
What is the nonconditional direct jump instruction?
Back: `jmp[bwlq]`
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613618-->
END%%
%%ANKI
Basic
What is the nonconditional indirect jump instruction?
Back: `jmp[bwlq]`
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727270613624-->
END%%
%%ANKI
Basic
Conditional transfer of control usually involves what instructon set?
Back: JMP
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091109-->
END%%
### CMOV
Like [[access#MOV|MOV]] instructions, but with the data transfer only happening if the move condition is satisfied.
| Instruction | Synonym | Move Condition | Description |
| ----------- | ---------- | ---------------------------- | ------------------------------ |
| `cmove` | `cmovz` | `ZF` | Equal / zero |
| `cmovene` | `cmovnz` | `~ZF` | Not equal / not zero |
| `cmovs` | - | `SF` | Negative |
| `cmovns` | - | `~SF` | Nonnegative |
| `cmovl` | `cmovnge` | `SF ^ OF` | Less (signed `<`) |
| `cmovle` | `cmovng` | <code>(SF ^ OF) \| ZF</code> | Less or equal (signed `<=`) |
| `cmovg` | `cmovenle` | `~(SF ^ OF) & ~ZF` | Greater (signed `>`) |
| `cmovge` | `cmovnl` | `~(SF ^ OF)` | Greater or equal (signed `>=`) |
| `cmovb` | `cmovnae` | `CF` | Below (unsigned `<`) |
| `cmovbe` | `cmovna` | <code>CF \| ZF</code> | Below or equal (unsigned `<=`) |
| `cmova` | `cmovnbe` | `~CF & ~ZF` | Above (unsigned `>`) |
| `cmovae` | `cmovnb` | `~CF` | Above or equal (Unsigned `>=`) |
%%ANKI
Cloze
{1:MOV} is to {2:unconditional} whereas {2:CMOV} is to {1:conditional}.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091113-->
END%%
%%ANKI
Basic
Conditional transfer of data usually involves what instructon set?
Back: CMOV
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091118-->
END%%
%%ANKI
Basic
What is instruction `cmove` an acronym for?
Back: **C**onditional **mov**e **e**qual.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091124-->
END%%
%%ANKI
Cloze
Conditional transfer of {1:control} is to {2:JMP} and {2:data} is to {1:CMOV}.
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
<!--ID: 1727357091131-->
END%%
## Bibliography
* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.