Chapter 2 direct addressing table
 
 
 
16.1 describes the unit length label
 
Assume cs: code
 
Code segment
 
A db 1, 2, 3, 4, 5, 6, 7, 8
 
B dw 0
 
 
 
Start:
 
Mov si, 0
 
Mov cx, 8
 
S:
 
Mov al, a [si]
 
Mov ah, 0
 
Add B, ax
 
Inc si
 
Loop s
 
 
 
Mov ax, 4c00h
 
Int 21 h
 
 
 
Code ends
 
End start
 
The numbers a and B Used in the code segment are not followed by ":". They are labels that describe both the memory address and unit length. Therefore, in the instruction, it can represent the memory unit in a segment. For example, for the data source of data source B (dw 0) in the preceding program, the number B represents a memory unit. The address is code: 8 and the length is two bytes.
 
Command: mov ax, B
 
Equivalent to mov ax, cs: [8];
 
Command: mov B, 2
 
Equivalent to mov word ptr cs: [8], 2.
 
In the future, we will call this labelData labelIt indicates the address and length of the data storage unit. It is different from the address label that only represents an address.
 
 
 
16.2 use data labels in other segments
 
The data label can be defined as data. At this time, the compiler regards the address indicated by the label as the data value.
 
For example:
 
Data segment
 
A db 1, 2, 3, 4, 5, 6, 7, 8
 
B dw 0
 
C dw a, B
 
Data ends
 
The two fonts stored at data Mark c are the offset addresses of numbers a and B. Equivalent:
 
Data segment
 
A db 1, 2, 3, 4, 5, 6, 7, 8
 
B dw 0
 
C dw offset a, offset B
 
Data ends
 
For example:
 
Data segment
 
A db 1, 2, 3, 4, 5, 6, 7, 8
 
B dw 0
 
C dd a, B
 
Data ends
 
The two dual-fonts stored at data Mark c are the offset address and segment address of Mark a, and the segment address of the Offset address of Mark B.
 
Data segment
 
A db 1, 2, 3, 4, 5, 6, 7, 8
 
B dw 0
 
C dw offset a, seg a, offset B, seg B
 
Data ends
 
 
 
16.3 direct addressing table (skipped below)
 
P306
 
16.4 direct addressing table of program entry addresses
 
We can store the subprogram address in the direct addressing table to facilitate the calling of different subprograms.
 
The following Program sets the value of ah before calling. If the value is 0, the screen is cleared. 1 sets the foreground color, 2 sets the background color, and 3 indicates to scroll up a row.
 
Assume cs: code
 
Code segment
 
 
 
Start:
 
Setscreen:
 
Jmp short set
 
Table dw sub1, sub2, sub3, sub4
 
 
 
Set:
 
Push bx
 
Cmp ah, 3
 
Ja sret
 
Mov bl, ah
 
Mov bh, 0
 
Add bx, bx; Calculate the offset of the corresponding subroutine in the table according to the ah function number.
 
 
 
Call word ptr table [bx]; call the corresponding function subroutine
 
Mov ax, 4c00h
 
Int 21 h
 
 
 
Sret: pop bx
 
Ret
 
Sub1:
 
Push bx
 
Push cx
 
Push es
 
Mov bx, 0b800h
 
Mov es, bx
 
Mov bx, 0
 
Mov cx and 2000
 
 
 
Sub1s:
 
Mov byte ptr es: [bx],''
 
Add bx, 2
 
Loop sub1s
 
Pop es
 
Pop cx
 
Pop bx
 
Ret
 
 
 
Sub2:
 
Push bx
 
Push cx
 
Push es
 
 
 
Mov bx, 0b800h
 
Mov es, bx
 
Mov bx, 1
 
Mov cx and 2000
 
 
 
Sub2s:
 
Add byte ptr es: [bx], 11111000b
 
Or es: [bx], al
 
Add bx, 2
 
Loop sub2s
 
 
 
Pop es
 
Pop cx
 
Pop bx
 
Ret
 
 
 
Sub3:
 
Push bx
 
Push cx
 
Push es
 
Mov cl, 4
 
Shl al, cl
 
Mov bx, 0b800h
 
Mov es, bx
 
Mov bx, 1
 
Mov cx and 2000
 
 
 
Sub3s:
 
And byte ptr es: [bx], 10001111b
 
Or es: [bx], al
 
Add bx, 2
 
Loop sub3s
 
Pop es
 
Pop cx
 
Pop bx
 
Ret
 
 
 
Sub4:
 
Push cx
 
Push si
 
Push di
 
Push es
 
Push ds
 
 
 
Mov si, 0b800h
 
Mov es, si
 
Mov ds, si
 
Mov si, 160; ds: si points to row n + 1
 
Mov di, 0
 
Cld
 
Mov cx, 24; 24 rows in total
 
 
 
Sub4s:
 
Push cx
 
Mov cx and 160
 
Rep movsb
 
Pop cx
 
Loop sub4s
 
 
 
Sub4s1:
 
Mov byte ptr [160*24 + si],''
 
Add si, 2
 
Loop sub4s1
 
Pop ds
 
Pop es
 
Pop di
 
Pop si
 
Pop cx
 
Ret
 
 
 
Code ends
 
End start