这里我们需要去用到7ch中断程序去完成jmp near ptr s指令的功能,然后用bx向中断程序去传送转移的位移,然后相当于就是去改变了IP寄存器的值
assume cs:code,ds:data
data segment
db 'conversation',0
data ends
code segment
start:mov ax,cs
mov ds,ax
mov si,offset lp ;从lp开始
mov ax,0
mov es,ax
mov di,200h ;复制到0:200处
mov cx,offset ok - offset lp ;这里就是需要去复制好指令
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h ;设置中断向量表
mov word ptr es:[7ch*4+2],0
mov ax,0b800h
mov es,ax ;从es:di处显示字符
mov di,160*12
mov bx,offset s - offset se
mov ax,data ;复制数据
mov ds,ax ;指向data段中的数据
mov si,0
s:cmp byte ptr [si],0 ;比较字符串是否为0,如果为0,则直接跳到se去结束程序了
je se
mov al,[si]
mov es:[di],al
add di,2
inc si
int 7ch ;相当于跳转到了s处,起到了jmp near ptr s的作用
se:nop
mov ax,4c00h ;结束程序
int 21h
lp:push bp ;中断程序
mov bp,sp
add [bp+2],bx
lpret:pop bp
iret
ok:nop
code ends
end start
执行结果