王爽汇编语言第十六章——直接定址表 第十七章——BIOS输入和磁盘读写

第十六章——直接定址表

1、code segment

a: db 1,2,3,4,5,6,7,8

b: dw 0

code segment

a db 1,2,3,4,5,6,7,8

b dw 0

我们在code段中使用的标号a,b后面没有“:”,因此它们是可以同时描述内存地址和单元长度的标号。

标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元。

而标号b描述了地址code:8,和从这个地址开始以后的内存单元都是字单元。

因为这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。

例:对于程序中的b dw 0.

指令:mov ax,b 相当于:mov ax,cs[8]

指令:mov b,2 相当于:mov word ptr cs:[8],2

指令:inc b 相当于:inc word ptr cs:[8]

在这些指令中,标号b代表了一个内存单元,地址为

code:8,长度为2字节。

对于程序中的a db 1,2,3,4,5,6,7,8

指令:mov al,a[si]

相当于:mov al,cs:0[si]

指令:mov al,a[3]

相当于:mov al,cs:0[3]

指令:mov al,a[bx+si+3]

相当于:mov al,cs:0[bx+si+3]

可见,使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。我们将这种标号称为数据标号,它标记了存储数据的单元的地址和长度。

2、一般来说,我们不会在代码段中定义数据,而是将数据定义到其他段中。在其他段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。

3、在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用。

4、如果想在代码段中,直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。这种联系是编译器需要的,但绝对不是说,我们因为编辑器的工作需要,用assume指令将段寄存器和某个段相联系,段寄存器中就会真的存放该段的地址。

5、Seg操作符:功能为取得某一标号的段地址。

6、数值0~9和字符“0”~“9”之间的映射:

数值+30h=对应字符的ASCII值

10~15和“A”~“F”之间的映射关系是:

数值+37h=对应字符的ASCII值。

7、可以通过依据数据,直接计算出所要找的元素的位置的表,称为:直接定址表。

第十七章——BIOS输入和磁盘读写

1、BIOS的int 9中断例程和int 16h中断例程是一对相互配合的程序,int 9中断例程向键盘缓冲区写入,int 16h中断例程从缓冲区中读出。

2、它们写入和读出的时机不同,int 9中断例程在有键按下的时候向键盘缓冲区中写入数据。而int 16h中断例程是在应用程序对其进行调用的时候,将数据从键盘缓冲区读出。

3、常用的3.5英寸软盘的结构:分为上下两面,每面有80个磁道,每个磁道又分为18个扇区,每个扇区的大小为512B.总容量为:2*80*18*512B=1440kb

4、磁盘的实际访问由磁盘控制器进行,我们可以通过控制磁盘控制器来访问磁盘。

5、我们只能以扇区为单元对磁盘进行读写。在读写扇区的时候,要给出面号,磁道号和扇区号。面号和磁道号从0开始,而扇区号从1开始。

猜你喜欢

转载自blog.csdn.net/weixin_42617472/article/details/82884050
今日推荐