ch3_1汇编语言程序的源程序

mark 一下, 2023.Aug.15 从湖北返回学习,参加了一场学术会议, 看来做学术确实是需要交流的, 尤其该领域的多交流, 还是需要至少一年参加一次学术会议.

不至于让自己太孤陋寡闻, 局限于自己狭隘的领域内,多看看目前学术界的进展.

1. 用汇编语言写的源程序

1.1 用汇编语言编写程序的工作过程

汇编程序:包含汇编指令和伪指令的文本’

  • 汇编指令,对应有机器码的指令,可以被编译为机器指令,最终被
    CPU执行.

  • 伪指令
    没有对应的机器码的指令,最终不被CPU所执行。

:谁来执行伪指令呢?
伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作.

在这里插入图片描述

assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end

程序返回(套路!):程序结束运行后,将CPU的控制权交还给使它得以运行的程序(常为DOS系统)

1.2程序中的三种伪指令

  • assume(假设)

; 含义是假设某一段寄存器和程序中的某一个用 segment … ends 定
义的段相关联——assume cs:codesg指CS寄存器与codesg关联,将
定义的codesg当作程序的代码段使用。

  • 段定义

; 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
; 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。
; 定义程序中的段:每个段都需要有段名

段名 segment ——段的开始

段名 ends ——段的结束

  • end (不是ends)

汇编程序的结束标记。若程序结尾处不加end,编译器在编译程序时,无法知道程序在何处结束。

assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end

1.3 源程序经编译连接后变为机器码

在这里插入图片描述

1.4 汇编程序的结构

  • 在Debug中直接写入指令编写的汇编程序
    ; 适用于功能简单、短小精悍的程序
    ; 只需要包含汇编指令即可

在这里插入图片描述

  • 单独编写成源文件后再编译为可执行文件的程序
    ; 适用于编写大程序
    ; 需要包括汇编指令,还要有指导编译器工作的伪指令
    ; 源程序由一些段构成,这些段存放代码、数
    据,或将某个段当作栈空间
assume cs:code,ds:data,ss:stack
data segment
dw 0123H,0456H,0789H,0abcH,0defH
data ends
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends
code segment
mov ax,stack
mov ss,ax
mov sp,20h ;设置栈段
mov ax,data
mov ds,ax ;设置数据段
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
....
code ends
end

; 分号,用来代表-- 注释

1.5 如何写出一个程序来?

例:编程求 2^3。
①定义一个段
②实现处理任务
③指出程序在何结束
④段与段寄存器关联
⑤加上程序返回的代码

在这里插入图片描述

1.6程序中可能的错误

语法错误
; 程序在编译时被编译器发现的错误;
; 容易发现下面程序中错误

aume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,sx
end

逻辑错误
; 程序在编译时不能表现出来的、在运行时
发生的错误;
; 不容易发现下面程序中的错误

assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,bx
mov ax,4c10H
int 21H
abc ends
end
求 2^

2. 由源程序到程序运行

2.1 由写出源程序到执行可执行文件的过程

在这里插入图片描述

2.2 编辑源程序

在这里插入图片描述

2.3 编译

在这里插入图片描述

  • 目标文件(*.OBJ)是我们对一个源程序进行编译要
    得到的最终结果。

  • 列表文件(*.LST)是编译器将源程序编译为目标文件的过程中产生的中间结果。

  • 交叉引用文件(*.CRF)同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果。

  • 对源程序的编译结束,编译器输出的最后两行告诉我们这个源程序没有警告错误和必须要改正的错误。

在这里插入图片描述

两类错误
û Severe Errors
û 找不到所给出的
源程序文件。
命令后加 ; 以简化过程

2.4 连接

  • 可执行文件(.EXE)是我们对一个程序进行连接要得到的最终结果。

  • 映像文件(.MAP)是连接程序将目标文件连接为可执行文件过程中产生的中间结果。

  • 库文件(.LIB)里包含了一些可以调用的子程序,如果我们的程序中调用了某一个库文件中的子程序,就需要在连接的时候,将这个库文件和我们的目标文件连接到一起,生成可执行文件。

  • no stack segment,一个“没有栈段”的警告错误 ,可以不理会这个错误。

:连接中可能会遭遇错误
:例:object nor found —— 找不到对象

在这里插入图片描述

2.5 执行可执行程序

在这里插入图片描述

我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我们不可能
从显示屏上看出来。

:程序执行完成后,返回,屏幕上再次出现操作系统的提示符。

2.6 小结

源文件
.asm
目标文件
.obj
目标文件
.obj
可执行文件
.exe

在这里插入图片描述

3. 用Debug跟踪程序的执行

在这里插入图片描述

3.1 用Debug装载程序

在这里插入图片描述

小结

程序加载后,DS中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:DS:0。

这个内存区的前256 个字节存PSP,DOS用来和程序进行通信。

从 256字节处向后的空间存放的是程序,CS的值为DS+10H。
; 程序加载后,CX中存放代码的长度(字节)。

程序被装入内存的什么地方?

在这里插入图片描述

3.2 用Debug单步执行程序

在这里插入图片描述

3.3 其他方式执行

在这里插入图片描述

  • 继续命令P(Proceed):
    类似T命令,逐条执行指令、显示结果。但遇子程序、中断等时,直接执行,然后显示结果。

  • 运行命令G(Go):从指定地址处开始运行程序,直到遇到断点或者程序正常结束。

3.4 程序执行的不同方式

  • 在DOS中执行

程序执行的“常态”

  1. DOS启动后,计算机由“命令解释器”(程序command.com)控制;
  1. 运行可执行程序时,command将程序加载入内存,设置CPU的CS:IP指向程序的第一条指令(即程序的入口),使程序得以运行。
  1. 程序运行结束后,返回到“命令解释器”,CPU继续运行command。
  • 在Debug中执行

程序执行处于开发周期的运行方式;
在这里插入图片描述

运行Debug时,command程序加载Debug.exe,debug 将程序加载入内存,程序运行结束后,
要返回到Debug中,使用Q命令退出Debug,将返回到command中。

在这里插入图片描述

书本章节对应

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3学习源码笔记(小白入门系列)------ 组件是如何渲染成dom挂载到指定位置的?

文章目录 os准备组件如何被挂载到页面上第一步 createApp 做了哪些工作?ensureRendererbaseCreateRenderercreateAppAPImountrenderpatchprocessComponentprocessElement 总结 os 学习一下vue3 源码,顺便记录分享下 使用vitest 插件调试源码 辅助阅读 …

layui框架学习(40:数据表格_主要事件)

Layui数据表格模块主要通过各类事件响应工具栏操作、单元格编辑或点击等交互操作,本文学习table数据表格模块中的主要事件及处理方式。   头部工具栏事件。通过代码“table.on(‘toolbar(test)’, function(obj))”获取lay-filter属性为test的数据表格的头部工具栏…

javeee eclipse项目导入idea中

步骤一 复制项目到idea工作空间 步骤二 在idea中导入项目 步骤三 配置classes目录 步骤四 配置lib目录 步骤五 添加tomcat依赖 步骤六 添加artifacts 步骤七 部署到tomcat

Mybatis+MybatisPlus拦截器实战之数据的加解密和脱敏

文章目录 一、前言二、拦截器简介三、代码目录结构简介四、核心代码讲解4.1 application.yml文件4.2 自定义注解4.2.1 SensitiveEntity4.2.2 SensitiveData4.2.3 MaskedEntity4.2.4 MaskedField4.2.5 MaskedMethod 4.3 Mybatis-Plus 拦截器数据自动加密4.4 Mybatis 打印完整sql…

添加了.gitignore 文件,git status 的时候还是显示修改文件

1. 用IAR 软件编译STM32 工程,IAR 会生成很多中间文件,这些文件是不需要加入到git 版本管理里面的 2. .gitignore 文件位置需要放对应目录才会起作用,递归起作用的 3. 如果 .gitignore文件中指定的文件或目录仍然显示在git status的输出中&a…

万字长文:Stable Diffusion 保姆级教程

万字长文:Stable Diffusion 保姆级教程 2022年绝对是人工智能爆发的元年,前有 stability.ai 开源 Stable Diffusion 模型,后有 Open AI 发布 ChatGPT,二者都是里程碑式的节点事件,其重要性不亚于当年苹果发布iPhone&a…

Java接口(interface)

接口(interface)明确了描述类被授权了哪些能力,但不会指定具体的方式。实现类(implement)一个或多个接口。–>使类完成了实现,是一种对于行为规范的准则的抽象。 个体的方法可以在子类中自写展现&#…

sql server 、mysql CTE 公用表表达式

sql server 详细 mysql CTE CTE 是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其它子查询。所以,开发中建议…

2023企业网盘产品排行榜揭晓:选择最适合你的企业网盘工具

企业网盘产品已成为企业文件管理协作的主要选择之一,无论是在文件管理方面,还是团队协作上,企业网盘都表现优秀。为了帮助企业选到心怡的企业网盘产品,我们综合了不同的产品测评网站意见,整理了2023企业网盘产品排行榜…

Python高光谱遥感数据处理与高光谱遥感机器学习方法应用

本文提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇以学员为中心,用通俗易懂的语言解释高光谱的基本概念和理论,旨在帮助学员深入理解科学原理。方法篇结合Python编程工具,专注…

python下timer定时器常用的两种实现方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 方法一,使用线程中现成的: 这种一般比较常用,特别是在线程中的使用方法,下…

K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换

前言 在之前的章节中,我们已经成功地将Dubbo项目迁移到了云环境。在这个过程中,我们选择了单机ZooKeeper作为注册中心。接下来,我们将探讨如何将单机ZooKeeper部署到云端,以及在上云过程中可能遇到的问题及解决方案。 ZooKeeper…

Docker安装ES+kibana8.9.1

参考:基于Docker安装Elasticsearch【保姆级教程、内含图解】_docker elasticsearch_Acloasia的博客-CSDN博客 创建网络 docker network create es-net 基于Docker安装Elasticsearch 拉取镜像 docker pull elasticsearch:8.9.1 挂载文件 mkdir -p /usr/local/e…

Excel 分组排名

分组排名 公式&#xff1a;SUMPRODUCT((A:AA2)*(C:C>C2)) 1 降序&#xff1a;> 改为 < ⚠️注意1&#xff1a;此处空值参与排名&#xff1b;不参与排名则公式改为&#xff1a;IF(C2“”,“”,SUMPRODUCT((A:AA2)*(C:C>C2)) 1) ⚠️注意2&#xff1a;相同值的项…

2023年清洁能源与智能电网国际会议(CCESG 2023)

会议简介 Brief Introduction 2023年清洁能源与智能电网国际会议(CCESG 2023) 会议时间&#xff1a;2023年 召开地点&#xff1a;中国南宁 大会官网&#xff1a;CCESG 2023-2023 International Joint Conference on Clean Energy and Smart Grid 由IASED主办&#xff0c; CoreS…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…

PC上架货源的方式

PC上架货源的方式 第一步建立文档夹 给他发一个snipaste的文件包 1、第一步搜索1688 移动端上架货源的方式 货源上架 弄两个方框&#xff0c;上架货源&#xff0c;先下载软件

数据库三大范式是什么,又为什么要反范式?

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

“分布式”与“集群”初学者的技术总结

一、“分布式”与“集群”的解释&#xff1a; 分布式&#xff1a;把一个囊肿的系统分成无数个单独可运行的功能模块 集群&#xff1a; 把相同的项目复制进行多次部署&#xff08;可以是一台服务器多次部署&#xff0c;例如使用8080部署一个&#xff0c;8081部署一个&#xff0c…

使用cgroup工具对服务器某些/全部用户进行计算资源限制

使用cgroup工具对服务器某些/全部用户进行计算资源限制 主要介绍&#xff0c;如何对指定/所有用户进行资源限定&#xff08;这里主要介绍cpu和内存占用限制&#xff09;&#xff0c;防止某些用户大量占用服务器计算资源&#xff0c;影响和挤占他人正常使用服务器。 安装cgrou…