1.es寄存器,es寄存器和ds寄存器的作用是一样的,都是以bx寄存器为偏移地址,可以将其理解为和ds寄存器并行的寄存器,至于有什么不同。在网上查询资料得知es为扩展寄存器,在数据的移动、比较和搜索这类指令中时,ds对应si,es对应di,前者表示源后者表示目的地。程序加载以后,ds放着此程序所在的内存的段地址,如果不表示据的移动、比较和搜索的时候es和ds的数据基本相同都表示储存数据的数据段
2.
assume cs:code ; assume我理解是将cs和code这个段联系起来,即cs段地址和code段地址一样。code即是一个名字也是一个指向内存中一个段的数据即XXXXh
code segment ;segment我理解是从此刻开始,下面的都是code段的定义,即我在汇编的语言规则里,我说它是什么,它就是什么
mov ax,cs ;这里的cs,cpu知道你说的是段地址。因为第一句我们说cs和code段联系起来,所以这里填写code也没有问题,作用和填写cs一样
mov ds,ax;将段地址转移到ds中,此时ds:[bx]里面存储的是cs:code中的指令数据
mov ax,0020h;将0020h转移到ax中
mov es,ax;将ax中的数据转移到es中,因为es的作用和ds的作用一致,所以es:[bx]中存储的就是0020:0段的数据
mov bx,0;将0转移给bx
mov cx,17;因为我们转移的是cs中的指令,即问题在于要转移多少次,那么就看每次转移的是字节还是字,然后整个cs:code中有多少字节,多少字。用-u先去查看整个程序的长 度,在确定cx的长度
s:mov al,[bx] ;这个程序表述数据的移动,所以ds是源,es是目的地,移动的是字节,我是小端机器,存放的是低位有效的数据
mov es :[bx],al;传送给es
inc bx
loop s
mov ax,4c00h
int21h
code ends
end