DS和[address]
CPU要讀寫一個內(nèi)存單元時,必須要先給出這個內(nèi)存單元的地址蟆豫,在8086中棍潘,內(nèi)存地址由段地址和偏移地址組成
8086中有一個DS段寄存器迎吵,通常用來存放要訪問數(shù)據(jù)的段地址
movbx,1000Hmovds,bxmoval,[0]
上面3條指令的作用將10000H(1000:0)中的內(nèi)存數(shù)據(jù)賦值到al寄存器中
mov al,[address]的意思將DS:address中的內(nèi)存數(shù)據(jù)賦值到al寄存器中
由于al是8位寄存器嗤形,所以是將一個字節(jié)的數(shù)據(jù)賦值給al寄存器
8086不支持將數(shù)據(jù)直接送入段寄存器中精偿,mov ds,1000H是錯誤的
寫幾條指令,將al中的數(shù)據(jù)送入內(nèi)存單元1000H中
movbx,1000Hmovds,bxmov[0],al
字型數(shù)據(jù)的傳遞(2個字節(jié))
寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值
內(nèi)存
movax,1000Hmovds,axmovax,[0]movbx,[2]movcx,[1]addbx,[1]addcx,[2]
image.png
大小端
大端模式,是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中赋兵,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中(高低\低高)(Big Endian)
小端模式,是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中搔预,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中(高高\低低) (Little Endian)
image.png
注意:ARM既可以工作在大端模式,也可以工作在小端模式
練習(xí)
寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值
內(nèi)存
movax,1000Hmovds,axmovax,11316mov[0],axmovbx,[0]subbx,[2]mov[2],bx
結(jié)果
mov指令
注意:“mov 內(nèi)存單元, 內(nèi)存單元”是不允許的霹期,比如mov[0], [1]
add和sub指令
數(shù)據(jù)段
對于8086來說,在編程時拯田,可以根據(jù)需要历造,將一組內(nèi)存單元定義為一個段
我們可以將一組長度為N(N<=64KB)、地址連續(xù)船庇、起始地址為16倍數(shù)的內(nèi)存單元當(dāng)做專門存儲數(shù)據(jù)的內(nèi)存空間吭产,稱為數(shù)據(jù)段。比如用123B0H~123B9H這段內(nèi)存空間來存放數(shù)據(jù)鸭轮,我們就可以認(rèn)為123B0H~123B9H是一個數(shù)據(jù)段臣淤,它的段地址為123BH,長度為10字節(jié)
如何訪問數(shù)據(jù)段中的數(shù)據(jù)窃爷?
用DS存放數(shù)據(jù)段的段地址邑蒋,再根據(jù)需要,用相關(guān)指令訪問數(shù)據(jù)段中的具體單元
練習(xí)
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
1.寫出CPU執(zhí)行的指令序列(用匯編指令寫出)
2.寫出CPU執(zhí)行完指令后,CS,IP和相關(guān)寄存器中的數(shù)值
3.再次體會:數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些又是程序?