10.15汇编
今天只学习了2.12-3.5,进度稍微有一点落后,希望周末可以补回来
内存中字的存储
8086是16位的,显然一次可以处理16位的数据,虽然内存以字节为单位存储数据,但是仍然可以以字为单位存储,一个字为16位。存储字的内存单元被称为字单元。特别需要注意的一点,字单元中,高地址单元存储高位。
若一个子单元起始地址为N,则我们称这是N地址字单元。
存储数据时是存到字单元还是单个内存单元,取决于数据的类型,比如
mov [0],ax
就会改变[0]和[1]中的数据。
mov [0],al
就只会改变[0]中的数据。
DS和[address]
DS是另一种段寄存器(已经碰到的另一种是CS),通常用来存放要访问的段地址。
[address]表示一个内存单位address表示偏移地址,当然光有偏移地址是不够的,所以要[],cpu会自动从DS中调用段地址。
注意:8086没有提供将数据直接赋给段寄存器的方法,所以mov ds,1000
是不合法的。所以改变DS等,可以通过一个寄存器间接复制的方法。
mov ax,1000
mov ds,ax
同时mov [0],1000
同样不合法,要用与上类似的方法。
注:[立即数]表示物理地址,仅仅在debug中可以使用,汇编程序中,则要加上段前缀
几种合法操作
mov ax,ds ;段寄存器赋值到通用寄存器
mov [0],ds ;段寄存器复制到内存单元
mov ds,[0] ;内存单元复制到段寄存器
然而书上要求实验的add ds,ax
则是不合法的,加法运算一般只能用通用寄存器完成。
数据段
其实我觉得这个没什么特别的,权当介绍了一下内存段可以做的一种思路。即把一段内存都当做数据来看,通过[address]的方法调用这些数据。(现在我猜也许数组就是这么整的)