汇编程序返回dos

Posted liubiyongge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编程序返回dos相关的知识,希望对你有一定的参考价值。

汇编程序返回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

技术分享图片

 






































































































以上是关于汇编程序返回dos的主要内容,如果未能解决你的问题,请参考以下文章

汇编程序中int 21H 的功能是啥?

汇编int21h,DOS调用(转)

c++如何获取dos命令的返回值

java执行DOS命令

Dos 命令(如果存在)无法正常工作

汇编语言中断指令