内存中的字存储
CPU中,用16位寄存器存储一个字,高8位存放高位字节,低8位存放地位字节,
内存单元是字节单元,一个单元存放一个字节,一个字要用两个连续地址的内存单元存放
如下:
mov ax,4E20H
对应内存中的存储
0 20H
1 4EH
0和1表示两个内存单元,存储一个字,这两个单元是一个起始地址为0的字单元
0是低单元,1是高单元,从上而下变大,1对应4E20H的高地址4E,0对应低地址20
2 12H
3 00H
同理,将2、3内存单元看作一个字单元,起始地址为2,存放数据,高位00,低位12,存放的数据就是0012H
问题:
0地址单元中存放的字节型数据是多少?
0地址单元是由0内存单元组成,搭建就是单纯的0上面的数据,20H
0地址字单元中存放的字型数据是多少?
0地址字单元,字单元是两个内存单元组合的,所以数据为4E20H
2地址单元中存放的字节型数据是多少?
2地址单元=2内存单元,对应12H
2地址字单元中存放的字型数据是多少?
2字单元=2个内存单元组合=0012H
1地址字单元中存放的字符型数据是多少?
1地址=1号内存单元和2号内存单元组成,低位放在1,高位放在2,1是4E,2是12=124EH
DS和address
cpu读写一个内存单元的时候,必须先给出内存单元的地址,而内存单元的地址又由段地址和偏移地址组成
8086CPU中有DS寄存器,是用来放数据的段地址
比如我们 要读取10000H单元 的内容,用以下程序进行
mov xb,1000H
#读10000H地址,而这段地址只填1000H,因为段地址*10+偏移地址(假设为0)就是内存地址
mov ds,bx
#将bx(段地址1000H)移动到ds(段地址寄存器)中,ds中的值为1000H
mov al,[0]
#将内存地址的0字单元移动到ax的低地址(al),[0]表示段地址的偏移值,现在读取的就是1000H的0和1两个内存单元,两个为一组哦
mov bx,1000H
#将1000H移动到bx中
mov ds,bx
#将bx(段地址1000H)放入ds(段地址寄存器)
题目:
用汇编代码将寄存器送入内存单元
mov ax,1000H
#ax中存放1000H
mov bs,ax
#将ax中的地址存放到bs中
mov [0],bl
#将bx低位地址中的数据存放到1000H中的0和1内存单元
字的传输
mov bx,1000H
#将1000H放入bx
mov ds,bx
#将bx中的1000H移动到ds寄存器
mov ax,[0]
#将1000H:0偏移的数据放入ax
mov [0],cx
#将cx中的数据,放入1000H:0偏移的字单元
分析以下内存变化
mov ax,1000H
mov ds,ax ------
mov ax,[0] 10000H| 23 |
mov bx,[2] 10001H| 11 |
mov cx,[1] 10002H| 22 |
add bx,[1] 10004H| 66 |
add cx,[2] ------
mov ax,1000H
mov ds,ax
#作用是将ds设为1000H
mov ax,[0]
#1000H:0偏移,表示10000H地址0和1内存单元(0字单元)移动到ax=1123H
mov bx,[2]
#1000H,2偏移,表示10000H地址2和3内存单元(2字单元)移动到bx=6622H
mov cx,[1]
#1000H,1偏移,表示10000H地址1和2内存单元(1字单元)移动到cx=2211H
add bx,[1]
#1000H:1偏移,10000H地址1和2内存单元,增加到bx=6622H+2211H=8833H
add cx,[2]
#1000H,2偏移,10000H地址2和3内存单元,增加到cx=2211H+6622H=8833H
思考下列内存变化
mov ax,1000H
mov ds,ax ——————
mov ax,11316 10000H| 23 |
mov [0],ax 10001H| 11 |
mov bx,[0] 10002H| 22 |
sub bx,[2] 10003H| 11 |
mov [2],bx ——————
mov ax,1000H
mov ds,ax
#将ds寄存器设置为1000H
mov ax,11316
mov [0],ax
#11316转换为16进制为2C34H,存放到1000H:0偏移地址,10000H结果为34,100001H结果为2C
mov bx,[0]
sub xb,[2]
#将1000H:0偏移的数据存放到bx,bx=2C34H,将xb减去1000H:2偏移的数据,2C34H-1122H=1B12H
mov [2],bx
#将bx的数据存放到1000H:2偏移,10002H结果为12,100003H结果为1B
最后内存如下
10000H 34
10001H 2C
10002H 12
10003H 1B