先看几句代码的解释
mov ax,[0] 将一个内存单元(字单元)放入ax , 内存单元长度为2字节, 存放一个字, 段地址是DS 偏移地址是0
mov al,[0] 将一个内存单元(字节单元)放入ax , 内存单元长度为1字节, 存放一个字节, 段地址是DS 偏移地址是0
0表示的是偏移地址 具体长度(类型)由其操作对象决定
mov ax,[bx] 将一个内存单元(字单元)放入ax , 内存单元长度为2字节, 存放一个字, 段地址是DS 偏移地址是bx中的数值
mov al,[bx] 将一个内存单元(字节单元)放入ax , 内存单元长度为1字节, 存放一个字节, 段地址是DS 偏移地址是bx中的数值
为了简洁描述 (ax)表示ax中的数值, (al)表示al中的数值
(21000H)表示物理地址21000H中的内容 既 2000:1000处的内容 2000:1000 = 2000*16+1000 = 21000H
((ds)*16+(bx)) 表示 ADR1: ADR2中的内容, 其中 ADR1是ds中的值 ADR2是bx中的值
注意 (2000:0) , ((ds):1000H) 都是不正确的写法
所以 ax中的内容为0010H, 可以表示为 (ax)=0010H
所以 2000:1000处的内容为0010H, 可以表示为 (21000H)=0010H
所以 mov ax,[2], 可以表示为 (ax)=((ds)*16+2)
所以 mov [2],ax, 可以表示为 ((ds*16)+2)=(ax)
push ax 可以描述为 (sp)=(sp)-2 ; ((ss)*16+(sp))=(ax)
pop ax可以描述为 (ax)=((ss)*16+(sp)) ; (sp)=(sp)+2
用idata表示常量
mov ax,[idata] 表示 mov ax,[1] 或者其他的数字
mov ax,idata 表示 mov ax,2 或者其他的数字
切记 mov [bx],ax 中 [bx]只是偏移地址, 段地址在ds中