• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 汇编源码系列之exec

汇编源码系列之exec

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了exec系列函数,exec纸张是多少厘米,exec,exec cosmoflips,exec l订单管理系统等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究.......

; EXECSUB - execute program from compiled BASIC - requires DOS 2.00
; This version allows one BASIC program to call another
;
; CALL EXECSUB(PROG$,PARM$,FCB1$,FCB2$,RETCD%)
; PROG$ is the program name (e.g. 'command.com')
; PARM$ is the parameter to be passed to the program (e.g. '/c dir *.bas')
; FCB1$ is the first file control block (required by some programs)
; FCB2$ is the second file control block (required by some programs)
; RETCD% is the error return code
  skip equ 2    ; 1 for interpretive, 2 for compiled
cseg  segment para public 'code'
public  execsub
execsub proc far
  assume cs:cseg,ds:cseg,ss:nothing,es:nothing
basicds equ 510h
i24ip  equ 90h
i24cs  equ 92h
i1bip  equ 6ch
i1bcs  equ 6eh
i1cip  equ 70h
i1ccs  equ 72h
b24ip  equ 51ah
b24cs  equ 51ch
b1bip  equ 516h
b1bcs  equ 518h
b1cip  equ 512h
b1ccs  equ 514h
  push bp
  mov bp,sp
  jmp p010
stak  equ this byte
  dw 0      ; save sp
  dw 0      ; save ss
prm1  equ this byte
  dw 0      ; environment
prm2  equ this word
  dw 0      ; command line - ip & cs
  dw 0
prm3  equ this byte
  dw 0      ; default FCB - ip & cs
  dw 0
prm4  equ this byte
  dw 0      ; second default FCB - ip & cs
  dw 0
p010:
  xor ax,ax    ; get psp
  mov es,ax    ; es=0
  mov bx,ds    ; save ds
  mov ds,ax    ; ds=0
  cli
  push ds:[basicds]  ; save basic's ds
  push ds:[i24ip]   ; save int 24h and shadow
  push ds:[b24ip]
  push ds:[b24ip]
  pop ds:[i24ip]
  push ds:[i24cs]
  push ds:[b24cs]
  push ds:[b24cs]
  pop ds:[i24cs]
  push ds:[i1bip]   ; save int 1bh and shadow
  push ds:[b1bip]
  push ds:[b1bip]
  pop ds:[i1bip]
  push ds:[i1bcs]
  push ds:[b1bcs]
  push ds:[b1bcs]
  pop ds:[i1bcs]
  push ds:[i1cip]   ; save int 1ch and shadow
  push ds:[b1cip]
  push ds:[b1cip]
  pop ds:[i1cip]
  push ds:[i1ccs]
  push ds:[b1ccs]
  push ds:[b1ccs]
  pop ds:[i1ccs]
  sti
  mov ds,bx    ; restore ds
  mov di,4f2h    ; point to dos comm. area
  mov ax,es:[di]    ; get psp segment
  mov es,ax
  mov di,2
  mov bx,es:[di]    ; get top of memory
  sub bx,ax    ; subtract psp
  mov ah,4ah
  int 21h     ; free memory
  jnc p020    ; no error
  mov ah,0    ; memory error
  jmp p090    ; to error control
p020:  mov si,[bp+12]    ; point to parm$
  add si,skip
  mov ax,[si]
  mov si,offset prm2  ; establish command line
  mov cs:[si],ax
  mov ax,ds
  mov cs:[si+2],ax
  mov si,[bp+10]    ; point to fcb1$
  add si,skip
  mov ax,[si]
  mov si,offset prm3
  mov cs:[si],ax
  mov ax,ds
  mov cs:[si+2],ax
  mov si,[bp+8]    ; point to fcb2$
  add si,skip
  mov ax,[si]
  mov si,offset prm4  ; establish second fcb
  mov cs:[si],ax
  mov ax,ds
  mov cs:[si+2],ax
  push bp     ; save registers
  push ds
  push es
  pushf
  mov si,offset stak  ; save stack
  mov cs:[si],sp
  mov cs:[si+2],ss
  mov ah,4bh    ; load prog
  mov al,0    ; load & execute
  mov si,[bp+14]    ; point to prog$
  add si,skip
  mov dx,[si]
  push cs
  pop es
  mov bx,offset prm1  ; point to parameter
  int 21h     ; load & execute program
  jnc p050    ; no error
  mov ah,1    ; set error code
  jmp p060
p050:  mov ax,0    ; clear error
p060:  mov bx,cs    ; restore stack
  mov ds,bx
  mov si,offset stak
  cli      ; no interrupts
  mov sp,cs:[si]
  mov ss,cs:[si+2]
  sti      ; allow interrupts
  popf      ; restore registers
  pop es
  pop ds
  pop bp
  mov cx,ds    ; save ds
  xor bx,bx
  mov ds,bx    ; ds=0
  cli
  pop ds:[b1ccs]    ; restore int 1ch
  pop ds:[i1ccs]
  pop ds:[b1cip]
  pop ds:[i1cip]
  pop ds:[b1bcs]    ; restore int 1bh
  pop ds:[i1bcs]
  pop ds:[b1bip]
  pop ds:[i1bip]
  pop ds:[b24cs]    ; restore int 24h
  pop ds:[i24cs]
  pop ds:[b24ip]
  pop ds:[i24ip]
  pop ds:[basicds]  ; restore basic's ds
  sti
  mov ds,cx
p090:  mov si,[bp+6]    ; point to RETCD%
  mov [si],ax    ; return error, if any
  pop bp      ; return to caller
  ret 10
execsub endp
cseg  ends
end


</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 汇编源码系列之exec

相关文章

  • 2017-06-28汇编源码系列之drives
  • 2017-06-28汇编教程:多文档界面(MDI)
  • 2017-06-178086的寻址方式
  • 2017-06-28汇编IDE的选择与配置
  • 2017-06-28什么是进程
  • 2017-06-17变量和标号的属性
  • 2017-06-28Win32汇编程序的结构和语法
  • 2017-06-17存储单元的地址和内容
  • 2017-06-28汇编语言学习指南(二)
  • 2017-06-28用汇编语言编写消息框程序

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 子程序的嵌套
    • 汇编源码之跑动的男孩
    • hello,world!win32汇编小程序
    • 汇编源码系列之clear
    • 汇编源码系列之sertype
    • 除运算指令
    • 循环指令
    • 汇编教程之超类化
    • (汇编源代码 )PRINT FILE PROGRAM (打印文件)
    • 什么是进程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有