汇编语言学习-第一个程序-1


关于汇编程序的执行问题

在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序p2,将p1从可执行文件中加载入内存,将CPU的控制权交给它.p1才能够运行,当p1运行完毕后,应该将cpu的控制权交还给使她得以运行的程序p2

思考问题

  • 在提示符C:\masm后面输入可执行文件的名字”1”,按下回车enter键,这时,思考问题4.1
  • 1.exe运行
  • 运行结束后,返回。再次显示提示符C:masm.思考问题4.2

4.1 此时,有一个正在运行的程序将1.exe中的程序加载入内存,这个正在运行的程序是什么?它将程序加载入内存后,如何使程序得以运行?

操作系统是由多个功能模块组成的庞大、复杂的软件系统。任何通用的操作系统,都要提供一个成为shell的程序,用户使用这个程序来操作计算机系统进行工作。

DOS中有一个程序command.com,这个程序在DOS中成为命令解释器,也就是DOS系统的shell。

DOS启动时,先完成其他重要的初始化工作,然后运行command.com,command.com运行后,执行完其他相关的任务后,在屏幕上显示出当前盘符和当前路径组成的提示符,等待用户输入。

用户可以输入所要执行的命令,如:cd、dir、type等,这些命令由command执行,command执行完这些命令后,再次显示由当前盘符和当前路径组成的提示符,等待用户输入。

如果用户要执行一个程序,则输入该程序的可执行文件的名称,command首先根据文件名找到可执行文件,然后将这个可执行文件中的程序加载到内存中,设置CS:IP指向程序的入口。此后command暂时停止运行,CPU运行程序。程序运行结束后,返回到command中,command再次显示出由当前盘符和当前路径组成的提示符,等待用户输入。

在DOS中,command处理各种输入:命令或要执行的程序的文件名。我们就是用过command来进行工作的。

4.2 程序运行结束后,返回到了哪里?

程序运行结束后,返回到了command中。

汇编程序从写出到执行的过程

编程 -> 1.asm -> 编译 -> 1.obj -> 链接 -> 1.exe -> 加载 -> 内存中的程序 -> 运行

观察下面程序执行过程中,寄存器和栈顶元素的变化

assume cs:codeseg

codeseg segment

start:  mov ax,2000H
        mov ss,ax
        mov sp,0
        pop ax
        pop bx
        push ax
        push bx
        pop ax
        pop bx
    
    mov ax,4c00H
    int 21h
codeseg ends
end start
end

ax bx 各出入栈。IP和SP指针在变化,其余寄存器没看到变化。栈顶元素最后还是变化到跟初始状态下一致了

PSP的头两个字节时CD20,其中的内容为

PSP


文章作者: 美食家李老叭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 美食家李老叭 !
评论
  目录