实验内容:编写并安装 int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处
代码运行时错误:
错误原因:
;设置7c中断向量表指向0:200h
mov word ptr es:[0],200h
mov word ptr es:[2],0
这里使用的还是0号中断处理程序
最终正确代码:
assume cs:code
data segment
db 'welcome to masm! ',0
data ends
code segment
start:
;设置ds:[si]指向源地址,即cs:[do0]
mov ax,cs
mov ds,ax
mov si,offset do7c
;设置es:[di]目的地址
mov ax,0
mov es,ax
mov di,200h
;设置cx为传输长度 do0 ~ do0_end
mov cx,offset do7c_end-offset do7c
cld ;设置传输方向为正
rep movsb
;设置7c中断向量表指向0:200h
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
mov ax,data
mov ds,ax
mov si,0
mov dh,12
mov dl,40
mov cl,2
int 7ch
mov ax,4c00h
int 21h
do7c:
push ax
push si
push es
push di
push dx
push cx
mov ax,0b800h
mov es,ax
mov al,0A0h
mul dh
mov di,ax
mov al,2
mul dl
add di,ax
show:
mov al,ds:[si]
cmp al,0
je ok
mov es:[di],al
inc si
inc di
mov es:[di],cl
inc di
jmp short show
ok:
pop cx
pop dx
pop di
pop es
pop si
pop ax
iret
do7c_end: nop ;代码段结尾,便于计算7ch例程的长度
code ends
end start
运行界面: