彙編語言-第三章 寄存器(內存訪問)

3.1 內存中字的存儲

在內存中存儲時,因爲內存單元是字節單元(一個單元存放一個字節),則一個字要用兩個地址連續的內存單元來存放,這個字的低位字節存放在低地址單元中,高位字節存放在高地址單元中。
字單元,即存放一個字型數據(16位)的內存單元,由兩個地址連續的內存單元組成。編程

3.2 DS和[address]

CPU要讀寫一個內存單元的時候,必須先給出這個內存單元的地址,在8086PC中,內存地址由段地址和便宜地址組成。
8086CPU中有一個DS寄存器,一般用來存放要訪問數據的段地址。設計

例子1:

讀取10000H中的內容,能夠用以下的程序段進行:code

mov bx 1000H //10000H用段地址和偏移地址表示爲1000:0
mov ds,bx
mov al,[0] //[0]中的0說明這個內存單元的偏移地址是0,
          //它的段地址默認放在ds中

8086CPU不支持將數據直接送入段寄存器的操做(這是8086CPU硬件設計的問題),ds是一個段寄存器,因此mov ds,1000H是非法的。
要想將1000H送入ds寄存器,只能用一個寄存器進行中專,即先將1000H送入一個通常的寄存器,如bx,再將bx中的內容送入ds。對象

  • 1000H表示段地址
  • [0]表示偏移地址是0

例子2

將al中的數據送入內存單元10000H中內存

mov bx,1000H
mov ds,bx
mov [0],al

3.3 字的傳送

8086CPU是16位結構,有16跟數據線,因此,能夠一次性傳送16位的數據。硬件

例一

mov bx,1000H 
mov ds,bx
mov ax,[0]    //1000:0處的字型數據送入ax,    
              //[0]說明操做對象是一個內存單元,而且內存單元的偏移地址    
              //是0,它的段地址默認放在ds中    
mov [0],cx    //cx中的16位數據送到1000:0處

3.4 mov、add、sub命令

mov命令能夠有以下幾種形式:程序

  • mov 寄存器,數據
    好比,mov ax,5
  • mov 寄存器,寄存器
    好比:mov ax,bx
  • mov 寄存器,內存單元
    好比:mov ax,[0]
  • mov 內存單元,寄存器
    好比:mov [0],ax
  • mov 段寄存器,寄存器
    好比:mov ds,ax
  • mov 寄存器,段寄存器
  • mov 內存單元,寄存器

3.5 數據段

在編程時,咱們能夠根據須要,將一組內存單元定義爲一個段。
將一段內存看成數據段,是咱們在編程時的一種安排,咱們能夠在具體操做的時候,用ds存放數據段的地址,再根據須要,用相關指令訪問數據段中的具體單元。數據

例子一

假如,咱們將123B0H~123BAH的內存單元定義爲數據段。咱們如今要累加這個數據段中的前3個單元中的數據,代碼以下:co

mov ax,123BH    
mov ds,ax      //將123BH送入ds中,做爲數據段的段地址
mov al,0        //用al存放累加結果
add al,[0]      //將數據段第一個單元(偏移地址爲0)中的數值加到al中
add al,[1]      //將數據段第二個單元(偏移地址爲1)中的數值加到al中
add al,[2]      //將數據段第三個單元(偏移地址爲2)中的數值加到al中

例子二

累加數據段中的前3個字型數據。block

mov ax,123BH
mov ds,ax        //將123BH送入ds中,做爲數據段的段地址
mov ax,0          //用ax存放累加結果
add ax,[0]
add ax,[2]
add ax,[4]        //一個字型數據佔兩個單元,因此偏移地址是0、二、4

3.1節~3.5節 小結

  • 字在內存中存儲時,要用兩個地址連續的內存單元來存放,字的低位字節存放在低地址單元中,高位字節存放在高地址單元中。
  • 用mov指令要訪問內存單元,能夠在mov指令中只給出單元的偏移地址,此時,段地址默認在DS寄存器中。
  • [address]表示一個偏移地址爲address的內存單元。
  • 在內存和寄存器之間傳送字型數據時,高地址單元和高8位地址、低地址單元和低8位寄存器相對應。
  • mov、add、sub是具備兩個操做對象的指令。jmp是具備一個操做對象的指令。
相關文章
相關標籤/搜索