《80X86 IBM PC 及兼容计算机》第一天

    接上

    典型的汇编语言程序至少有三个部分组成:代码段、数据段、堆栈段。代码段包含了执行指定任务的汇编语言指令。数据段用来存储那些将被代码段中的指令所处理的信息。堆栈段用来存储临时信息。

   8086CPU汇编语言中的段是一块存储区域,最多可以包含64KB,并且开始于一个可以被16正处的地址也就是以0H结尾。8086的最多只能处理64KB的代码、数据、堆栈信息,尽管有20个地址引脚能够使用1MB的存储量。

    8086中经常提到三种地址:物理地址、偏移地址、逻辑地址。物理地址是实际地址。偏移地址是段中的某个位置。逻辑地址由段和偏移组成。

    8086 CPU 中指令由操作码和运算数铸成。指令的逻辑地址为CS:IP。物理地址是(CS) * 16 + (IP)。8086 CPU 放置到地址总线并由存储器电路解码的地址是物理地址。

    8086 CPU 中数据段使用ds:偏移值 表示逻辑地址。如果要将地址为0200H中的数据放入到ax中,方法为:MOV AL, [0200],注意偏移地址被包围在方括号中,方括号表明运算数代表的是数据的地址而不是数据本身。

    接下来就是数据信息在存储器中的存储方式了,分为两种小端规则和大端规则。所谓小端规则就是高位字节存储到高位地址,低位字节存储到低位地址;大端规则相反,高位字节存储到低位地址,低位字节存储到高位地址。

    IBM PC 的存储映射表:00000H-9FFFFH的640KB空间作为常规存储器,DOS操作系统也存储在这里,A0000H-BFFFFH的128KB空间用作视频显示,C0000H-FFFFFH的256KB用作ROM。只有F0000H-FFFFFH的64KB用作BIOS的ROM。

    前面可知堆栈是用来存储临时信息,堆栈的主要缺点在于访问时间太长,它的访问时间远远长于寄存器的访问时间。8086的堆栈操作是针对十六位的。因为IP总是指向下一条将被执行的指令,而且随着指令的执行它的值总是随之递增;而SP的值总是减小,所以为了防止代码段和堆栈段相互干扰,它们总是被安排在分配给程序的RAM的两端。虽然相向而行但是却不能够相遇,否则会发生冲突,引起程序崩溃。

    对于段地址和偏移地址需要注意点的是如果段地址左移加上偏移地址后大于允许的最大值FFFFFH,那么就会发生折回,从00000H开始继续超过的部分。

    在寻址中,寄存器间接寻址所用的寄存器有SI、DI和BX,这时段寄存器默认为DS。

你可能感兴趣的:(汇编,微机)