第十六章 直接定址表
1、描述了单元长度的标号:后面没有冒号的标号可以同时描述内存地址和单位长度。因为这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。称为数据标号。
2、一般来说,我们不会在代码段中定义数据,而是将数据定义到其他段中。
注意:1.在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用。
2.如果想在代码段中,直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。
3、在其他段中使用数据标号:
4、seg操作法,功能为取得某一标号的段地址。
5、“查表”方法:目的:1.为了算法的清晰和简洁;2.为了加快运算速度;3.为了使程序易于扩充。
例如1. 用十六进制显示byte型数据;2.编一个子程序计算sin(x)。
6、编程的时候要注意程序的容错性,即对于错误的输入要有处理能力。
7、可以在直接定址表中存储子程序的地址,从而方便地实现不同子程序的调用。
8、程序入口地址的直接定址表。
9、清屏是用空格覆盖,就跟u盘格式化一样,修改了引导区。
View Code
1 ;用16进制显示数据
2 assume cs:code
3
4 code segment
5
6 start: mov al,0eh ;存储要显示地数据
7
8 call showbyte
9
10 mov ax,4c00h
11 int 21h
12
13 showbyte:
14 jmp short show
15
16 table db '0123456789ABCDEF' ;字符表
17
18 show: push bx
19 push es
20
21 mov ah,al
22 mov cl,4
23 shr ah,cl ;右移四位,ah中存储高四位的值
24 and al,00001111b ;al中为低4位的值
25
26 mov bl,ah
27 mov bh,0
28 mov ah,table[bx] ;用高4位的值作为相对table的偏移值,取得对应的字符
29
30 mov bx,0b800h
31 mov es,bx
32 mov es:[160*12+40*2],ah
33
34 mov bl,al
35 mov bh,0
36 mov al,table[bx] ;用低4位的值作为相对table的偏移值,取得对应的字符
37
38 mov es:[160*12+40*2+2],al
39
40 pop es
41 pop bx
42 ret
43
44 code ends
45 end start