1.咱们都知道,8086能够访问1MB内存,其中,0xF0000~9FFFF属于常规内存,由内存条提供;0xF0000~0xFFFFF由主板上的一个芯片提供,即ROM-BIOS。这样一来,中间还有一个320KB的空间,即0xA0000~0xEFFFF。传统上,这段地址空间由特定的外围设备来提供,其中就包括显卡。由于显示功能对于现代计算机来讲实在过重要了。spa
2.因为历史缘由,全部在我的计算机上使用的显卡,在加电自检以后都会把本身初始化到80*25的文本格式。在这种模式下,屏幕上能够显示25行,每行80个字符(一个字符两个字节组成)。每屏总共2000个字符(4000字节)。设计
3.一直以来,0xB8000~0xBFFFF这段物理地址空间,是留给显卡的。ip
tip:不容许将当即数传送到段寄存器。内存
4.屏幕上的每一个字节对应着显存中的两个连续字节,前一个是字符的ASCLL代码,后面是字符的显示属性,包括字符颜色(前景色)和底色(背景色)。字符的显示属性(1字节)分为两部分,低4位定义的是前景色,高4位定义的是背景色。格式:K R G B + I R B G(K是闪烁位,为0时不闪烁,为1时闪烁;I是亮度位,为0时正常,为1时高亮)编译器
RGB:(000黑;001蓝;010绿;011青;100红;101品红;110棕;111白)编译
tip:mov指令的目的操做数不容许为当即数,并且,目的操做数和源操做数不容许同时为内存单元。循环
5.在源程序的编译阶段,编译器会把源程序总体上做为一个独立的段来处理,并从0开始计算和跟踪每一条指令的地址。由于该地址是在编译期间计算的,故称汇编地址。汇编地址是在源程序编译期间,编译器为每条指令肯定的汇编位置,指示该指令相对于程序或者段起始处的距离,以字节计。当编译后的程序装入物理内存后,它又是该指令在内存段内的偏移地址。
二进制
6.在NASM汇编语言中,每条指令的前面均可以拥有一个标号,以表明和指示指令所在的汇编地址。程序
例如:im
0x0000012B infi: jmp near infi
在这里,行首带冒号的标号是“infi”。这条指令的汇编地址是0x0000012B,故infi就表明数值0x0000012B。或者说是0x0000012B的符号化表示。
7.在程序中声明并初始化数据:要放在程序中的数据使用DB指令来声明的(Declare)的,DB的意思是声明字节(Declare Byte),因此,跟在它后面操做数都占一个字节的长度。注意,若是声明超过一个以上的数据,各个操做数之间必须以逗号隔开。
除此以外,DW(Declare Word)用于声明字数据,DD(Declare Double Word)用于声明双字数据,DQ(Declare Quad Word)用于声明四字数据。DB,DW,DD和DQ并非处理器指令而是汇编指令(伪指令)。
8.8086处理器提供除法指令div,它能够作两种类型的除法。
第一种:是用16位的二进制数除以8位的二进制数。在这种状况下,被除数必须在寄存器AX中,必须事先传送到AX寄存器里。除法能够由8位的通用寄存器或者内存单元提供。指令执行后,商在寄存器AL中,余数在寄存器AH中。
第二种:使用32位的二进制数除以16位的二进制数。在这种状况下,由于16位的处理器没法直接提供32位的被除数,故要求被除数的高16位在DX中,低16位在AX中。咱们一般用DX:AX来描述32位的被除数。同时,除数能够由16位的通用寄存器或者内存单元提供,指令执行后,商在AX中,余数在DX中。
9.使程序进入无限循环状态(初步了解jump指令)
例:infi : jump near infi
jump是转移指令,用于使处理器脱离当前的执行序列,转移到指定的地方执行。关键字near(伪指令)表示目标依然在当前代码段内。
第一种状况,若jump后跟物理地址(即段地址:偏移地址)则jump的操做码是0xEA
第二种状况,若jump后跟汇编地址,则jump的操做码是0xE9
10.主引导扇区有效标志:计算机的设计者决定,一个有效的主引导扇区,其最后两个字节的数据必须是0x55和0xAA。不然,这个扇区里保存的就不是一些有意而为的数据。
在示例代码中,经过计算获得前面的内容和结尾的0xAA55之间,有203字节的空洞。所以,源程序的第102行,用于声明203为0的数值来填补。
例:times 203 db 0(重复db 0指令203次)