什么叫基址寄存器?什么叫位移量?

2025-02-24 19:50:10
推荐回答(1个)
回答1:

通用寄存器:8个,包括数据寄存器、地址指针寄存器、变址寄存器。 数据寄存器4个:AX BX CX DX,它们又可作为8个8位的寄存器使用,即AH BH CH DH AL BL CL DL AX称为累加器,I/O指令均使用该寄存器,访问外部硬件和接口。 BX称为基址寄存器,在访问内存时用于存放基地址。 地址指针寄存器2个:SP BP SP称为堆栈指针寄存器,BP称为基址指针寄存器,在作数组和字符串运算时,用于存放内存的偏移地址。 变址寄存器2个:SI DI SI称为源变址寄存器,DI称为目的变址寄存器,用于数据块操作的内存寻址。 汇编数上这些都有的 关于位移量: 初学汇编的人,对于数据在内存中的存储十分迷茫. 其实很简单,一个连一个地存储. 除非你特别指定要空出几个字符.否则都是一个空都不落地往下存. 于是,当你连续定义了字符a、字b、双字c,当你知道了a的偏移量,你可以用这个(偏移量+2)配合段地址找到字b的高位字节,亦可同时使用DWORD PTR调用从这个字节开始的四个字节所存储的内容组成的双字的值,十分随意。 16位汇编,用于16位计算机,它们最多处理16位二进制,至于双字,不能直接处理;地址线有20条,即地址为20位二进制。 32位汇编,用于32位计算机,它们最多处理32位二进制。地址线有32条,即地址为32位二进制。 地址的位数越大,所能表示的地址值就越大,所能容纳的内存容量就越大。 若将内存作为一个整体,将程序放在它的不同位置,则每个变量都有一个相当长相当复杂的地址,不便于管理。于是将内存分成若干个段,程序的第一个字节数据就存储于这个段之后第一个字节里,第100个字节数据就存储于这个段之后第100个字节里,这100就是这个字节数据的偏移量。 其实分段存储并非起于如上便于管理的原因,相信你所看的书里有详细的解释。它一开始是为了解决地址位数(20位)和16位计算机处理的数据位数(最大16位)之间的矛盾,16位计算机无法直接生成20位的地址,于是就在内存与数据之间增加了段的概念。段值为16位,在计算最终地址时,它将被乘以2的4次方,扩展到20位,就像1,2,3,4乘以100,变成100,200,300,400,便生成了段在内存中的起始地址。段值与偏移量运算便得到各个数据在内在中的地址。