画面スクロールプログラム

	ORG	0x100

	; 画面の上から5行をバッファに保存
	MOV	AX, 0xb800
	MOV	DS, AX			; DS=0xb800
	MOV	SI, 0			; 1行目の先頭アドレス
	MOV	AX, CS
	MOV	ES, AX			; ES=CS
	MOV	DI, BUF
	CLD
	MOV	CX, 400			; 80×5
	REP	MOVSW			; 0xb800:0x0000から5行分をBUFへ保存

	; 画面を5行分スクロール
	MOV	AX, 0xb800
	MOV	DS, AX			; DS=0xb800
	MOV	ES, AX			; ES=0xb800
	MOV	SI, 800			; 6行目の先頭アドレス(80×5×2)
	MOV	DI, 0			; 1行目の先頭アドレス
	CLD
	MOV	CX, 1600		; 80×20
	REP	MOVSW			; 6〜25行目を1〜20行目へコピー

	; バッファへ保存した1〜5行目を21〜25行目へ書き戻す
	MOV	AX, CS
	MOV	DS, AX			; DS=CS
	MOV	SI, BUF
	MOV	AX, 0xb800
	MOV	ES, AX			; ES=0xb800
	MOV	DI, 3200		; 21行目の先頭アドレス(80×20×2)
	CLD
	MOV	CX, 400			; 80×5
	REP	MOVSW			; BUFから5行分を0xb800:0x0c80へコピー

	; キー入力待ち
	MOV	AH, 0x01
	INT	21h

	; プログラム終了
	MOV	AX, 0x4c00
	INT	0x21

BUF	times	2000 DW 0