鱼C论坛

 找回密码
 立即注册
查看: 4357|回复: 4

[学习笔记] 《零基础入门学习汇编语言》第二十二讲

[复制链接]
发表于 2017-7-1 22:08:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小白刚学,不对的请各位大佬指正,谢谢

由于我权限不够,只能贴三张图;所以很多过程无法展示,望大家见谅

PS:我们昨天的Hello world是没有加上入口的,所以今天要加上哦。(见下图红圈中就是加上入口)
0.PNG

一、可执行文件中的程序装入内存并运行的原理
(1)操作系统的外壳:操作系统是由多个功能模块组成的庞大 、复杂的软件系统。任何通用的操作系统 ,都要提供一个称为shell(外壳)的程序 ,用户(操作人员)使用这个程序来操作计算机系统工作。DOS中有一个程序command.com ,这个程序在 DOS 中称为命令解释器,也就是DOS系统的shell。(其实就是我们的cmd.exe窗口)

(2)1.exe的执行过程:
1.我们在提示符“G:\TRY”后面输入可执行文件的名字“1”,按Enter键。
2.1.exe中的程序运行;
3.运行结束,返回,再次显示提示符“G:\TRY”。
问题4.1:执行第(1)步操作时,有一个正在运行的程序将1.exe中的程序加载入内存,这个正在运行的程序是什么?
答:我们在DOS中直接执行 1.exe 时,是正在运行的command将1.exe中的程序加载入内存。
问题4.1:它将程序加载入内存后,如何使程序得以运行?
command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行。
问题4.2:执行第(3)步操作,程序运行结束后,返回到哪里?
程序运行结束后,返回到command中,CPU继续运行command。


二、程序执行过程
(1)汇编程序从写出到执行的过程:

1.png

(2)使用Debug单步跟踪程序的运行:
1.使用R命令看各个寄存器时,可以看到,Debug将程序从可执行文件加载入内存后,cx中存放的是程序的长度。1.exe 中程序的机器码共有15个字节。
3.PNG
2.程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;这个内存区的前256 个字节中存放的是PSP,dos用来和程序进行通信。从 256字节处向后的空间存放的是程序。
3.所以,我们从ds中可以得到PSP的段地址SA,PSP的偏移地址为 0,则物理地址为SA×16+0。
因为PSP占256(100H)字节,所以程序的物理地址是:
SA×16+0+256= SA×16+16×16=(SA+16)×16+0
可用段地址和偏移地址表示为:SA+10:0。

(3)注意:有一步称为重定位的工作我们在上面没有讲解,因为这个问题和操作系统的关系较大,我们不作讨论。
(4)到了 int 21,我们要用P命令执行:int 21 执行后,显示“Program terminated normally”,返回到Debug中。表示程序正常结束。(我们现在不用深究P命令有什么用,只要记住看到int 21时用P命令就行了)
(5)我们在 DOS中用 “Debug 1.exe” 运行Debug对1.exe进行跟踪时,程序加载的顺序是:command加载Debug,Debug加载1.exe。返回的顺序是:从1.exe中的程序返回到Debug,从Debug返回到command。(差不多就是上一讲中的单线程,一级一级的来分)



谢谢小甲鱼带来的视频教程,感谢!!


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢

评分

参与人数 1鱼币 +7 收起 理由
小甲鱼 + 7

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-1 22:39:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-2 13:51:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-17 20:59:27 | 显示全部楼层
大神,您图一里面圈出来的那个"start"入口是什么啊,我听甲鱼老师讲了好几遍都没听懂,那个是干什么用的啊,求大神解答,越详细越好(我脑子笨),谢谢谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-22 15:08:25 | 显示全部楼层
好像是标志,告诉编译器这程序开始执行的地方,相当于C里面的mian()吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 03:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表