博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言(王爽)第四章第一个程序
阅读量:5754 次
发布时间:2019-06-18

本文共 958 字,大约阅读时间需要 3 分钟。

4.1一个源程序从编写到执行的过程

第一步:编写汇编源程序;第二步:对源程序进行编译和连接:编译器进行编译,生成目标文件,连接器对目标文件进行连接,生成可执行文件;第三步:执行可执行文件。

4.2源程序

汇编语言源程序中有两种指令:一种是汇编指令,一种是伪指令。汇编指令对应有机器码,可以被编译为机器指令;而伪指令是由编译器来执行的指令,是辅助编译工作的指令,并不转化成机器码,更不会被执行。

程序返回:一个程序要被执行,首先要被加载到内存,然后将CPU控制权交给该程序。比如对于单任务操作系统DOS下,若P1正在执行,要执行P2的话,则P1先要将P2加载到内存,将CPU控制权交给P2,然后P2开始运行,P1暂停。当P2运行结束后,需要将CPU控制权交还给P1,这个交还称之为“程序返回”。汇编指令里的“mov ax,4c00H/int 21H"实现的功能就是程序返回。

与结束相关的指令:

目的                   相关指令        指令性质      指令执行者

通知编译器一个段结束   段名 ends      伪指令      编译时编译器执行

通知编译器程序结束    end         伪指令      编译时编译器执行

程序返回       mov ax,4c00H int 21h    汇编指令       执行时由CPU执行  

4.9程序执行过程

通过debug可对程序进行单步跟踪,程序加载进入内存后,cx寄存器中存放的是该程序的长度。程序的第一条指令地址即在CS:IP。

在DOS系统中可执行文件的加载过程如下:先找到一段足够容量的内存空闲区域,设其起始地址为SA:0000;在该区域前256个内存单元中创建PSP数据区(这个区主要是DOS系统用来和该程序进行通信);在这256个内存单元之后开始存入程序。

所以,各区域分配如下:

内存空闲区域:SA:0000~;

PSP区:SA:0000~SA:00FF;

程序装载区:(SA+10):0000~;(这里为何不可以是:SA:0100?).

程序加载完毕后,DS设置为SA,CX设置为程序长度。由上可知,CS=SA+10H=DS+10H;

转载于:https://www.cnblogs.com/tsembrace/p/3223295.html

你可能感兴趣的文章
Confluence 6 注册外部小工具
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
linux 死机分析
查看>>
BOM
查看>>
LeetCode:Nim Game - 尼姆博弈
查看>>
iOS: Block的循环引用
查看>>
mysql实战02 | 日志系统:一条SQL更新语句是如何执行的?
查看>>
测试九 赛后感受
查看>>
ECC椭圆曲线详解(有具体实例)
查看>>
关于WechatApp学习总结
查看>>
Linux常见命令(二)
查看>>
document.write()的用法和清空的原因
查看>>
【EXLUCAS模板】【拓展卢卡斯详解】【组合数高级篇】LuoGu P4720
查看>>
PyCharm切换解释器
查看>>
一些基本的灰度变换函数
查看>>
12.12日个人工作总结
查看>>
jmp far ptr s所对应的机器码
查看>>
css详解1
查看>>
【转载】Presentation at from Yoshua Bengio
查看>>