8086变址寄存器和字符串拷贝程序学习

在此文用到了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 segment
	db 'welcome to masm!'
	db '................'
data ends

code segment
	start:
		mov ax,data
		mov ds,ax
		mov es,ax
		
		mov si,0
		mov di,16
		
		mov cx, 8
copydata:
		mov dx,ds:[si]
		mov es:[di],dx
		add si,2
		add di,2
		loop copydata
		
code ends


end start

装入emu8086;

8086变址寄存器和字符串拷贝程序学习_第1张图片

进入emulate,先不run;看一下当前数据段是从07100开始,从此开始存放了16个字符;

8086变址寄存器和字符串拷贝程序学习_第2张图片 

后面的16个内存单元是存的.;这些是在 data segment 定义的;

8086变址寄存器和字符串拷贝程序学习_第3张图片 

然后run,执行完看一下,16个字符复制到了后面的16个原先存的是.的内存单元;

8086变址寄存器和字符串拷贝程序学习_第4张图片 

 代码有个 loop copydata ,循环什么时候结束?循环8次结束,在标号copydata之前,计数寄存器cx被赋值8;每次循环源和目的变址寄存器加2;

关于bx寄存器可参阅此,

汇编语言内存单元数据放入寄存器学习_bcbobo21cn的博客-CSDN博客

你可能感兴趣的:(汇编语言,8086,变址寄存器)