在內存中存儲時,因爲內存單元是字節單元(一個單元存放一個字節),則一個字要用兩個地址連續的內存單元來存放,這個字的低位字節存放在低地址單元中,高位字節存放在高地址單元中。
字單元,即存放一個字型數據(16位)的內存單元,由兩個地址連續的內存單元組成。編程
CPU要讀寫一個內存單元的時候,必須先給出這個內存單元的地址,在8086PC中,內存地址由段地址和便宜地址組成。
8086CPU中有一個DS寄存器,一般用來存放要訪問數據的段地址。設計
讀取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
將al中的數據送入內存單元10000H中內存
mov bx,1000H mov ds,bx mov [0],al
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處
mov命令能夠有以下幾種形式:程序
- mov 寄存器,數據
好比,mov ax,5- mov 寄存器,寄存器
好比:mov ax,bx- mov 寄存器,內存單元
好比:mov ax,[0]- mov 內存單元,寄存器
好比:mov [0],ax- mov 段寄存器,寄存器
好比:mov ds,ax- mov 寄存器,段寄存器
- mov 內存單元,寄存器
在編程時,咱們能夠根據須要,將一組內存單元定義爲一個段。
將一段內存看成數據段,是咱們在編程時的一種安排,咱們能夠在具體操做的時候,用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
- 字在內存中存儲時,要用兩個地址連續的內存單元來存放,字的低位字節存放在低地址單元中,高位字節存放在高地址單元中。
- 用mov指令要訪問內存單元,能夠在mov指令中只給出單元的偏移地址,此時,段地址默認在DS寄存器中。
- [address]表示一個偏移地址爲address的內存單元。
- 在內存和寄存器之間傳送字型數據時,高地址單元和高8位地址、低地址單元和低8位寄存器相對應。
- mov、add、sub是具備兩個操做對象的指令。jmp是具備一個操做對象的指令。