第一章 彙編語言基礎知識
1.1 寄存器
寄存器是CPU內部高速儲存單元,它們提供數據和地址。
16位Intel 8086/80826 CPU中的寄存器爲:
AX BX CX DX
SI DI BP SP
存儲器地址
存儲器地址是存儲器中存儲單元的編號
每個存儲單元存放一個字節量的數據 一個字節B(Byte)=8個二進制位b(bit)
採用十六進制數來表達地址 Intel 8086具有1兆字節(1MB)存儲器容量
存儲器地址表示爲:00000H ~ FFFFFH 其中大寫H(或小寫h)表示是十六進制數
端口
IO端口是接口電路中寄存器的編號
採用十六進制數來表達端口
Intel 8086支持64K個8位端口
I/O地址可以表示爲:0000H ~ FFFFH
1.2 數據表示
(進制轉換部分略)
BCD碼
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
真值:現實中真實的數值
機器數:計算機中用0和1數碼組合表達的數值
無符號數:只表達0和正整數的定點整數
有符號數:表達負整數、0和正整數的定點整數 符號位需要佔用一個位 常用機器數的最高位 0表示正數、1表示負數
定點數:固定小數點的位置表達數值的機器數
定點整數:將小數點固定在機器數的最右側表達的整數
定點小數:將小數點固定在機器數的最左側表達的小數
浮點數:小數點浮動表達的實數
補碼
有符號整數在計算機中默認採用補碼
最高位表示符號:正數用0,負數用1
正數補碼:直接表示數值大小(同無符號數)
負數補碼:將對應正數補碼取反加1
[105]補碼=01101001B
[-105]補碼=[01101001B]取反+1 =10010110B+1=10010111B
8位二進制補碼錶示的數值範圍:-128~+127
16位二進制補碼錶示的數值範圍:-2^15~+2^15-1
32位二進制補碼錶示的數值範圍:-2^31~+2^31-1
負數真值“取反加1”得機器數補碼
負數補碼“取反加1”得到負數真值
補碼:11100000B 真值:-([11100000]求反+1)=-(00011111+1) =-00100000=-2^5=-32
1.3 主存空間的分配
總線接口單元BIU:負責讀取指令和操作數
執行單元EU :負責指令譯碼和執行
8086寄存器
8086微處理器
總線接口單元BIU:負責讀取指令和操作數
執行單元EU :負責指令譯碼和執行
數據寄存器
AX——累加器,算術邏輯運算。
BX——基址寄存器,存放儲存器地址。
CX——計數器,循環等。
DX——數據寄存器,常用來儲存雙字數據的高16位。
變址寄存器用於存儲器尋址提供地址
SI——源變址寄存器
DI——目的變址寄存器
指針寄存器用於尋址內存堆棧的數據
SP——堆棧指針寄存器,指示棧頂
BP——基址指針寄存器,指示棧底
標誌寄存器
指令指針IP
指示代碼段中指令的偏移地址,與代碼寄存器CS常用,通過CS:IP寄存器控制指令序列。
段寄存器
CS:代碼段起始地址
SS:堆棧段起始地址
DS:數據段
ES:附加段
計算機中信息的單位
二進制位bit:一位二進制數0/1
字節byte:8個二進制位D7-D0
字word:16位,2個字節,D15-D0
雙字Dword:32位,4個字節,D31-D0
一個存儲單元除了具備唯一的物理地址外還有多個邏輯地址。
物理地址:00000H~FFFFFH
處理器利用CS:IP取得下一條要執行的指令
利用SS:SP操作堆棧頂的數據
數據段:DS:EA
邏輯段的分配:
指令序列:代碼段
堆棧:堆棧段
數據默認在數據段,也有在附加段,串操作的目的區必須在附加段
沒有指明時,一般的數據訪問在DS段;使用BP訪問主存,則在SS段
CS: ;代碼段超越,使用代碼段的數據
SS: ;堆棧段超越,使用堆棧段的數據
DS: ;數據段超越,使用數據段的數據
ES: ;附加段超越,使用附加段的數據
立即數尋址(imm)
imm——8/16位 00~FF/0000~FFFF
寄存器尋址
MOV BX,AX
存儲器選址
直接尋址
MOV AX,[2000H]
AX<-DS:2000H
間接尋址
MOV AX,[SI]
AX<-DS:[SI]
相對尋址
有效地址=BX/BP/SI/DI+8/16位位移量
MOV AX,[DI+06H] ;AX←DS:[DI+06H]
MOV AX,[BP+06H] ;AX←SS:[BP+06H]
基址變址尋址
有效地址=BX/BP+SI/DI
BP默認是SS
相對基址變址尋址
有效地址=BX/BP+SI/DI+8/16