1. 程式人生 > >組合語言之第五章至第八章知識彙總 組合語言之第五章【BX】和loop指令 組合語言之第六章包含多個段的程式 組合語言之第七章更靈活的定位記憶體地址的方法 彙編實驗之第八章資料處理的兩個基本問題

組合語言之第五章至第八章知識彙總 組合語言之第五章【BX】和loop指令 組合語言之第六章包含多個段的程式 組合語言之第七章更靈活的定位記憶體地址的方法 彙編實驗之第八章資料處理的兩個基本問題

 

 

 

組合語言之第五章【BX】和loop指令

 

一:【bx】

  【bx】和之前用過的【0】有些類似,都是表示記憶體單元,而它的偏移地址在bx中。段地址預設在ds中

  描述一個記憶體單元 需要知道,1記憶體單元的地址,2記憶體單元的長度(型別)。

二:loop

  inc bx的含義是bx中的內容加1

  loop指令的格式是:   loop   標號

  cx是用來控制迴圈執行次數的

  CPU執行loop指令時,要操作1 (cx)=(cx)-1     2   判斷cx中的值,不為零則轉至標號處執行程式,如果為零則向下執行

 

三:我們使用一個描述性的符號“()”來表示一個暫存器或一個記憶體單元中的內容。

  “( )”中的元素可以有3種類型:1暫存器名 2段暫存器名  3記憶體單元的實體地址(一個20位資料)

  “(X)”所表示的資料有兩種型別:  1位元組  2字。   是哪種型別由暫存器名或具體的運算決定

四:約定idata表示常量

五:在彙編源程式中,資料不能以字母開頭。在執行命令時,如果想一次將迴圈執行完,可以使用p命令

 

六:段字首用於顯式地指明記憶體單元的段地址,如“ds:”,"cs:"

組合語言之第六章包含多個段的程式

 

一:dw=define word 即使用dw定義字型資料(資料之間以逗號分隔)dw 既可定義資料,也可以說用它開闢記憶體空間

db定義位元組型別變數,一個位元組資料佔1個位元組單元,讀完一個,偏移量加1

dw定義字型別變數,一個字資料佔2個位元組單元,讀完一個,偏移量加2
dd定義雙字型別變數,一個雙字資料佔4個位元組單元,讀完一個,偏移量加4

二:程式取得所需空間的方法有兩種,1是在載入程式的時候為程式分配,2是程式在執行的過程中向系統申請。

三:資料和指令在本質上無區別,為了讓程式的入口處是我們所希望執行的指令。我們可以加標號。在程式入口前加標號,在程式結束後加上相同的標號。

  標號 start 與 end start——end 除了通知編譯器程式結束外,還可以通知編譯器程式的入口在什麼地方,

  此處用 end 指令表明了程式的入口在標號 start 處,被轉化為一個入口地址

四:將資料、程式碼、棧放在不同的段中,可以使程式結構清晰易懂,對於8086而言,可以使用多個棧,解決長度超64kb的限制問題

  訪問段中的資料,通過地址(段地址和偏移地址),段名即代表一個標號,代表段地址。

  用偽指令 assume 將 cs、ds、ss 分別和 code、data、stack 段相連之後,CPU 也沒並沒有將對應的段和段暫存器相連線,因為 assume 只是偽指令

 

 

組合語言之第七章更靈活的定位記憶體地址的方法

 

一:and和or指令。

  and指令:邏輯與指令,按位進行與運算。通過該指令可將操作物件的相應位設為0,其他位不變。

  or指令:邏輯或指令,按位進行或運算。通過該指令可將作業系統的相應位設為1.

二:ASCII碼。一種編碼方案,是在計算機系統中通常被採用的的,所謂編碼方案,就是一套規則,它約定了用什麼樣的資訊來表示現實物件。

  一個文字編輯過程中,就包含著按照ASCII編碼規則進行的編碼和解碼。

三:以字元形式給出的資料,用‘......’的方式知名資料是以字元的形式給出的。編譯器將它們轉化為相應的ASCII碼。

四:大小寫轉換。小寫字母的ASCII碼值比大寫字母的ASCII碼值大20H。

五:【bx+idata】表示一個記憶體單元,它的偏移地址為(bx)+idata(bx中的數值加上idata)

六:si和di是8086CPU中和bx功能相近的暫存器,si和di不能分成兩個8位暫存器來使用。

  【bx+si】和【bx+di】的含義相似,表示一個記憶體單元,它的編譯地址為(bx)+(si)即bx中的數值加上si中的數值。

 

 

 

 

 

彙編實驗之第八章資料處理的兩個基本問題

 

一:reg來表示一個暫存器,用sreg來表示一個段暫存器。

  reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

  serg集合包括:ds,ss,cs,es

二:(1)在8086CPU中,只有bx,si,di,bp這四個暫存器可以用在“【....】”來進行記憶體單元的定址。

  (2)在【....】中,這四個暫存器可以單個出現,或只能以四種組合出現:bx和si,bx和di,bp和si,bp和di.

    (3只要在【....】中使用暫存器bp,而指令中沒有顯性地給出段地址,段地址就預設在ss中。

三:

四:定址方式。

五。指令要處理的資料有多長?組合語言中用以下方法處理。

(1)通過暫存器名指明要處理的資料的尺寸。

(2)在沒有暫存器名存在的情況下,
        用操作符X ptr指明記憶體單元的長度,
        X在彙編指令中可以為word或byte。
(3)其他方法。

在沒有暫存器參與的記憶體單元訪問指令中,
用word ptr或byte ptr顯性地指明所要訪問的記憶體單元的長度是很必要的。
否則,CPU無法得知所要訪問的單元是字單元,還是位元組單元

六:div指令

div是除法指令,使用div作除法的時候:
除數:8位或16位,在暫存器或記憶體單元中
被除數:(預設)放在AX 或 DX和AX中
結果:運算        8位           16位
            商          AL              AX
           餘數        AH               DX

div指令格式:
div reg
div 記憶體單元

七:

用db和dw定義位元組型資料和字型資料。
dd是用來定義dword (double word雙字)型資料的。

八:

dup是一個操作符,在組合語言中同db、dw、dd 等一樣,
也是由編譯器識別處理的符號。
它是和db、dw、dd 等資料定義偽指令配合使用的,用來進行資料的重複

 

一:【bx】

  【bx】和之前用過的【0】有些類似,都是表示記憶體單元,而它的偏移地址在bx中。段地址預設在ds中

  描述一個記憶體單元 需要知道,1記憶體單元的地址,2記憶體單元的長度(型別)。

二:loop

  inc bx的含義是bx中的內容加1

  loop指令的格式是:   loop   標號

  cx是用來控制迴圈執行次數的

  CPU執行loop指令時,要操作1 (cx)=(cx)-1     2   判斷cx中的值,不為零則轉至標號處執行程式,如果為零則向下執行

 

三:我們使用一個描述性的符號“()”來表示一個暫存器或一個記憶體單元中的內容。

  “( )”中的元素可以有3種類型:1暫存器名 2段暫存器名  3記憶體單元的實體地址(一個20位資料)

  “(X)”所表示的資料有兩種型別:  1位元組  2字。   是哪種型別由暫存器名或具體的運算決定

四:約定idata表示常量

五:在彙編源程式中,資料不能以字母開頭。在執行命令時,如果想一次將迴圈執行完,可以使用p命令

 

六:段字首用於顯式地指明記憶體單元的段地址,如“ds:”,"cs:"

一:dw=define word 即使用dw定義字型資料(資料之間以逗號分隔)dw 既可定義資料,也可以說用它開闢記憶體空間

db定義位元組型別變數,一個位元組資料佔1個位元組單元,讀完一個,偏移量加1

dw定義字型別變數,一個字資料佔2個位元組單元,讀完一個,偏移量加2
dd定義雙字型別變數,一個雙字資料佔4個位元組單元,讀完一個,偏移量加4

二:程式取得所需空間的方法有兩種,1是在載入程式的時候為程式分配,2是程式在執行的過程中向系統申請。

三:資料和指令在本質上無區別,為了讓程式的入口處是我們所希望執行的指令。我們可以加標號。在程式入口前加標號,在程式結束後加上相同的標號。

  標號 start 與 end start——end 除了通知編譯器程式結束外,還可以通知編譯器程式的入口在什麼地方,

  此處用 end 指令表明了程式的入口在標號 start 處,被轉化為一個入口地址

四:將資料、程式碼、棧放在不同的段中,可以使程式結構清晰易懂,對於8086而言,可以使用多個棧,解決長度超64kb的限制問題

  訪問段中的資料,通過地址(段地址和偏移地址),段名即代表一個標號,代表段地址。

  用偽指令 assume 將 cs、ds、ss 分別和 code、data、stack 段相連之後,CPU 也沒並沒有將對應的段和段暫存器相連線,因為 assume 只是偽指令

 

 

組合語言之第七章更靈活的定位記憶體地址的方法

 

一:and和or指令。

  and指令:邏輯與指令,按位進行與運算。通過該指令可將操作物件的相應位設為0,其他位不變。

  or指令:邏輯或指令,按位進行或運算。通過該指令可將作業系統的相應位設為1.

二:ASCII碼。一種編碼方案,是在計算機系統中通常被採用的的,所謂編碼方案,就是一套規則,它約定了用什麼樣的資訊來表示現實物件。

  一個文字編輯過程中,就包含著按照ASCII編碼規則進行的編碼和解碼。

三:以字元形式給出的資料,用‘......’的方式知名資料是以字元的形式給出的。編譯器將它們轉化為相應的ASCII碼。

四:大小寫轉換。小寫字母的ASCII碼值比大寫字母的ASCII碼值大20H。

五:【bx+idata】表示一個記憶體單元,它的偏移地址為(bx)+idata(bx中的數值加上idata)

六:si和di是8086CPU中和bx功能相近的暫存器,si和di不能分成兩個8位暫存器來使用。

  【bx+si】和【bx+di】的含義相似,表示一個記憶體單元,它的編譯地址為(bx)+(si)即bx中的數值加上si中的數值。

 

 

 

 

 

彙編實驗之第八章資料處理的兩個基本問題

 

一:reg來表示一個暫存器,用sreg來表示一個段暫存器。

  reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

  serg集合包括:ds,ss,cs,es

二:(1)在8086CPU中,只有bx,si,di,bp這四個暫存器可以用在“【....】”來進行記憶體單元的定址。

  (2)在【....】中,這四個暫存器可以單個出現,或只能以四種組合出現:bx和si,bx和di,bp和si,bp和di.

    (3只要在【....】中使用暫存器bp,而指令中沒有顯性地給出段地址,段地址就預設在ss中。

三:

四:定址方式。

五。指令要處理的資料有多長?組合語言中用以下方法處理。

(1)通過暫存器名指明要處理的資料的尺寸。

(2)在沒有暫存器名存在的情況下,
        用操作符X ptr指明記憶體單元的長度,
        X在彙編指令中可以為word或byte。
(3)其他方法。

在沒有暫存器參與的記憶體單元訪問指令中,
用word ptr或byte ptr顯性地指明所要訪問的記憶體單元的長度是很必要的。
否則,CPU無法得知所要訪問的單元是字單元,還是位元組單元

六:div指令

div是除法指令,使用div作除法的時候:
除數:8位或16位,在暫存器或記憶體單元中
被除數:(預設)放在AX 或 DX和AX中
結果:運算        8位           16位
            商          AL              AX
           餘數        AH               DX

div指令格式:
div reg
div 記憶體單元

七:

用db和dw定義位元組型資料和字型資料。
dd是用來定義dword (double word雙字)型資料的。

八:

dup是一個操作符,在組合語言中同db、dw、dd 等一樣,
也是由編譯器識別處理的符號。
它是和db、dw、dd 等資料定義偽指令配合使用的,用來進行資料的重複

 

一:and和or指令。

  and指令:邏輯與指令,按位進行與運算。通過該指令可將操作物件的相應位設為0,其他位不變。

  or指令:邏輯或指令,按位進行或運算。通過該指令可將作業系統的相應位設為1.

二:ASCII碼。一種編碼方案,是在計算機系統中通常被採用的的,所謂編碼方案,就是一套規則,它約定了用什麼樣的資訊來表示現實物件。

  一個文字編輯過程中,就包含著按照ASCII編碼規則進行的編碼和解碼。

三:以字元形式給出的資料,用‘......’的方式知名資料是以字元的形式給出的。編譯器將它們轉化為相應的ASCII碼。

四:大小寫轉換。小寫字母的ASCII碼值比大寫字母的ASCII碼值大20H。

五:【bx+idata】表示一個記憶體單元,它的偏移地址為(bx)+idata(bx中的數值加上idata)

六:si和di是8086CPU中和bx功能相近的暫存器,si和di不能分成兩個8位暫存器來使用。

  【bx+si】和【bx+di】的含義相似,表示一個記憶體單元,它的編譯地址為(bx)+(si)即bx中的數值加上si中的數值。

 

 

 

 

一:reg來表示一個暫存器,用sreg來表示一個段暫存器。

  reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

  serg集合包括:ds,ss,cs,es

二:(1)在8086CPU中,只有bx,si,di,bp這四個暫存器可以用在“【....】”來進行記憶體單元的定址。

  (2)在【....】中,這四個暫存器可以單個出現,或只能以四種組合出現:bx和si,bx和di,bp和si,bp和di.

    (3只要在【....】中使用暫存器bp,而指令中沒有顯性地給出段地址,段地址就預設在ss中。

三:

四:定址方式。

五。指令要處理的資料有多長?組合語言中用以下方法處理。

(1)通過暫存器名指明要處理的資料的尺寸。

(2)在沒有暫存器名存在的情況下,
        用操作符X ptr指明記憶體單元的長度,
        X在彙編指令中可以為word或byte。
(3)其他方法。

在沒有暫存器參與的記憶體單元訪問指令中,
用word ptr或byte ptr顯性地指明所要訪問的記憶體單元的長度是很必要的。
否則,CPU無法得知所要訪問的單元是字單元,還是位元組單元

六:div指令

div是除法指令,使用div作除法的時候:
除數:8位或16位,在暫存器或記憶體單元中
被除數:(預設)放在AX 或 DX和AX中
結果:運算        8位           16位
            商          AL              AX
           餘數        AH               DX

div指令格式:
div reg
div 記憶體單元

七:

用db和dw定義位元組型資料和字型資料。
dd是用來定義dword (double word雙字)型資料的。

八:

dup是一個操作符,在組合語言中同db、dw、dd 等一樣,
也是由編譯器識別處理的符號。
它是和db、dw、dd 等資料定義偽指令配合使用的,用來進行資料的重複