天天看點

【彙編語言/底層開發】8、資料處理的兩個基本問題

标題中所指的兩個基本問題是:(1)處理的資料在什麼地方?(2)要處理的資料有多長?要使得計算機正常工作,這兩個問題必須給予說明,否則無法工作。

這四個寄存器用于記憶體尋址的規則有:

(1)在8086中隻有這四個寄存器可以用于[]中進行記憶體單元尋址。也就是說,指令: mov ax, [bx]是正确的,而mov ax, [cx]是錯誤的。

(2)在[]尋址中,這四個寄存器可以單獨出現,也可以按照以下四種組合出現:bx+si, bx+di, bp+si, bp+di。以下使用時錯誤的: mov ax, [bx+bp]; mov ax, [si+di]。

(3)若在[]中使用了bp,而指令中沒有顯式指出段位址,則段位址預設儲存于ss(即ss等同于sp)。

基本上所有的機器指令的分類大緻分為讀取、寫入、運算三類,其運作所最關心的問題是執行指令前一刻要處理資料的位置(通常來自于三個地方:CPU内部、記憶體和端口)。

三個概念:(1)立即數;(2)寄存器;(3)段位址和偏移位址。

表示資料放在記憶體中時确定資料位置的方式,主要有:直接尋址、寄存器間接尋址、寄存器相對尋址、基址編址尋址、相對基址編址尋址。

80X86指令可以處理字和位元組兩種尺寸的資料,指定資料長度的方法主要有三種:

(1)通過寄存器名說明;即通過ax等寄存器擷取資料則表示字操作,通過al、ah等寄存器則是表示位元組操作;

(2)在沒有寄存器名的情況下,通過word ptr或byte ptr指明字操作或位元組操作;

(3)通過指令預設制定操作方式;如push、pop等隻進行位元組操作。

注意的問題:

(1)除數:可能為8或16位,儲存于記憶體單元或寄存器中;

(2)被除數:被除數的位數一定是除數的2倍;16位的被除數儲存于AX中,32位的被除數儲存于DX+AX中,前高後低;

(3)商和餘數:商儲存于AL或AX中(根據除數為8或者16位),餘數儲存于AH或DX中(根據除數為8或者16位);

類似于定義字型資料的僞指令dw,dd用于定義一個雙位元組結構,即define double。

操作符dup為duplicate的簡稱,配合db、dw、dd等僞指令,進行資料的重複。

如:db 3 dup(0)——表示定義三個位元組,值均為0;db 3 dup(0,1,2)——表示定義三個位元組,其值分别為0,1,2;

最前面的僞指令表示定義資料的類型,dup前面的數字表示括号内的值重複的次數,括号中表示定義的資料。

繼續閱讀