由mov ds:si,200h引起的头脑爆炸
si叫源变地址寄存器,在不修改ds的情况下,[si]的意思为在ds的地址的下偏移si个地址的内容(还是ds中的内容)
ds叫数据段寄存器,8086中默认在1000h,因为空出100h没有用后,100h左移4位为:1000h 为什么要左移4位,因为空出的100h是作为cs代码段寄存器的地址为100h,
物理地址是由代码段地址CS,和IP偏移地址共同决定:cs左移4位+IP地址即为物理地址
由此在ds:si中的冒号相当于把ds的地址修改成了当前si所表示的地址。如果加上:mov si,200h
则ds的地址变成200h。如此对于下列代码就有了较好的解释!
mov ax,0
mov ds,ax
mov si,200h ;初始化中断向量表
mov ax,offset hint
mov ds:[si],ax
将ax 改为0,把ax给到ds,即此时ds地址为0,给si为200h ;下面一句是将hint的一个代码段的偏移地址给到ax(不重要),此时:ds:[si]就能完美解释了,在ds的偏移地址为200h的情况下赋给ds,可知,ds此时已经为0,偏移200h后ds就为200h,然后把ax的数据给到了200h。
对于汇编还不是特别熟悉,如有错误还望不吝赐教!