Use backtick code blocks for syntax highlighting
This commit is contained in:
parent
8ed9dea394
commit
f658bfbb40
203 changed files with 26546 additions and 25801 deletions
32
13-04.md
32
13-04.md
|
|
@ -17,7 +17,9 @@ register may serve as the base memory addressing register, and almost
|
|||
any register may serve as the potentially scaled index register. For
|
||||
example,
|
||||
|
||||
mov al,BaseTable[ecx+edx*4]
|
||||
```nasm
|
||||
mov al,BaseTable[ecx+edx*4]
|
||||
```
|
||||
|
||||
uses a perfectly valid 32-bit address, with the byte accessed being the
|
||||
one at the offset in DS pointed to by the sum of EDX times 4 plus the
|
||||
|
|
@ -82,21 +84,25 @@ registers when they're needed, but if you find yourself using them
|
|||
inside key loops, you should see if it's possible to move the index
|
||||
calculation outside the loop as, for example, in a loop like this:
|
||||
|
||||
LoopTop:
|
||||
add ax,DataTable[ebx*2]
|
||||
inc ebx
|
||||
dec cx
|
||||
jnz LoopTop
|
||||
```nasm
|
||||
LoopTop:
|
||||
add ax,DataTable[ebx*2]
|
||||
inc ebx
|
||||
dec cx
|
||||
jnz LoopTop
|
||||
```
|
||||
|
||||
You could change this to the following for greater performance:
|
||||
|
||||
add ebx,ebx ;ebx*2
|
||||
LoopTop:
|
||||
add ax,DataTable[ebx]
|
||||
add ebxX,2
|
||||
dec cx
|
||||
jnz LoopTop
|
||||
shr ebx,1 ;ebx*2/2
|
||||
```nasm
|
||||
add ebx,ebx ;ebx*2
|
||||
LoopTop:
|
||||
add ax,DataTable[ebx]
|
||||
add ebxX,2
|
||||
dec cx
|
||||
jnz LoopTop
|
||||
shr ebx,1 ;ebx*2/2
|
||||
```
|
||||
|
||||
I'll end this chapter with two more quirks of 32-bit addressing. First,
|
||||
as with 16-bit addressing, addressing that uses EBP as a base register
|
||||
|
|
|
|||
Loading…
Reference in a new issue