バイト単位でデータコピー

アセンブラ
メモメモ。

;ds:	Data Segment		データのあるセグメントアドレスを保存
;si:	Sorce Index		メモリを指すポインタ
;di:	Destination Index	         メモリを指すポインタ
;cx:	Count Register		繰り返し処理回数を数えるカウンタ
;lds:	Load far pointer to DS and register 
;	                           指定メモリアドレスから指定レジスタに16/32ビットをロードして、
;                                   それから次の16ビットをDSにロード
;les:	Load far pointer to DS and register 
;	 	                  指定メモリアドレスから指定レジスタに16/32ビットをロードして、
;                                   それから次の16ビットをESにロード
;rep:	命令をcx回繰り返す。終了条件:cx = 0
;movs:	Move String	         ストリングの移動。
;		                  [DS:SI]にあるバイトを[ES:DI]に移動してから、
;                                   SI(コピーする元)とDI(コピーする先)をインクリメントする。


;機能:データコピー(バイト単位)
;引数1 Dst:コピー先アドレス
;引数2 Src:コピー元アドレス
;引数3 カウント回数
void farmemcopy( void _far *Dst, void _far *Src, int cnt )
{
_asm	{
;退避
		push	ds
		push	si
		push	di
		
;引数取得
		mov		cx, cnt
		les		di, Dst
		lds		si, Src
		
;ストリングコピー
	rep	movs
	
;復帰
		pop		di
		pop		si
		pop		ds
	}
}