8086汇编

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26025363/article/details/72551943

8086汇编整理

学习汇编过程中资料片段的整理,并没有很完整的注解,很零碎

  • 8086处理器内部的8个16位的通用寄存器:
    AX、BX、CX、DX、SI、DI、BP、SP
    其中AX,BX,CX,DX,可以拆分为两个8位的寄存器来使用分别为AH,AL,BH,BL,CH,CL,DH和DL
  • 为了在硬件一级提供对“段地址:偏移地址”内存访问模式的支持,处理器至少要提供两个段寄存器,分别是代码段寄存器CS和数据段寄存器DS,一旦处理器遇到一条访问内存的指令,将把DS中的数据段起始地址和指令中提供的段内偏移相加,来得到访问内存所需要的物理地址
  • 8086内部有4个段寄存器,CS是代码段寄存器,DS是数据段寄存器,ES是附加段寄存器 SS是栈段寄存器
  • IP是指令指针寄存器,只和CS一起使用,当一段代码开始执行时,CS指向代码段的起始地址,IP指向段内偏移。
  • 汇编语言对指令的大小写没有特别的要求
    -在Inter 8086为处理机的系统中,ROM占据着整个内存空间顶端的64kb,物理地址范围是0xF0000~0xFFFFF,里面固化了开机时要执行的指令。DRAM占据着较低端的640KB,地址范围为0x00000~0x9FFFF,中间的部分,分给了外围设备
  • 8086加电复位时,CS=0xFFFF,IP=0x0000,所以其取的第一条指令位于物理地址0xFFFF0,正好位于ROM中。
  • 处理器取指令执行的自然顺序是从内存的低地址往高低地址推进。
  • ROM中位于物理地址0xFFFF0的地方,通常是一个跳转指令,通过改变CS和IP的内容,使处理器从ROM中的较低地址处开始取指令执行。
  • 硬盘的第一个扇区是0面0道1扇区,或者说是0头0柱1扇区,这个扇区称为主引导扇区,如果计算机的设置是从硬盘启动,那么ROM-BIOS将读取硬盘主引导扇区的内容,将它加载到内存地址0x0000:0x7c00处,即物理地址 0x07C00,这个地址是固定的,规定!!
  • 要访问硬盘,运行中的程序必须至少向硬盘控制器提供4个参数,分别是磁头号、磁道号、扇区号、以及访问意图(读或写)
  • 硬盘的读写是以扇区为最小单位的,无论什么时候,要从硬盘读数据,或者向硬盘写数据,至少是一个扇区。
  • 8086可以访问1MB内存,其中,0x0000~9FFFF属于常规内存,由内存条提供,0xF0000~0xFFFFF由主板上的一个芯片提供,即ROM-BIOS
  • 历史原因:所有在个人计算机上使用的显卡,在加电自检之后都会把自己初始化到80*25的文本模式,在这种模式上,屏幕上可以显示25行,每行80个字符,每屏总共2000个字符。一直一来,0xB8000~0xBFFFF这段内存空间是留给显卡的。
  • 访问显存,也需要使用逻辑地址,采用”段地址:偏移地址“的形式,文本模式下显存的起始物理地址为0xB8000,这个内存单元对应于屏幕左上角的第一个字符的位置。
  • 访问内存可以使用段寄存器DS,也可以使用ES。
  • intel处理器不允许将一个立即数传送到段寄存器,只运行mov 段寄存器 ,通用寄存器 mov 段寄存器,内存单元
  • 屏幕上的每个字符对应着显存中的两个连续字节,前一个是字符的ASCII码,后面是字符的显示属性,包括字符颜色(前景色)和底色(背景色),低4位为前景色,高4位定义的是背景色
  • 关键字byte用来修饰目的操作数,指出本次传送的是以字节的方式进行的。
  • mov指令的目的操作数不允许为立即数,目的操作数和源操作数不允许同时为内存单元。
  • 要放在程序中的数据用DB指令来声明,DB的意思是声明字节,跟在它后面的操作数都占一个字节的长度。
  • DW用于声明字数据,DD用于声明双字数据,DQ用来声明四字数据。都是伪指令
  • 除法指令div:
    1. 第一种类型是用16位的二进制数除以8位的二进制数,被除数必须在寄存器AX中,必须实现传送AX寄存器里,除数可以由8位的通用寄存器或者内存单元提供。指令执行后,商在寄存器AL中,余数在寄存器AH中。
    2. 第二种类型是用32位的二进制数除以16位的二进制数,在这种情况下,因为16位的无法直接提供32位的被除数,故要求被除数的高16位在DX中,低16位在AX中。除数可以由16位的通用寄存器或者内存单元提供,指令执行后,商在AX中,余数在DX中。
  • movsb或者movsw指令:通常用于把数据从内存中的一个地方批量的传送到另一个地方,处理器将他们看成字符串。movsb的传送是以字节为传送单位的,movsw的传送是以字为单位的。
    movsb和movsw指令执行时,原始数据串的段地址由DS指定,偏移地址由SI指定,简写为DS:SI,要传送的目的地址由ES:DI指定,传送的字节数或者字数由CX指定,还分正向传送和反向传送,每次传送CX的内容自动减一
  • 8086处理器有一个特殊的寄存器,叫做标志寄存器FLAGS,第6位是ZF标志,即零标志。第10位是方向标志DF,将这一位清零或者置1,能控制movsb和movsw的传送方向。
  • 8086处理器上,如果要用寄存器来提供偏移地址,只能用BX,SI,DI,BP,不能使用其他寄存器。
  • AX是累加器,CX是计数器,DX是数据寄存器,SI是源索引寄存器,DI是目标索引寄存器
  • 可以在任何带有内存操作数的指令中使用BX,SI或者DI提供偏移地址。

猜你喜欢

转载自blog.csdn.net/qq_26025363/article/details/72551943