汇编程序返回dos有两种方式:
1. push ds
sub ax,ax
push ax
...
ret
作用:一开始ds是指向psp的,在psp:0000处放着int 20h(即终止程序的指令),然后用ret,会把psp指向给cs,0给ip,运行int 21h终止代码继续运行
代码实例:
data segment
datatable dw routine_1
dw routine_2
dw routine_3
dw routine_4
dw routine_5
dw routine_6
dw routine_7
dw routine_8
result dw ?
data ends
;********************88
code segment
main proc far
assume cs:code, ds:data
start:
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
;mian proc start here
;set al = 1
mov al, 1
cmp al, 0
je coutinue_main_line
mov si,0
l:
shr al, 1
jnb not_yet
jmp datatable[si]
not_yet:
add si, type datatable
jmp l
coutinue_main_line:
mov result, 1110h
jmp exit
routine_1:
mov result, 1111h
jmp exit
routine_2:
routine_3:
routine_4:
routine_5:
routine_6:
routine_7:
routine_8:
exit:
ret
main endp
code ends
end start
2.
mov ah, 4CH
int 21H
代码实例:
data segment
datatable dw routine_1
dw routine_2
dw routine_3
dw routine_4
dw routine_5
dw routine_6
dw routine_7
dw routine_8
result dw ?
data ends
;********************88
code segment
main proc far
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
;mian proc start here
;set al = 1
mov al, 1
cmp al, 0
je coutinue_main_line
mov si,0
l:
shr al, 1
jnb not_yet
jmp datatable[si]
not_yet:
add si, type datatable
jmp l
coutinue_main_line:
mov result, 1110h
jmp exit
routine_1:
mov result, 1111h
jmp exit
routine_2:
routine_3:
routine_4:
routine_5:
routine_6:
routine_7:
routine_8:
exit:
mov ah, 4ch
int 21h
ret
main endp
code ends
end start