DS和[address]
- CPU要讀寫一個內存單元時彰居,必須要先給出這個內存單元的地址葛超,在8086中,內存地址由段地址和偏移地址組成
- 8086中有一個DS段寄存器厅贪,通常用來存放要訪問數據的段地址
mov bx,1000H
mov ds,bx
mov al,[0]
- 上面3條指令的作用將10000H(1000:0)中的內存數據賦值到al寄存器中
- mov al,[address]的意思將DS:address中的內存數據賦值到al寄存器中
- 由于al是8位寄存器灶平,所以是將一個字節(jié)的數據賦值給al寄存器
- 8086不支持將數據直接送入段寄存器中伺通,mov ds,1000H是錯誤的
寫幾條指令,將al中的數據送入內存單元1000H中
mov bx,1000H
mov ds,bx
mov [0],al
字型數據的傳遞(2個字節(jié))
寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值
mov ax,1000H
mov ds,ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]
大小端
- 大端模式,是指數據的高字節(jié)保存在內存的低地址中逢享,而數據的低字節(jié)保存在內存的高地址中(高低\低高)(Big Endian)
- 小端模式罐监,是指數據的高字節(jié)保存在內存的高地址中,而數據的低字節(jié)保存在內存的低地址中(高高\低低) (Little Endian)
16bit寬的數 0x1234 在Little-endian 模式(以及Big-endian)CPU內存中的存放方式(假設從地址 0x4000 開始存放)為:
內存地址 | 小端模式存放內容 | 大端模式存放內容 |
---|---|---|
0x4000 | 0x34 | 0x12 |
0x4001 | 0x12 | 0x34 |
32bit寬的數 0x12345678 在Little-endian模式(以及Big-endian模式)CPU內存中存放方式(假設從地址 0x4000 開始存放)為:
內存地址 | 小端模式存放內容 | 大端模式存放內容 |
---|---|---|
0x4000 | 0x78 | 0x12 |
0x4001 | 0x56 | 0x34 |
0x4002 | 0x34 | 0x56 |
0x4003 | 0x12 | 0x78 |
注意:ARM既可以工作在大端械,也可以工作在小端模式。
練習
寫出下面指令執(zhí)行后寄存器ax、bx介评、cx中的值
mov ax,1000H
mov ds,ax
mov ax,11316
mov [0],ax
mov bx,[0]
sub bx,[2]
mov [2],bx
mov指令
指令 | 示例 |
---|---|
mov 寄存器,數據 | mov ax,8 |
mov 寄存器,寄存器 | mov ax,bx |
mov 寄存器,內存單元 | mov ax,[0] |
mov 內存單元,寄存器 | mov [0],ax |
mov 段寄存器,寄存器 | mov ds,ax |
mov 寄存器,段寄存器 |
注意:"mov 內存單元,內存單元"是不允許的矢空,比如:mov [0],[1]航罗。
add和sub指令
add和sub指令同mov一樣,都有兩個操作對象妇多。它們也可以有以下幾種形式
指令 | 示例 |
---|---|
add 寄存器,數據 | add ax,8 |
add 寄存器,寄存器 | add ax,bx |
add 寄存器,內存單元 | add ax,[0] |
add 內存單元,寄存器 | add [0],ax |
sub 寄存器,數據 | sub ax,9 |
sub 寄存器,寄存器 | sub ax,bx |
sub 寄存器,內存單元 | sub ax,[0] |
sub 內存單元,寄存器 | sub [0],ax |
數據段
- 對于8086來說伤哺,在編程時燕侠,可以根據需要者祖,將一組內存單元定義為一個段
- 我們可以將一組長度為N(N<=64KB)、地址連續(xù)绢彤、起始地址為16倍數的內存單元當做專門存儲數據的內存空間七问,稱為數據段。比如用123B0H123B9H這段內存空間來存放數據茫舶,我們就可以認為123B0H123B9H是一個數據段械巡,它的段地址為123BH,長度為10字節(jié)
- 如何訪問數據段中的數據饶氏?
- 用DS存放數據段的段地址讥耗,再根據需要,用相關指令訪問數據段中的具體單元
練習
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
1疹启、寫出CPU執(zhí)行的指令序列(用匯編指令寫出)
2古程、寫出CPU執(zhí)行完指令后,CS,IP和相關寄存器中的數值
3、再次體會:數據和程序有區(qū)別嗎?如何確定內存中的信息哪些是數據,哪些又是程序?