|
发表于 2013-7-28 13:57:18
|
显示全部楼层
mov ax,1
mov ds,ax ;ds置1
mov ax,[0000] ;[0000] 带方刮号的都是偏移地址。
你要了解往ax中传送了什么值,你首先要了解代码中[0000]是哪个内存单元的值。
地址的表示方式,段基址:偏移地址 ,如图中0000:0000 0000:0010
mov ax,[0000] 像这种一个方刮号中一个立即数,知道其偏移地址为0000 ,它的段基址没有给出,但默认在寄存器ds中,你也可以显示在代码中写出如:
mov ax,ds:[0000] ;由于ds 在上两步中,已被传值1,所以ds:[0000]就是0001:0000
图中没有0001:0000,图中62h, 26h的地址分别是0000:0010,0000:0011
在cpu执行时,这种(段基址:偏移地址)会被计算成物理地址,物理地址=段基址*16+偏移地址,是一个5位的16进制数,如00010h.
一个物理地直可由多种(段基址:偏移地址)的形式给出。
图中62h, 26h的地址分别是0000:0010,0000:0011 换成物理地址就是00010h和00011h,这两字节分别何存着62h和26h,
回头看0001:0000 (即ds:[0000])换算成物理地址是00010,它保存的是62h,下一个1:0001保存着 26h
总之图中0000:0010 (62h),0000:0011 ( 26h ),这两个地址和代码中0001:000 , 0001:0001指向两个相同的物理地址00010h (62h),00011h (26h)
mov ax,[0000] ;是往AX中传送几个字节?是两个,有寄存器参与,以寄存器长度为准,ax长度为两个字节,就把以ds:[0]为起始的两个连续字节传送到ax中,其中高地址00011h (26h)里的值传到到AX的高字节AH,低地址00010h ( 62h )传送到AX的低字节AL,于是最后就形成了AX(AHAL)的值为2662h |
|