Change bold code snippets to inline code blocks
This commit is contained in:
parent
f658bfbb40
commit
3c76d884ef
185 changed files with 1772 additions and 1772 deletions
18
12-01.md
18
12-01.md
|
|
@ -40,8 +40,8 @@ Substitute "processor" for the various digging implements, and you get
|
|||
an idea of just how different the optimization rules for the 486 are
|
||||
from what you're used to. Okay, it's not quite *that* bad—but upon
|
||||
encountering a processor where string instructions are often to be
|
||||
avoided and memory-to-register **MOV**s are frequently as fast as
|
||||
register-to-register **MOV**s, Dorothy was heard to exclaim (before she
|
||||
avoided and memory-to-register `MOV`s are frequently as fast as
|
||||
register-to-register `MOV`s, Dorothy was heard to exclaim (before she
|
||||
sank out of sight in a swirl of hopelessly mixed metaphors), "I don't
|
||||
think we're in Kansas anymore, Toto."
|
||||
|
||||
|
|
@ -53,15 +53,15 @@ RISC elements, and it's those elements that are most responsible for
|
|||
making 486 optimization unique. Simple, common instructions are executed
|
||||
in a single cycle by a RISC-like core processor, but other instructions
|
||||
are executed pretty much as they were on the 386, where every
|
||||
instruction takes at least 2 cycles. For example, **MOV AL, [TestChar]**
|
||||
instruction takes at least 2 cycles. For example, `MOV AL, [TestChar]`
|
||||
takes only 1 cycle on the 486, assuming both instruction and data are in
|
||||
the cache—3 cycles faster than the 386—but **STOSB** takes 5 cycles, 1
|
||||
the cache—3 cycles faster than the 386—but `STOSB` takes 5 cycles, 1
|
||||
cycle *slower* than on the 386. The floating-point execution unit inside
|
||||
the 486 is also much faster than the 387 math coprocessor, largely
|
||||
because, being in the same silicon as the CPU (the 486 has a math
|
||||
coprocessor built in), it is more tightly coupled. The results are
|
||||
sometimes startling: **FMUL** (floating point multiply) is usually
|
||||
faster on the 486 than **IMUL** (integer multiply)!
|
||||
sometimes startling: `FMUL` (floating point multiply) is usually
|
||||
faster on the 486 than `IMUL` (integer multiply)!
|
||||
|
||||
An encyclopedic approach to 486 optimization would take a book all by
|
||||
itself, so in this chapter I'm only going to hit the highlights of 486
|
||||
|
|
@ -116,9 +116,9 @@ CPUs. That is not the sense in which "indexed addressing" is meant here,
|
|||
however. In real mode, indexed addressing means that two registers,
|
||||
rather than one or none, are used to point to memory. (In this context,
|
||||
the use of one register to address memory is "base addressing," no
|
||||
matter what register is used.) **MOV AX, [BX+DI]** and **MOV CL,
|
||||
[BP+SI+10]** perform indexed addressing; **MOV AX,[BX]** and **MOV DL,
|
||||
[SI+1]** do not.
|
||||
matter what register is used.) `MOV AX, [BX+DI]` and `MOV CL,
|
||||
[BP+SI+10]` perform indexed addressing; `MOV AX,[BX]` and `MOV DL,
|
||||
[SI+1]` do not.
|
||||
|
||||
> 
|
||||
> Therefore, in real mode, the rule is to avoid using two registers to
|
||||
|
|
|
|||
Loading…
Reference in a new issue