本节你将学到
- 如何通过寄存器存放段地址来减少ds设置次数,以提高执行效率
- 段前缀的使用
将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
1. 能用的方案
assume cs:code
code segment
start:
mov bx,0
mov cx,12
s:
mov ax,0ffffh
mov ds,ax
mov dl,[bx]
mov ax,20h
mov ds,ax
mov [bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
debug执行
达到了目的,但是效率不高。注意到ds我们在loop的时候每次设置两次,浪费性能
我们要是能把它们缓存起来从头到尾只设置一次就好了,基于这个想法,我们引入额外的es段寄存器来缓存段地址
2. 优化方案
assume cs:code
code segment
start:
mov bx,0
mov cx,12
mov ax,0ffffh
mov ds,ax
mov ax,20h
mov es,ax
s:
mov dl,ds:[bx]
mov es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
debug编译执行,结果一致