匯編(三)——關於寄存器的操作


匯編(三)

一、通用寄存器

AX、BX、CX、DX

1 byte = 8 bit

2 byte = 16 bit

0000 0000 0000 0000 ~ 1111 1111 1111 11111

他們可以各自分為2個8位寄存器

AX = AH*AL

BX = BH*BL

CX = CH *CL

DX = DH*DL

為什么存在通用寄存器?

1.因為為了兼容之前的8位寄存器,保證之前的程序,稍加修改就可以運行在8086CPU上

2.內存最小單元 8 bit

CPU從內存中讀取一個字節 8 bit字節的數據

8位數據 -> 8位寄存器中

16根數據線

8086CPU一次性可以處理 2種尺寸的數據

字節型數據 byte 8bit 8位寄存器中

字型數據 2byte 16bit 16位寄存器中 2個字節

一個字節是高位數據,一個是低位

二、加深對AX、BX、CX、DX印象

mov ax,5

mov ax,0

mov al,5

按下r查詢,按下t執行

分析下面命令
mov ax,4E20
mov bx,ax
mov ch,bl
mov cl,bh
mov dl,ch
mov ax,dx

16位寄存器和8位寄存器不能互相移動

mov ax,bl 不行,不能將8位數據移動到16位寄存器中
mov al,bx 不行,不能將16位數據移動到8位寄存器中

問題:我們使用數據處理加法,超過了al或者bx,那么是報錯還是?

mov ax,18
mov bx,8
add ax,5

add 加法指令 類似C中的+=

8位寄存器進行8位計算,保存8位數據,如果超過了,那么保存在其他地方了,並沒有消失

三、監測點2.1

寫出每條指令執行后相關寄存器的值

mov ax,62627
mov ah,31H
mov al,23H
add ax,ax
mov bx,826cH
mov cx,ax
mov ax,bx
mov ax,bx
mov al,bh
mov ah,bl
mov ah,bh
mov ah,ah
mov al,6

四、地址寄存器

段地址寄存器,偏移地址寄存器

ds sp

es bp

ss si

cs di

​ lp

​ bx

  • cs code Segment
  • ds data segment
  • ss stack segment
  • es extra segment

8086 CPU 給了20根地址線

0000 0000 0000 0000 ~ 1111 1111 1111 1111

0 ~ FFFFF H

地址線的數量,決定了CPU的尋址能力

地址加法器 地址的計算方式

段地址 * 16 + 偏移地址 = 物理地址

段地址 * 16 = 基礎地址

基礎地址 + 偏移地址 = 物理地址

段地址:偏移地址

段地址 偏移地址

F230H*10H C8H

練習:

我們對地址進行修改並且查看,之后發現我們的地址確實修改了,我們也可以轉換為其他地址進行修改

d 2001:1F60//查看地址
e 2001:1F60//修改地址

五、監測點2.2

段地址*10H + 偏移地址 = 物理地址

1.段地址為0001H,僅通過變化偏移進行尋址,CPU尋址范圍為()~()

基礎地址10H

偏移地址0~FFFFH

物理地址為10H~1000FH

2.計算SA

SA * 10H + FFFFH = 20000H

所以SA計算是小數,所以,不能首先確定邏輯地址

六、CPU如何區分指令與數據

u指令 將某個內存地址,全部當做指令

d指令 將某個內存地址,全部當做數據

r指令 查看寄存器

CS寄存器 IP寄存器

CS:code Segment

ip:instrument pointer

七、加深CPU如何區分指令和數據印象

將上面的機器碼,用e指令,輸入到2000H中,修改cs和ip指向2000H:0中,然后即可執行

機器碼           匯編指令

b8 20 4e       mov ax,4E20

05 16 14       add  ax,141

bb 00 20       mov bx,2000H

01 d8             add ax,ax

89 c3              mov bx,ax

01 d8              add ax,bx

b8 1a 88         mov ax,001AH

bb 26 00         mov bx,0026H

00 d8               add al,bl

00 dc                add ah,bl

00 c7                 add bh,al

b4 00                 mov ah,0

00 d8                add a1,b1

04 9c                 add a1,9c

八、IP寄存器和指令的關系

指令都是有長度的 一條指令可以由多個字節構成

指令的執行過程

  1. CPU 從 CS : IP 進行讀取指令,存放到緩存器中
  2. IP = IP + 所讀指令長度
  3. 執行指令緩存器中的內容,回到第一步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM