Normal quotes
This commit is contained in:
parent
5e10794a24
commit
18011c595a
352 changed files with 6040 additions and 6040 deletions
30
22-02.md
30
22-02.md
|
|
@ -5,7 +5,7 @@
|
|||
**LISTING 22.2 L22-2.ASM**
|
||||
|
||||
ClearS proc near
|
||||
push bp ;save caller’s BP
|
||||
push bp ;save caller's BP
|
||||
mov bp,sp ;point to stack frame
|
||||
cmp word ptr [bp].BufSeg,0 ;skip the fill if a null
|
||||
jne Start ; pointer is passed
|
||||
|
|
@ -22,15 +22,15 @@
|
|||
mov cx,[bp].BufSize ;load CX with buffer size
|
||||
rep stosw ;fill the buffer
|
||||
Bye:
|
||||
pop bp ;restore caller’s BP
|
||||
pop bp ;restore caller's BP
|
||||
ret EndMrk-RetAddr-2 ;return, clearing the parms from the stack
|
||||
ClearS endp
|
||||
|
||||
(The **OnStack** structure definition doesn’t change in any of our
|
||||
examples, so I’m not going clutter up this chapter by reproducing it for
|
||||
(The **OnStack** structure definition doesn't change in any of our
|
||||
examples, so I'm not going clutter up this chapter by reproducing it for
|
||||
each new version of **ClearS**.)
|
||||
|
||||
Okay, loading ES and DI directly saves another four bytes. We’ve
|
||||
Okay, loading ES and DI directly saves another four bytes. We've
|
||||
squeezed a total of 6 bytes—about 11 percent—out of **ClearS**. What
|
||||
next?
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ loading ES and DI as shown in Listing 22.3.
|
|||
**LISTING 22.3 L22-3.ASM**
|
||||
|
||||
ClearS proc near
|
||||
push bp ;save caller’s BP
|
||||
push bp ;save caller's BP
|
||||
mov bp,sp ;point to stack frame
|
||||
cmp word ptr [bp].BufSeg,0 ;skip the fill if a null
|
||||
jne Start ; pointer is passed
|
||||
|
|
@ -57,11 +57,11 @@ loading ES and DI as shown in Listing 22.3.
|
|||
mov cx,[bp].BufSize ;load CX with buffer size
|
||||
rep stosw ;fill the buffer
|
||||
Bye:
|
||||
pop bp ;restore caller’s BP
|
||||
pop bp ;restore caller's BP
|
||||
ret EndMrk-RetAddr-2 ;return, clearing the parms from the stack
|
||||
ClearS endp
|
||||
|
||||
That’s good for another three bytes. We’re down to 43 bytes, and
|
||||
That's good for another three bytes. We're down to 43 bytes, and
|
||||
counting.
|
||||
|
||||
We can save 3 more bytes by clearing the low and high bytes of AX and
|
||||
|
|
@ -71,7 +71,7 @@ values as shown in Listing 22.4.
|
|||
**LISTING 22.4 L22-4.ASM**
|
||||
|
||||
ClearS proc near
|
||||
push bp ;save caller’s BP
|
||||
push bp ;save caller's BP
|
||||
mov bp,sp ;point to stack frame
|
||||
cmp word ptr [bp].BufSeg,0 ;skip the fill if a null
|
||||
jne Start ; pointer is passed
|
||||
|
|
@ -88,13 +88,13 @@ values as shown in Listing 22.4.
|
|||
mov cx,[bp].BufSize ;load CX with buffer size
|
||||
rep stosw ;fill the buffer
|
||||
Bye:
|
||||
pop bp ;restore caller’s BP
|
||||
pop bp ;restore caller's BP
|
||||
ret EndMrk-RetAddr-2 ;return, clearing the parms from the stack
|
||||
ClearS endp
|
||||
|
||||
Now we’re down to 40 bytes—more than 20 percent smaller than the
|
||||
original code. That’s pretty much it for simple instruction
|
||||
optimizations. Now let’s look for instruction optimizations.
|
||||
Now we're down to 40 bytes—more than 20 percent smaller than the
|
||||
original code. That's pretty much it for simple instruction
|
||||
optimizations. Now let's look for instruction optimizations.
|
||||
|
||||
It seems strange to load a word value into AX and then throw away AL.
|
||||
Likewise, it seems strange to load a word value into BX and then throw
|
||||
|
|
@ -102,10 +102,10 @@ away BH. However, those steps are necessary because the two modified
|
|||
word values are ORed into a single character/attribute word value that
|
||||
is then used to fill the target buffer.
|
||||
|
||||
Let’s step back and see what this code really *does*, though. All it
|
||||
Let's step back and see what this code really *does*, though. All it
|
||||
does in the end is load one byte addressed relative to BP into AH and
|
||||
another byte addressed relative to BP into AL. Heck, we can just do that
|
||||
directly! Presto—we’ve saved another 6 bytes, and turned two word-sized
|
||||
directly! Presto—we've saved another 6 bytes, and turned two word-sized
|
||||
memory accesses into byte-sized memory accesses as well. Listing 22.5
|
||||
shows the new code.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue