微机原理实验共分为四次,这是最简单的第一次,请慢慢欣赏
源程序
.model tiny
.stack 100
.code
start:mov ax,8000h
mov ds,ax
mov es,ax
nop
mov cx,100h
mov si,3000h
mov di,6000h
call move
mov cx,100h
mov si,3000h
mov di,6000h
cld
repe cmpsb
jne error
true:jmp $
error:jmp $
move proc near
cld
cmp si,di
jz return
jnb move1
add si,cx
dec si
add di,cx
dec di
std
move1:rep movsb
return:ret
move endp
end start
此次实验的源程序非经典的汇编语言,目测估计为masm 6.x版本,尽管看起来不太舒服,但不影响阅读使用,这个程序的作用显然无须多说:即将ds:si开始处的数据转移至es:di处,转移长度记录在cx中。
效果图
总结
本次实验最大的收获就在于此程序中考虑到了正逆序复制对于数据的影响,一般来说数据正序复制是合理的,但如果源地址和目的地址存在重叠的部分,那么这时候往往采用逆序复制会起到更好的效果,具体原因,可以自行演示两只手指重叠的效果