《汇编语言》- 读书笔记 - 第6章- 包含多个段的程序

news2025/1/6 20:12:33

《汇编语言》- 读书笔记 - 第6章- 包含多个段的程序

  • 6.1 在代码段中使用数据
    • 程序 6.1
    • 程序 6.2
  • 6.2 在代码段中使用栈
  • 6.3 将数据、代码、栈放入不同的段
    • 程序 6.4
  • 实验 5 编写、调试具有多个段的程序

应该将数据、代码、栈放进不同的段中。
程序在加载和运行时都可以向系统申请内存空间来用。
从系统申请内存来用才是安全的,不应该自己直接写内存,那样可能会破坏重要数据。

6.1 在代码段中使用数据

考虑这样一个问题,编程计算以下 8 个数据的和,结果存在 ax 寄存器中:
0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
在代码中声明数据段,这样程序加载到内容中,这些数据也就合法的从系统获得了内存空间。

程序 6.1

没有 start 用于引出 6.2,程序没法正常执行。
在这里插入图片描述

程序 6.2

assume cs:code
code segment
		dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:	mov bx, 0
		mov ax, 0
		
		mov cx, 8
	s:	add ax, cs:[bx]	
		add bx, 2
		loop s
		
		mov ax, 4c00h		
		int 21h
code ends
end start
  1. dw 表示 define word。定义字型数据。代码中共定义了8个,占16字节。
  2. add ax, cs:[bx] :因为数据放在代码段,所以可以从CS获取段地址。
  3. 数据在代码段开头,所以偏移从 0 开始。
  4. 因为是字类型,所以每次偏移量+2。8个数据的偏移分别对应:0、2、4、6、8、A、C、E
  5. 标号 start 用于指定程序入口。也就是CS:IP指向的位置。因为代码段的开头我们放的是一堆数据,它们是没法正常执行的。

可执行文件由描述信息程序组成,CS:IP的指向就在描述信息中。
描述信息由编译连接程序对源程序中的伪指令处理得来。

6.2 在代码段中使用栈

assume cs:code
code segment
		dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h	; cs:00~0F
		dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 					; cs:10~2F

start:	mov ax, cs
		mov ss, ax
		mov sp, 30h		; 栈顶指向CS:30,cs:2E + 2
		
		mov bx, 0
		mov cx, 8
	s:	push cs:[bx]	
		add bx, 2
		loop s			; 以上将代码段 0~15 单元中的 8 个字型数据依次入栈
		
		mov bx, 0
		mov cx, 8
	s0:	pop cs:[bx]	
		add bx, 2
		loop s0			; 以上依次出栈 8 个字型数据到代码段 0~15 单元中
		
		mov ax, 4c00h		
		int 21h
code ends
end start

可以说 dw 定义了 xx 个字的数据,也可以说它开辟了 xx 个字的内存空间。效果一样。

6.3 将数据、代码、栈放入不同的段

  1. 数据代码放到一个段中使程序显得混乱;
  2. 如果数据代码需要的空间超过 64KB,就不能放在一个段中。(一个段的容量不能大于 64KB,是我们在学习中所用的 8086 模式的限制,并不是所有的处理器都这样)。

程序 6.4

6.4 实现 6.3 一样的功能,不同之处在于将数据、栈和代码放到了不同的段中。

assume cs:code, ds:data, ss:stack
data segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
	dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
stack ends

code segment
		
start:	mov ax, stack	; 获取栈段
		mov ss, ax		; 设置栈段
		mov sp, 20h		; 设置栈顶 ss:sp 指向 stack:20h
		
		mov ax, data
		mov ds, ax		; ds 指向 data 段
		
		mov bx, 0
		mov cx, 8
	s:	push [bx]	
		add bx, 2
		loop s			; 以上将 data 段中的 0~15 单元中的 8 个字型数据依次入栈
		
		mov bx, 0
		mov cx, 8
	s0:	pop [bx]	
		add bx, 2
		loop s0			; 以上依次出栈 8 个字型数据到 data 段的 0~15 单元中
		
		
		mov ax, 4c00h		
		int 21h
code ends
end start
  1. 定义多个段的方法:定义一个段的方法和前面所讲的定义代码段的方法没有区别,只是对于不同的段,要有不同的段名。
  2. 对段地址的引用:在程序中段名就代表段地址。如:mov ax,data将名称为data的段的段地址送入ax
  3. 代码段,数据段,栈段完全是我们的安排。当作什么来用完全是我们对 CS:IPSS:SPDS 等寄存器的设置来决定的。

实验 5 编写、调试具有多个段的程序

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

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

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

相关文章

美团端侧CDN容灾解决方案

1. 前言 作为业务研发,你是否遇到过因为 CDN 问题导致的业务图片加载失败,页面打开缓慢,页面布局错乱或者页面白屏?你是否又遇到过某些区域 CDN 域名异常导致业务停摆,客诉不断,此时的你一脸茫然&#xff…

javaWebssh服装租赁店信息管理系统台myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh服装租赁店信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要 采用B/S模式开发。开发环境为TO…

C++第一章:开始

开始目录 引言一、开发环境和参考书籍二、一个简单的C程序三、初识输入和输出标准输入输出对象 四、注释五、控制流while循环for循环 六、数量不定数据的输入七、C 缩进和格式八、类简介使用一个类书店处理书籍信息程序 九、术语表 引言 C在人们的眼中通常是“复杂”一词的代表…

软考高级架构师笔记-4中间件、嵌入式技术

目录 1. 前言 & 考情分析2. 中间件3. 微处理器4. 嵌入式软件5. 嵌入式系统6. 嵌入式软件设计6. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔记-2计算机软件(操作系统)软考高级架构师笔记-3数据库本章考情: 本章节偶尔会考到…

多电商平台订单整合,库存同步ERP系统,为何不用电商API对接?

还有不到1个月就是618购物狂欢节了,这个节日对很多电商来说是重头戏,一年中销售额暴涨的机会。现在电商们会在多平台开直播,挂小黄车,如抖音、拼多多、小红书等。数据资源大户电商们通常会把这些不同类型的海量数据分散存储在各个…

如何快速使用 WeUI 组件库?

1、如何快速应用 WeUI 组件库 快速应用 WeUI 组件库的步骤如下: 1、进入即时设计社区资源广场:访问即时设计社区资源广场,该资源广场提供免费使用的 WeUI 组件库,包括深色版和浅色版。设计师可以根据产品风格选择合适的组件库。…

[C++]octomap安装后测试

测试环境&#xff1a; vs2019 octomap1.9.6 release x64 代码&#xff1a; #include <octomap/octomap.h> #include <octomap/OcTree.h> using namespace std; using namespace octomap; void print_query_info(point3d query, OcTreeNode* node) { if (…

使用JS来实现轮播图的效果

最好今天分享一个使用JS制作的轮播图效果 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;几何小超 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;…

mjpg-streamer实现细节分析

mjpg-streamer实现细节分析 文章目录 mjpg-streamer实现细节分析输入初始化input_initinit_videoIninit_v4l2 启动摄像头输入线程cam_threaduvcGrabcompress_yuyv_to_jpegmemcpy_picture 输出初始化output_init启动摄像头输出线程server_thread设置 SO_REUSEADDR 选项。设置 IP…

数据库 查询执行(1) 多路归并

用户输入一个sql语句 sql解析器 将sql语句转换成一个 关系代数 但是同时也会附加一些 操作 (下方未体现)。 外存排序 原理 外部数据元素太多无法一次性的读入内存 通常设计者 会让磁盘块的大小和缓冲区的大小相等 。 首先构造初始的归并段 分别从横向和纵向 体会这…

单片机GD32F303RCT6 (Macos环境)开发 (二十七)—— 蓝牙透传模块HC-08的调试

蓝牙透传模块HC-08的调试 1、模块为汇承HC-08&#xff0c;GD32我们之前已经把usart1 配置成了dmaidle的方式接收数据&#xff0c;我们的hc-08模块连接的就是这一路usart。 所以&#xff0c;与GD32的连接比较简单&#xff0c;如下图&#xff1a; GD32 HC-08 TX(PA2 ) RX RX(PA3…

弘基笔记本电脑怎么使用U盘重装系统?

弘基笔记本电脑怎么使用U盘重装系统&#xff1f;有的用户的弘基笔记本电脑使用过程中出现了蓝屏的情况&#xff0c;系统频繁的出现蓝屏问题导致自己的使用受到了影响&#xff0c;那么这个情况怎么去进行问题的解决呢&#xff1f;一起来看看以下的解决方法吧。 准备工作&#xf…

挂耳式蓝牙耳机排行,四款挂耳式耳机盘点

现在耳机的更新换代也是相当快的&#xff0c;普通的入耳式耳机在长期佩戴的舒适度方面饱受诟病&#xff0c;所以新近流行的开放式耳机很好的避免这个问题&#xff0c;它拥有不入耳不伤耳佩戴设计&#xff0c;解放双耳的同时也更不易丢失。面对市面上款式多样的开放式耳机&#…

Qt基础 自定义消息框

ps&#xff1a;忘记copy那位大佬tip代码了&#xff0c;后面新增可以点选的控件 #pragma once#include <QWidget> #include <QHBoxLayout>#define SHADOW_WIDTH 15 // 窗口阴影宽度; #define TRIANGLE_WIDTH 15 // 小三角的宽度; #de…

优化 docker 容器性能慢问题

问题&#xff1a; 部署环境下tomcat容器启动缓慢&#xff0c;耗时10多分钟&#xff0c;性能较差&#xff0c;同时后端服务响应较慢。 排查&#xff1a; 宿主环境&#xff1a; docker使用情况&#xff1a; 对比结果CPU、内存使用率都不高。 针对docker环境进行检查&#xff…

浅析变电站无人值守管理的模式与特点

安科瑞虞佳豪 近年来&#xff0c;随着电网的发展&#xff0c;变电站实行无人值班管理模式已成为电网的发展方向。自1998年始&#xff0c;辉县市就开始了变电站综合自动化改造&#xff0c;截止目前全局所属24座变电站&#xff08;其中35kV19座、110kV5座&#xff09;已全部实现…

对话 ONES 联合创始人兼 CTO 冯斌:技术管理者如何打造一支自驱型团队?

熟悉冯斌的人&#xff0c;大都直接称呼其网名 Kid&#xff0c;包括他在 ONES 的同事。人如其名&#xff0c;Kid 的寓意就是「用孩子的眼光看世界」&#xff0c;返璞归真的思维方式才能发现新大陆。正如毕加索说的&#xff1a;「我一生都在向孩子学习。」 在 ONES 联合创始人兼…

基因注释R包——annotatr介绍

目录 简介安装annotatr包使用annotatr进行注释CpG注释基因注释自定义注释读取基因组区域注释区域 简介 下一代测序实验和生物信息学管道产生的基因组区域在注释基因组特征时更有意义。出现在外显子或增强子中的SNP可能比出现在基因间区域的SNP更令人感兴趣。有趣的是&#xff…

Tomcat安装与启动和配置

目录 Tomcat 简介 Tomcat 安装 Tomcat 启动和配置 文件夹作用 启动&#xff0c;关闭Tomcat&#xff1b; 常见问题 配置 环境变量 IDEA中配置Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在…

CSDN铁粉攻略

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…