第十六章 直接定址表

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


posted @ 2012-03-19 19:04  飞向梦  阅读(258)  评论(0编辑  收藏  举报