将数据、代码、栈放到不同的段(感觉很好)

脊髓节段解剖与功能全解析:从颈段到骶段的临床定位诊断 中枢神经系统是人体的信息处理与控制核心,负责协调感觉、运动和自主功能。其关键组成部分——脊髓,作为连接大脑与周围神经的桥梁,其内部结构遵循严格的节段性组织原则。从解剖学原理上看,脊髓并非均质结构,而是依据胚胎发育和功能需求,划分为颈、胸、腰、骶等多个节段,每个节段通过特定的神经根支配身体相应区域,形成精准的体表感觉分布(皮节)和肌肉运动控制。这一节段性支配原理是神经学检查的基石,具有极高的临床技术价值。在工程实践与医学诊断中,例如在评估脊髓损伤、定位椎间盘突出压迫的神经根,或设计针对性的神经康复方案时,都必 阅读详情

1.将数据、栈都放到代码段中太混乱了。下面我们写一个程序,将数据、代码、栈放到不同的段中

assume cs:code,ds:data,ss:stack
data segment
	dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends

stack segment
	dw 0,0,0,0,0,0,0,0
stack ends

code segment
start:
	mov ax,stack
	mov ss,ax
	mov sp,16
	mov ax,data
	mov ds,ax
	mov bx,0
	mov cx,8
s:
	push [bx]
	add bx,2
	loop s
	mov bx,0
	mov cx,8
s0:
	pop [bx]
	add bx,2
	loop s0
	mov ax,4c00h
	int 21h
code ends
end start

(1)现在,程序中有多个段,我们如何访问段中的数据呢?当然要通过地址,而地址是分为两部分的,即段地址和偏移地址。我们如何指明要访问的数据的段地址呢?在程序中,段名就相当于一个标号,它代表段地址。所以指令”mov ax,data"的含义就是将名称为“data"的段的段地址送入ax。一个段中的数据的段地址可以由段名代表,偏移地址就要看它在段中的位置了。程序中”data“中的数据0abch的地址就是data:6。


(2)代码段、数据段、栈段完全是我们的安排

现在,我们以一个具体的程序来再次讨论一下所谓的代码段、数据段、栈段。在汇编程序中,我们可以定义很多的段,比如上面我们定义三个段“code”,“data",“stack”。我们可以安排他们存放代码段、数据、栈。那么我们如何让CPU按照我们的这种安排来执行这个程序呢?我们来看看源程序中对这三个段所做的处理:

  • 我们在源程序中为这三个段起了具有含义的名称,数据段命名data,代码段命名code,栈空间命名stack。这样命名之后,CPU是否就去执行code段中的内容,处理data段中的数据,将stack当做栈了呢?当然不是,我们这样命名,仅仅是为了我们程序便于阅读,这些名称同start、s、s0等标号一样,仅在源程序中存在,CPU并不知道他们。
  • 我们在程序中使用伪指令assume cs:code,ds:data,ss:stack将cs、ds和ss分别和code、data、stack段相连,这样做之后,CPU是否就将cs指向code,ds指向data,ss指向stack,从而按照我们的意图来处理这些段呢?当然也不是,要知道assume是伪指令,是由编译器执行的,也是仅在源程序中存在的信息,CPU并不知道他们。我们不必探究assume的作用,只要知道需要用它将你定义的具有一定用途的段和相关寄存器联系起来就可以了。
  • 若要CPU按照我们安排行事,就要用机器指令控制它,源程序中的汇编指令是CPU要执行的内容。CPU如何知道去执行他们?我们在源程序的最后用end start 说明了程序的入口,这个入口将被写入可执行文件的描述信息,可执行文件被加载入内存之后,CPU的CS:IP被设置指向这个入口,从而开始执行程序中的第一条指令。标号start在code段中,这样CPU就将code段中的内容当做指令来执行。我们在code段中,使用指令:
    	mov ax,stack
    	mov ss,ax
    	mov sp,16
    设置ss指向stack,设置ss:sp指向stack:16,CPU执行这些指令后,将把stack段当做栈空间来用。CPU若要访问data段中的数据,则可用ds指向data段,用其他的寄存器来存放data段中数据的偏移地址。
  • 总之,CPU到底如何处理我们定义的段中的内容,是当做指令执行,当做数据访问,还是当做栈空间,完全是靠程序中的具体汇编指令,和汇编指令对CS:IP,SS:SP,DS等寄存器的设置来决定的。
C++代码实现栈基本操作 C++代码实现栈基本操作,可以实现的,点进不亏 阅读详情

相关推荐

【数据结构】【栈】初始值不同时栈空栈满以及出入栈区别

栈满问题 关于初始值设置为0和-1的区别,在参考书上没有找到明确的对比,自己调试代码,分享一下希望能对大家有所帮助,如有问题请多多指教 本文中所有代码默认为初始值为-1,初始值为0的写法会在代码中进行标注 栈空: 初始值为-1 bool StackEmpty(SqStack S){ if(-1 ==S.top){//初始值为0是改为if(0 == S.top) return true; }else{ return false; } } 我感觉对栈空理解会比较容易 栈满:不用单独写栈满情况,以防

qq_43498726的博客 823

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

在前面的内容中,我们在程序中用到了数据和栈,将数据、栈、和代码都放到一个段里面。我们在编程的时候要注意何处是数据、何处是栈、何处是代码。这样做的两个问题: ①把它们放到一个段中使程序更加的混乱 ②当数据较少的时候放到一个段里没有问题。但是如果数据、栈、代码需要空间超过64kb,就不能放到一个段中。(一个段的容量不能大于64kb,是8086,不是所有处理器都这样) 所以要考虑用多个段来存放代码、数据、栈 不能写“mov ds,data”,因为8086CPU不允许将一个数值直接送入段寄存器 ...

_Co1a 468

LCD、LED、OLED、Mini LED、Micro LED、全阵列LED、QLED、QD-OLED、QNED、AMOLED是什么意思?

LCD(液晶显示器,Liquid Crystal Display)定义:LCD 是一种利用液晶材料控制光线通过的显示技术,需依靠背光源(如冷阴极荧光灯 CCFL 或 LED)照亮液晶层以形成图像。技术原理:液晶分子在电场作用下改变排列,控制背光通过的强度和颜色。液晶本身不发光,需外部光源。特点:结构包括背光层、液晶层、彩色滤光片和偏光片。响应时间较慢,黑色表现因背光漏光而偏灰。LED(发光二极管显示,Light Emitting Diode)定义。

中国最威武的城市!武功军威-武威,铁骨铮铮! 3423

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

本节你将学习 如何在一段程序中同时使用多个段 代码段如何调用数据段和栈段的数据 程序6.4 在源程序中使用多个段完成以下数据的逆序存放 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 源程序 assume cs:code,ds:data,ss:stack data segment dw 0123h,0456h,0789...

Kevin的博客 366

别再混淆了!一张图看懂SAP特殊采购类30/40/70/80的区别与选型指南

本文深度解析SAP特殊采购类30/40/70/80的核心逻辑与业务影响,通过对比框架和真实案例帮助用户掌握其适用边界。重点介绍委外加工(类型30)、工厂间转移(类型40/70)及计划与执行分离(类型80)的配置要点与常见问题,提供选型决策树和实施检查清单,助力企业优化供应链管理。

weixin_26938645的博客 450

Windows——Nessus安装(无限制)

Nessus手把手图文安装,解除ip限制~

网安小白的博客 9447

汇编语言中将数据、代码、栈放入不同的段

数据、代码、栈放入不同的段 在学习汇编语言,将数据、代码、栈放入不同的段。参考王爽老师的第四版,对P133的汇编代码,进行了个人理解标注。仅供参考,存在错误之处,请大家斧正。 assume cs:b, ds:a, ss:c; // 代码段cs、数据段ds、栈段ss a segment dw 0123h,0456h,0789h,abcdh,0defh,0fedh,0cbah,0987h // 共8个字 a ends c segment dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

weixin_45111030的博客 584

手把手教你用mitmproxy抓包抖音数据流(附Python脚本模板)

本文详细介绍了如何使用mitmproxy抓包抖音数据流,包括环境搭建、证书安装和Python脚本模板。从mitmproxy配置到抖音API解析,提供完整的移动端数据流分析方案,帮助开发者快速掌握数据抓取技术,适用于应用优化、竞品分析和安全审计等场景。

weixin_33670786的博客 307

【汇编语言】第六章 包含多个段的程序

从0开始学汇编

qq_62068476的博客 497

LabVIEW电压信号采集系统:从零搭建到科研实战

本文详细介绍了如何从零开始搭建一个基于LabVIEW的电压信号采集系统。内容涵盖硬件选型(如NI USB-6002数据采集卡)、软件环境配置、核心程序开发(包括多通道同步采集、数据自动保存)以及高级功能优化。系统支持自定义采样率与时长,并提供了完整的LabVIEW程序框图和配套的Python数据分析脚本,旨在帮助科研人员和工程师快速构建稳定、高效的专属数据采集方案,提升实验自动化水平。

gold8的专栏 460

PX4从放弃到精通(二十一):使用git管理PX4代码

文章目录前言一、设置git密钥二、将代码上传至gitee 前言 Ubuntu 18.04 PX4 1.11.3 由于github有时网速较慢,本文使用gitee。 一、设置git密钥 ssh-keygen -t rsa -C “your_email@youremail.com” your_email@youremail.com为自己注册的gitee账户邮箱.设置路径与密码时,也直接回车不设置,如下图,密钥生成的位置在红框处. 在密钥目录下按Ctrl+H显示隐藏文件,进入.ssh文件夹用gedit打开id

超维空间科技的博客 3476

将数据、代码、栈放入不同段(0603)

本文为《汇编语言程序设计》0603小节例程。点击链接…进课程主页。 问题:利用栈,将程序中定义的数据逆序存放。 assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H data ends s...

weixin_34217773的博客 199

大模型长对话中上下文无法承载全部历史,如何压缩或提取重点

如果说截断和滑动窗口是“硬性”压缩,那摘要生成技术就显得“软”多了,也更接近于智能化的解决方案。它的思路是:不直接丢弃历史,而是通过自然语言处理(NLP)技术,把冗长的对话记录浓缩成一段简短的摘要,保留核心信息。这样既能大幅减少token数量,又不至于丢失关键内容。这种方法通常会借助预训练模型,比如BART或T5,它们擅长从长文本中提取重点内容。

大模型大数据攻城狮的专栏 1586

第6章 包含多个段的程序

在操作系统的环境中,,因为操作系统不会让一个程序所用的空间和其他程序以及系统自己的空间相冲突。在操作系统允许的情况下,程序可以取得任意容量的空间。

yyhshm520的博客 1695

多层环境室内定位系统综述总结

本文是一篇发表于2025年《IEEE Access》期刊的综述论文,由埃及开罗美国大学与卡塔尔卡内基梅隆大学团队合作完成,聚焦多层环境室内定位系统的核心挑战、技术方案及未来方向,填补了该领域缺乏全面综述的空白。

程序员石磊 442

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

写代码的时候应该靠感觉还是靠理性

如果用一句话来总结的话,那就是:不管是写代码还是其他事情,在自己的感觉并不靠谱、不能依赖于感觉的时候,尝试先找一把 “尺子”,也就是找一些可以依赖的判断标准,熟悉了这些标准之后,我们就可以摆脱对不靠谱感觉的依赖,结果就是,我们的判断会更加准确,我们的决策也会更加理性。

rubys007的博客 1082

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

浅谈c语言代码段 数据段 bss段 堆栈

代码段、数据段、bss段(1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分。(2)代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆叠组成的。(3)数据段(也被称为数据区、静态数据区、静态区):数据段就是程序中的数据,直观理解就是C语言程序中的全局变量。(注意:全局变量才算是程序的数据,局部变量不算程序的数据,只能算是函

yingjie79613的博客 1208

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

内存分配(堆、栈、BSS、代码段、数据段)

这两天看了马士兵老师的视频、视频中提到了一个万能钥匙、就是了解程序运行中对内存的操作、主要讲了堆、栈、Data、说真的有点晕、看了两遍、也就略懂一二、在这做个小小知道总结 简介 我们程序运行的时候都是放在内存里的、根据静态、成员函数、代码段、对象、等等、放在不同的内存分块里、大概分为5块          1  栈          2  堆          3 BSS段-全局

我思故我在 7153

栈的总结(有时候感觉自己掌握了,栈和队列,可是在写的时候会遇到不同的情况,就不会处理了,因此在这里进行总结下)(转)

声明:本文为转载供自己学习,也供大家参考。经作者允许, 栈和队列的总结: (有时候感觉自己掌握了,栈和队列,可是在写的时候会遇到不同的情况,就不会处理了,因此在这里进行总结下)。 栈: 栈是一端受限,一段允许进行操作的线性表。我自己理解时,会将它理解成一个装书的盒子。放书,取书,就是进行的操作。这个的特点就是,你放了一踏书,现在你...

baobeiduoduo的博客 501

P2422 良好的感觉

一个做题中的小研究,边界处理和细节处理真的很重要!!!!

jzka666zh的博客 1976

Linux中的BSS段、数据段、堆栈段和代码段

扩展阅读:http://blog.chinaunix.net/uid-27018250-id-3867588.html 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不

lijianmin007的专栏 2609

UVa1619 感觉很好

UVa1619 感觉很好 解题报告 题目链接   这题使用单调栈,可以在O(n)O(n)O(n)时间内解决,单调栈还是不熟练,总结一下希望能提高吧。 题目分析   题目的意思很简单,实际就是给定一个数组 A,在其中找出一个子序列A[i]...A[j]A[i]...A[j]A[i]...A[j],使其满足sum(A[i]+A[i+1]+...+A[j])∗min(A[i],A[i−1],...,A[...

XiangJiaoJun_的博客 535

数据结构:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同?——对此问题的探讨

题源:《数据结构1800题》第四版 P45 1. 判断题:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同。(北京邮电大学,2005) 答案:√ 分析:这道题之前已经有人讨论过,可以参考:《V2EX:一个算法题请教…》,看来确实有一些争议,下面以我的理解分析一下。 首先,本题 并未说明说初态和终态是否为空,而在 终态栈非空 的情况下,也就是说,并不需要所有元素都出栈,这样的话,留给我们的发挥空间就比较大了。 例如,输入序列为:1 2 3 4 操作①:push pop,输出序列:1 操作②:p

寒泉 7万+

汇编语言(第3版)- 包含多个段的程序

之前的章节只有代码段,这里开始引入数据段和栈段。

goodparty的专栏 328

数据结构-栈

堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2402_82385099的博客 1083

数据结构 栈的概念及栈的实现

栈(后进先出,先进后出),一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作

liuty0125的博客 1206
上一篇: 代码段中存放数据
下一篇: [bx]和loop指令
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值