計算機原始語言——彙編 聽說發第二遍會火

DS和[address]

  • CPU要讀寫一個內存單元時,必須要先給出這個內存單元的地址,在8086中,內存地址由段地址和偏移地址組成
  • 8086中有一個DS段寄存器,通常用來存放要訪問數據的段地址
mov bx,1000Hmov ds,bxmov al,[0]
  • 上面3條指令的作用將10000H(1000:0)中的內存數據賦值到al寄存器中
  • mov al,[address]的意思將DS:address中的內存數據賦值到al寄存器中
  • 由於al是8位寄存器,所以是將一個字節的數據賦值給al寄存器
  • 8086不支持將數據直接送入段寄存器中,mov ds,1000H是錯誤的

寫幾條指令,將al中的數據送入內存單元1000H中

mov bx,1000Hmov ds,bxmov [0],al

字型數據的傳遞(2個字節)

寫出下面指令執行後寄存器ax,bx,cx中的值

計算機原始語言——彙編 聽說發第二遍會火

內存

mov ax,1000Hmov ds,axmov ax,[0]mov bx,[2]mov cx,[1]add bx,[1]add cx,[2]
計算機原始語言——彙編 聽說發第二遍會火

image.png

大小端

  • 大端模式,是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中(高低低高)(Big Endian)
  • 小端模式,是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中(高高低低) (Little Endian)
計算機原始語言——彙編 聽說發第二遍會火

image.png

注意:ARM既可以工作在大端模式,也可以工作在小端模式

練習

寫出下面指令執行後寄存器ax,bx,cx中的值

計算機原始語言——彙編 聽說發第二遍會火

內存

mov ax,1000Hmov ds,axmov ax,11316mov [0],axmov bx,[0]sub bx,[2]mov [2],bx
計算機原始語言——彙編 聽說發第二遍會火

結果

mov指令

計算機原始語言——彙編 聽說發第二遍會火

注意:“mov 內存單元, 內存單元”是不允許的,比如mov[0], [1]

add和sub指令

計算機原始語言——彙編 聽說發第二遍會火

數據段

  • 對於8086來說,在編程時,可以根據需要,將一組內存單元定義為一個段
  • 我們可以將一組長度為N(N<=64KB)、地址連續、起始地址為16倍數的內存單元當做專門存儲數據的內存空間,稱為數據段。比如用123B0H123B9H這段內存空間來存放數據,我們就可以認為123B0H123B9H是一個數據段,它的段地址為123BH,長度為10字節
  • 如何訪問數據段中的數據?
  • 用DS存放數據段的段地址,再根據需要,用相關指令訪問數據段中的具體單元

練習

各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;1.寫出CPU執行的指令序列(用匯編指令寫出)2.寫出CPU執行完指令後,CS,IP和相關寄存器中的數值3.再次體會:數據和程序有區別嗎?如何確定內存中的信息哪些是數據,哪些又是程序?


分享到:


相關文章: