在屏幕中间显示一行"!"
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov bx, stack
mov ss, bx
mov sp, 129
call cpy_new_7CH
call set_new_7CH
mov bx, 0B800H
mov es, bx
mov di, 160*12 ; 屏幕中间
mov bx, OFFSET s - OFFSET se
mov cx, 80
s: mov byte ptr es:[di], '!'
mov byte ptr es:[di+1], 00000100B
add di,2
int 73H
se: nop ; 跳转长度 = 标号出 - loop指令后第一个字节地址
mov ax, 4C00H
int 21H
;============================================
set_new_7CH:
mov bx, 0
mov es, bx
mov word ptr es:[73H*4], 7E00H
mov word ptr es:[73H*4+2], 0
ret
;============================================
new_7CH:
push bp ; bp, ip, cs, pushf
mov bp, sp
dec cx
jcxz newRet
add ss:[bp+2],bx
;dec cx
;jcxz newRet
;add ss:[sp],bx
newRet:
pop bp
iret
new_7CH_end: nop
;============================================
cpy_new_7CH:
mov bx, cs
mov ds, bx
mov si, OFFSET new_7CH
mov bx, 0
mov es, bx
mov di, 7E00H
mov cx, OFFSET new_7CH_end - new_7CH
cld
rep movsb
ret
code ends
end start