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次)