汇编语言随笔(1)- 初步介绍和寄存器概览
????????基于8086CPU匯編指令集,源于《匯編語言》第三版,王爽著
一:概述
匯編語言的指令組成
????????1,匯編指令:機器碼的助記符,有對應的機器碼。
????????2,偽指令:沒有對應的機器碼,由編譯器來執行。
如:segment 和 ends、assume、end。
????????3,其他符號:如+、-、*、/,由編譯器識別,無對應的機器碼。如:mov ax,2x8+9 等價于mov ax,25
CPU對數據的讀寫
????????需進行三類信息的交互:
????????1,存儲單元的地址(地址信息)
????????2,器件的選擇,讀或寫的命令(控制信息)
????????3,讀或寫的數據(數據信息)
????????其中:寬度為16的地址總線尋址空間為2^16B即64KB大小。
8086CPU的結構
????????8086CPU是16位機,它是16位結構的CPU。即:
????????1,運算器一次最多可以處理16位的數據
????????2,寄存器的最大寬度為16位
????????3,寄存器和運算器之間的通路為16位
????????但8086CPU有20位地址總線,即可傳送20位地址,尋址能力為1MB。但其內部一次最多傳輸的地址信息為16位,所以其采用將兩個16位地址合成的方法來形成20位的物理地址的方法進行尋址。這兩個16位地址其中一個稱為段地址,另一個稱為偏移地址。實際物理地址的計算方式為:物理地址=段地址*16+偏移地址,當用16進制表示時,就是將段地址左移一位,再和偏移地址相加。在實際的內部處理中,只需將二進制信息左移4位即可,這和分頁存儲中內部計算物理地址的實現方式是相類似的。
????????我們可以根據需要將若干連續的內存單元看作為一個段,用偏移地址定位其中的內存單元。注意:一個段的起始地址=段地址*16,故段起始地址必為16的倍數;由于16位的偏移地址的尋址能力為64KB,則一個段的最大長度為64KB。例:當段地址為0001H,CPU的尋址范圍為00010H到1000FH。
二:寄存器
????????8086cpu一共有14個寄存器,均為16位,可存放兩個字節。具體如下:
????????1,通用寄存器:AX、BX、CX、DX,通常用來存放一般性的數據。
這四種寄存器都可以被分為兩個獨立的8位寄存器來使用,對應如下:
AH,AL???????BH,BL???????CH,CL???????DH,DL。分別對應每一種通用寄存器的高8位(.H)和低8位(.L)。
????????8位寄存器可存儲數據范圍:0-255(無符號原碼)、-128-127(補碼)。16位寄存器可存儲的數據范圍:0-65535(無符號原碼)、-32768-32767(補碼)
????????若非注明,默認在寄存器和內存中均使用小端法來存儲數據,即數據的低字節部分放在低地址的內存單元中。如數據4E20H在AX中的存放,是將4E放在AH中,將20放在AL中。
????????2,段寄存器:CS、DS、SS、ES,用來存放段地址。其中CS是用來存放代碼段地址的,DS是用來存放數據段地址的,SS是用來的存放棧段地址的,ES一般留做用戶使用。
????????3,偏移地址寄存器(自己定義的,不太標準):SI、DI、BP,這三個寄存器和通用寄存器BX常用來存儲偏移地址。當采用組合方式出現時,只能是下面四種情況:bx和si,bx和di,bp和si,bp和di。當有存放偏移地址的bp寄存器出現時,默認的段地址存放在ss中。其余如si,di,bx,bx+si,bx+di默認對應的段寄存器為ds。
????????4,指令指針寄存器IP,它和CS一起來使用定位指令的地址,記作CS:IP。在任意時刻,CPU將CS:IP指向的內容當作指令來執行。
????????5,寄存器SP,它常和棧段地址寄存器SS一起使用,記作SS:SP,在任意時刻,SS:SP都指向棧頂元素。
????????6,標志寄存器PSW,其中存儲的信息被稱為程序狀態字(PSW),也可稱為flag寄存器。它是按位起作用的,每一個標志位都有其特殊的含義
總結
以上是生活随笔為你收集整理的汇编语言随笔(1)- 初步介绍和寄存器概览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于vs中代码生成的运行库
- 下一篇: 汇编语言随笔(2)-CPU指令周期和无条