ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编编程

2019-06-10 20:41:34  阅读:279  来源: 互联网

标签:可执行文件 汇编 程序 编程 伪指令 编译 ax 源程序


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

共分为三部:

  1. 编写源程序
  2. 编译连接,编译后生成的可执行文件分为两部分:
    • 程序和数据
    • 相关的描述信息(提供给操作系统的)
  3. 执行
    在操作系统中,执行可执行文件时。操作系统将按照可执行文件中的描述信息,将可执行文件中的机器码和数据加载进入内存,并进行相应的初始化。

源程序

assume cs:codesg
codesg segment
    mov ax,0123H
    mov bx,0456H
    add ax,bx
    add ax,ax
codesg ends
end

该段源程序分为三部分

  1. 伪指令
  2. 程序(汇编指令)
  3. 标号

伪指令没有对应的机器码(不是汇编指令)。被编译器来执行。
比如segmentends就是一对成对使用的伪指令,这是编写被编译器编译的汇编程序必须要使用的一对伪指令。segment和ends的功能就是声明一个段。segment说明一个段的开始,而ends则说明一个段的结束。一个段必须有一个名称来标识(标号)
一个汇编程序就是有多个段来组成的,分别用来存放数据和代码。一个源程序将计算机所要处理的信息按类别划分待不同的段中。
end指令指示整个程序的结束。编译器如果碰到了伪指令end,就会结束对源程序的编译。
assume假设某一段寄存器与程序中的某一个段相关联。在需要时编译程序可以将段寄存器和某一个具体的段相关联。
汇编源程序中的标号代表了一个地址,比如codesg作为一个段的名称。在他最终被编译以后,连接程序将其处理为一个段的段地址。
UTOOLS1560169840527.png
好像可以这样认为,一个汇编程序就是有程序段和数据段组成。

程序的返回

以DOS(单任务操作系统)为基础讨论。
程序P1将可执行文件P2装入内存,并将cpu控制权交给P2。P2开始运行,P1暂停。
P2运行结束,将cpu控制权交还给使他运行的程序P1,之后P1继续运行。
其中,这个交还cpu控制权的过程,称为程序返回。
其中,

mov ax,4c00H
int 21H

实现程序返回的功能。
UTOOLS1560169885399.png

语法错误和逻辑错误

语法错误就是一般可以在编译期间发现的错误
而逻辑错误通常要在程序运行中才能够发现。
其中,逻辑错误要比语法错误能以解决。

谁将可执行文件中的程序装在如内存并使他运行

对于DOS环境,也就是是command.exe(系统shell)。
任何通用操作系统都会提供一个shell(壳)程序,这是用户和系统进行交互的接口(方式之一)。

debug为什么能实现程序执行的跟踪

这是因为和shell执行可执行文件不同,debug并不会完全放弃对cpu的控制。
UTOOLS1560169960996.png
debug将可执行文件装入内存以后,cx中存放程序的长度(汇编指令的长度)
UTOOLS1560169982794.png
PSP占256个字节,观察图4.19可以发现ds和cs相差10H。这也可以从侧面证明这一点。
PSP是DOS用来和程序进行通信的,之后才存放的是真正的程序。



来自为知笔记(Wiz)




标签:可执行文件,汇编,程序,编程,伪指令,编译,ax,源程序
来源: https://www.cnblogs.com/freesfu/p/11000012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有