Convert notes into blockquotes
This commit is contained in:
parent
832fb15e54
commit
8ed9dea394
105 changed files with 884 additions and 411 deletions
24
07-01.md
24
07-01.md
|
|
@ -68,9 +68,11 @@ algorithm selection and good design are fundamental to performance. The
|
|||
extra horsepower a superb assembly language implementation gives a
|
||||
program is worth bothering with only in the context of a good design.
|
||||
|
||||
------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
 *Assembly language optimization is a small but crucial corner of the PC programming world. Use it sparingly and only within the framework of a good design—but ignore it and you may find various portions of your anatomy out in the cold.*
|
||||
------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
> 
|
||||
> Assembly language optimization is a small but crucial corner of the PC
|
||||
> programming world. Use it sparingly and only within the framework of a
|
||||
> good design—but ignore it and you may find various portions of your
|
||||
> anatomy out in the cold.
|
||||
|
||||
So, drawing fortitude from the knowledge that our quest is a pure and
|
||||
worthy one, let's resume our exploration of assembly language
|
||||
|
|
@ -96,9 +98,11 @@ instinctively stuffs the loop count in CX and reaches for **LOOP** when
|
|||
setting up a loop. That's fine—**LOOP** does, of course, work as
|
||||
advertised—but there is one problem:
|
||||
|
||||
------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
 *On half of the processors in the x86 family, **LOOP** is slower than **DEC CX** followed by **JNZ**. (Granted, **DEC CX/JNZ** isn't precisely equivalent to **LOOP,** because **DEC** alters the flags and LOOP doesn't, but in most situations they're comparable.)*
|
||||
------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
> 
|
||||
> On half of the processors in the x86 family, **LOOP** is slower than
|
||||
> **DEC CX** followed by **JNZ**. (Granted, **DEC CX/JNZ** isn't precisely
|
||||
> equivalent to **LOOP,** because **DEC** alters the flags and LOOP
|
||||
> doesn't, but in most situations they're comparable.)
|
||||
|
||||
How can this be? Don't ask me, ask Intel. On the 8088 and 80286,
|
||||
**LOOP** is indeed faster than **DEC CX/JNZ** by a cycle, and **LOOP**
|
||||
|
|
@ -116,6 +120,8 @@ Pentium as well. (By the way, all this is not just theory; I've timed
|
|||
the relative performances of **LOOP** and **DEC CX/JNZ** on a cached
|
||||
386, and LOOP really is slower.)
|
||||
|
||||
------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
 *Things are stranger still for **LOOP**'s relative **JCXZ,** which branches if and only if CX is zero. **JCXZ** is faster than **AND CX,CX/JZ** on the 8088 and 80286, and equivalent on the 80386—but is about twice as slow on the 486!*
|
||||
------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
> 
|
||||
> Things are stranger still for **LOOP**'s relative **JCXZ,** which
|
||||
> branches if and only if CX is zero. **JCXZ** is faster than **AND
|
||||
> CX,CX/JZ** on the 8088 and 80286, and equivalent on the 80386—but is
|
||||
> about twice as slow on the 486!
|
||||
Loading…
Reference in a new issue