汇编程序44:检测点13.1 (jmp near ptr 标号指令的中断例程)

 1 安装程序:
 2 assume cs:code
 3 //jmp near ptr 标号指令的替代实现,使用iret指令
 4 code segment
 5     start:
 6           mov ax,cs
 7           mov ds,ax
 8           mov si,offset sub1
 9           mov ax,0020h
10           mov es,ax
11           mov di,0
12           mov bx,offset sub2 - offset sub1
13           cld
14           rep movsb
15           mov ax,0
16           mov es,ax
17           mov word ptr es:[7ch*4],200h
18           mov word ptr es:[7ch*4+2],0
19           mov ax,4c00h
20           int 21h
21      sub1:
22           push bp
23           mov bp,sp
24           cmp bx,-32768 //近转移最小值偏移
25           jl s0 //有符号数小于则转移
26           cmp bx,32767 //近转移最大值偏移
27           jg s0 //有符号数大于则转移
28           add [bp+2],bx //加上两转的偏移即可得到转移目标地址
29        s0:
30           pop bp
31           iret
32      sub2:
33           nop
34 code ends
35 
36 end start

 

 1 测试程序:
 2 assume cs:code
 3 //将数据段的数据显示屏幕上
 4 data segment
 5     db 'conversation',0
 6 data ends
 7 
 8 code segment
 9     start:
10           mov ax,data
11           mov ds,ax
12           mov si,0
13           mov ax,0b800h
14           mov es,ax
15           mov di,12*160
16         s:
17           cmp byte ptr [si],0
18           je ok
19           mov al,[si]
20           mov es:[di],al
21           inc si
22           add di,2
23           mov bx,offset s - offset ok
24           int 7ch //安装程序
25        ok:
26           mov ax,4c00h
27           int 21h
28 code ends
29 
30 end start

 

posted on 2018-02-03 21:53  叶倾仙  阅读(269)  评论(0编辑  收藏  举报

导航