バイト単位でデータコピー
アセンブラ。
メモメモ。
;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 } }