在此文用到了si和di寄存器;
8086汇编语言显示带颜色的字符串程序学习 - 使用emu8086_bcbobo21cn的博客-CSDN博客
下面单独来学习si和di寄存器;
SI和DI是8086CPU中和BX功能相近的寄存器;
区别:SI和DI不能够分成两个8位寄存器来使用;
下面的三组指令实现了相同的功能:
mov bx,0
mov ax,[bx]
mov si,0
mov ax,[si]
mov di,0
mov ax,[di]
或者,
mov bx,0
mov ax,[bx+123]
mov si,0
mov ax,[si+123]
mov di,0
mov ax,[di+123]
SI(source index)是源变址寄存器,
DI(destination index)是目的变址寄存器,
它们和[bx]类似,用于存放偏移地址;
si和di寄存器基本的一个应用是实现字符串的复制;下面看一下;
;把字符串复制到...位置
data segmentdb 'welcome to masm!'db '................'
data endscode segmentstart:mov ax,datamov ds,axmov es,axmov si,0mov di,16mov cx, 8
copydata:mov dx,ds:[si]mov es:[di],dxadd si,2add di,2loop copydatacode endsend start
装入emu8086;
进入emulate,先不run;看一下当前数据段是从07100开始,从此开始存放了16个字符;
后面的16个内存单元是存的.;这些是在 data segment 定义的;
然后run,执行完看一下,16个字符复制到了后面的16个原先存的是.的内存单元;
代码有个 loop copydata ,循环什么时候结束?循环8次结束,在标号copydata之前,计数寄存器cx被赋值8;每次循环源和目的变址寄存器加2;
关于bx寄存器可参阅此,
汇编语言内存单元数据放入寄存器学习_bcbobo21cn的博客-CSDN博客