8.0 概述
資料處理的兩個基本問題:
(1) 處理的資料在什麼地方?
(2) 要處理的資料有多長?
為了描述上的簡潔,後面使用reg表示乙個暫存器,sreg表示乙個段暫存器。
reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di
sreg的集合包括:ds,ss,cs,es
8.1 bx,bp,si,di
(1) 8086cpu中,只有這四個暫存器可以用在「[...]」中來進行記憶體單元的定址
(2) 這四個暫存器在「[...]」中只能單獨出現,或以下面四種組合出現:bx+si,bx+di,bp+si,bp+di
(3) 只要在「[...]」中使用了bp而沒有顯式地給出段位址,段位址預設就在ss中
8.2 機器指令處理的資料在什麼地方
指令在執行前,所要處理的資料可以在3個地方:cpu內部,記憶體,埠
8.3 組合語言中資料位置的表達
組合語言中用三個概念來表達資料的位置:
(1) 立即數(idata)
對於直接包含在機器指令中的資料(執行前在cpu的指令緩衝器中),在組合語言中稱為立即數,在彙編指令中直接給出。
(2) 暫存器
指令要處理的資料在暫存器中,在彙編指令中給出相應的暫存器名。
(3) 段位址(sa)和偏移位址(ea)
指令要處理的資料在記憶體中,在彙編指令中可以用[x]的格式給出ea,sa在某個段暫存器中。
8.4 定址方式(定位記憶體的方法)
直接定址:[idata]
暫存器間接定址:[bx],[bp],[si],[di]
暫存器相對定址:[bx+idata],[bp+idata],[si+idata],[di+idata]
基址變址定址:[bx+si],[bx+di],[bp+si],[bp+di]
相對基址變址定址:[bx+si+idata],[bx+di+idata],[bp+si+idata],[bp+di+idata]
8.5 要處理的資料有多長
8086cpu的指令,可以處理兩種尺寸的資料,byte和word。所以在機器指令中要指明,指令進行的是字操作還是位元組操作。
(1) 通過暫存器名指明要處理的資料的尺寸。
(2) 在沒有暫存器名的情況下,用操作符「x ptr」指明記憶體單元的長度,「x」在彙編指令中可以為word或byte。
例:move word ptr ds:[0],1
move byte ptr ds:[0],1
(3) 其他方法:push或pop指令只進行位元組操作。
8.6 定址方式的綜合運用
8.7 div指令
div是除法指令,使用時應注意:
1) 除數:有8位和16位兩種,在乙個reg或記憶體單元中
2) 被除數:預設放在ax或dx和ax中。如果除數為8位,被除數則為16位,預設放在ax中;如果除數為16位,則被除數為32位,高位存放在dx中,低位存放在ax中。
3) 如果除數為8位,al存放商,ah存放餘數;如果除數為16位,ax存放商,dx存放餘數。
8.8 偽指令dd
用於字義雙字型資料(32位)
8.9 操作符dup
與db,dw,dd配合使用,由編譯器識別處理,用於進行資料的重複。語法:
db/dw/dd 3 dup (0,1,2)
注:表示定義位元組、字、雙字型資料,並將(0,1,2)三個資料重複3次
實驗7 定址方式在結構化資料訪問中的應用
略
組合語言之資料處理
機器指令資料處理的位置 彙編 指令前資料的位置 mov bx,0 記憶體單元 ds 0 mov bx,ax cpu內部,ax暫存器 mov bx,1 cpu內部,指令緩衝器 先來介紹下等下需要用到的名詞 sa 表示段位址 ea表示偏移量 段字首指令mov ax,0 中,記憶體單元的段位址預設為ds,...
組合語言學習第8章
1.資料處理的兩個基本問題 這已經是老生常談啦,資料處理有兩個關鍵的問題 第一,需要處理的資料在 什麼地方?第二呢,是需要處理的資料 有多長?這兩個問題 是我們 程式設計的基礎,如果不知道資料從何而來,其規模大小 再優秀的計算機也是會無能為力啦 在這裡先定義兩個符號 reg 和 sreg reg 表...
組合語言第10章筆記
call 和 ret 指令都是轉移指令,它們修改ip,或同時修改cs和ip。ret指令用棧中的資料,修改ip的內容,實現近轉移 retf指令用棧中的資料,修改cs和ip的內容,實現遠轉移。ret指令相當於 pop ip retf 指令相當於 pop ip pop cs call指令 1 將當前的ip...