move.asm
来自「dos 1.0 其中包含quick basic源代码、内存管理himem emm」· 汇编 代码 · 共 77 行
ASM
77 行
;
; memory routines
;
; Modifications:
;
; 01-Dec-1986 mz Optimize odd move using rcl hack
;
.xlist
include ..\h\cmacros.inc
.list
sBegin code
assumes cs,code
cProc Move,<PUBLIC>,<DS,SI,DI>
parmD src
parmD dst
parmW count
cBegin
mov cx,count
jcxz NoByte ; No characters to move
les di,dst ; grab pointers
lds si,src
cld
mov ax,ds
cmp ax,Seg_dst
jnz SimpleMove ; segments are NOT the same, no opt
cmp si,di ; is the start of source before dest
jb TestMove ; yes, try to optimize
SimpleMove:
shr cx,1
rep movsw
rcl cx,1
rep movsb
jmp short NoByte
TestMove:
mov ax,di
sub ax,si ; ax = difference between regions
cmp ax,cx ; is difference greater than region?
jae SimpleMove ; yes, no optimize
mov ax,cx ; optimize by copying down from top
dec ax
add di,ax
add si,ax
std
rep movsb ; no word optimization here
cld
NoByte:
cEnd
cProc Fill,<PUBLIC>,<DI>
parmD dst
parmB value
parmW count
cBegin
cld
les di,dst
mov al,value
mov ah,value
mov cx,count
shr cx,1
jcxz fill1
rep stosw
fill1:
jnc fill2
stosb
fill2:
cEnd
sEnd
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?