📄 chr4.asm
字号:
data segment
intoff dw ? ;用于保存偏移地址
intseg dw ? ;用于保存段基地址
intmsg db 'A Instruction Interrupt !', 0dh,0ah,0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,3580h ;利用DOS功能35H号
int 21h ;获取原80H中断向量
mov intoff,bx ;保存偏移地址
mov intseg,es ;保存段基地址
push ds
mov dx,offset new80h ;取中断程序偏移地址
mov ax,seg new80h ;取中断程序段地址
mov ds,ax
mov ax,2580h
int 21h
pop ds
mov dx,offset intmsg
int 80h ;调用80H中断服务程序
mov dx,intoff ;恢复原中断向量
mov ax,intseg
mov ds,ax ;改变DS
mov ax,2580h
int 21h ;因紧接着返回DOS
mov ax,4c00h ;故无需恢复DS
int 21h
new80h proc ;过程定义
sti ;开中断
push ax ;保护寄存器
push bx
push si
mov si,dx
new1: mov al,[si] ;读取欲一个显示字符
cmp al,0 ;为结尾“0”,则结束
jz new2
mov bx,0 ;采用ROM-BIOS功能调用
mov ah,0eh
int 10h
inc si ;准备显示下一个字符
jmp new1
new2: pop si ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new80h endp ;过程(中断服务程序)结束
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -