包含多个段的程序

文章目录

  • 包含多个段的程序
    • 在代码段中使用数据
    • 在代码段中使用栈
    • 将数据、代码、栈放入不同的段

包含多个段的程序

在代码段中使用数据

考虑这样一个问题,编程计算以下8个数据的和,结果存在ax 寄存器中:0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H。

代码:

assume cs:codesg
codesg segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
  	mov bx,0
	mov ax,0
	mov cx,8
 s: add ax,cs:[bx]
	add bx,2
	loop s
	mov ax,4c00h
	int 21h
codesg ends
end

“dw”的含义是定义字型数据。dw即define word。在这里,我们使用dw定义了8个字型数据(数据之间以逗号分隔),它们所占的内存空间的大小为16个字节。

这8 个数据在代码段的偏移地址为0、2、4、6、8、A、C、E处。

程序中,我们用bx存放加2递增的偏移地址,用循环来进行累加。

在循环开始前,设置(bx)=0,cs:bx指向第一个数据所在的字单元。

每次循环中(bx)=(bx)+2,cs:bx指向下一个数据所在的字单元。

请添加图片描述

查看内存单元地址可得cs:ip指向第一个字单元,此字单元被我们用来存储数据,计算机却误认为这是代码并从此处开始执行。

请添加图片描述

再次查询偏移地址为16的内存空间,这次得到的才是我们真正要执行的代码。

为了解决上述问题,我们可以给代码段添加一个开始标识符

assume cs:codesg
codesg 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
codesg ends
end start

再次调式可得程序会从偏移地址为16的位置开始执行代码。

在代码段中使用栈

我们可以在程序中通过定义数据来取得一段空间,然后将这段空间当作栈空间来用。

代码示例:利用栈,将程序中定义的数据逆序存放

assume cs: codesg
codesg segment
	dw 0123h,0456h,0789h,0abch,0defh, 0fedh,0cbah,0987h
	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
					;用dw定义16个字型数据,在程序加载后,将取得16 个字的
					;内存空间,存放这16个数据。在后面的程序中将这段
					;空间当作栈来使用
start:  mov ax,cs 
        mov ss,ax 
        mov sp,30h   ;将设置栈顶ss:sp指向cs:30
        
        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
    	1oop s0		;以上依次出栈8个字型数据到代码段0~15单元中

        mov ax, 4c00h
        int 21h
codesg ends
end start

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

我们在程序中用到了数据和栈,我们将数据、栈和代码都放到了一个段里面。我们在编程的时候要注意何处是数据,何处是栈,何处是代码。

这样做显然有两个问题:

  • 把它们放到一个段中使程序显得混乱。
  • 前面程序中处理的数据很少,用到的栈空间也小,加上没有多长的代码,放到一个段里面没有问题。但如果数据、栈和代码需要的空间超过64KB,就不能放在一个段中(一个段的容量不能大于64 KB,是我们在学习中所用的8086模式的限制,并不是所有的处理器都这样)。

所以,我们应该考虑用多个段来存放数据、代码和栈。

我们用和定义代码段一样的方法来定义多个段,然后在这些段里面定义需要的数据,或通过定义数据来取得栈空间。

代码示例

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,0,0,0,0,0,0,0,0
stack ends

code segment
    start:  mov ax,stack
    		mov ss,ax
    		mov sp,20h		;设置栈顶ss:sp指向 stack:20
    		mov ax,data
            mov ds,ax		;ds指向data段
            mov bx,0		;ds:bx指向data段中的第一个单元
            
            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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FaceBook广告账号验证教程

1.登录facebook账号,点击左边的ads manager。 2.点击Create ad创建广告。 3.选择广告投放意向。 4.填写广告信息。 5.创建广告后选择付款方式,这里我是使用信用卡付款。这里我是使用Fomepay的虚拟卡进行绑定的。 6.填写信用卡的持卡人姓名 卡号 有效期 安全码 7.填写…

Negative Sampling with Adaptive DenoisingMixup for Knowledge Graph Embedding

摘要 知识图嵌入(Knowledge graph embedding, KGE)的目的是通过对比正负三元组,将知识图中的实体和关系映射到一个低维、密集的向量空间中。在kge的训练过程中,由于kge只包含正三元组,因此负采样对于找到高质量的负三元组至关重要。大多数现…

【Redis】Redis特性

Redis 认识redisRedis特性在内存中存储数据可编程可扩展性持久化Clustering高可用性 认识redis Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志…

时间对比投资:衡量5天与10天六西格玛绿带培训的价值

六西格玛绿带培训专为希望提高其业务流程改进技能的专业人员设计。绿带培训通常涵盖六西格玛的基础知识、DMAIC(定义、测量、分析、改进、控制)方法论、以及各种质量管理工具和技巧。绿带受训者通常在他们的工作职责中负责领导小型项目或作为黑带项目团队的成员,下面…

(附源码)基于Spring Boot + Vue的招聘平台设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

使用Django实现信号与消息通知系统【第154篇—Django】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Django实现信号与消息通知系统 在Web应用程序中,实现消息通知系统是至关重…

【JAVA】数组的定义和使用

JAVA的数组和c语言的相似但是在创建上略有不同 数组的创建及初始化 T[] 数组名 new T[N]; T:表示数组中存放元素的类型 T[]:表示数组的类型 N:表示数组的长度 动态初始化 int[] array new int[10]; 静态初始化 int[] array1 new …

边缘计算基础介绍及AKamai-linode产品分析

1、背景 随着互联网的发展,我们进入了大数据时代,这个时代也是移动互联网的时代,而且这个时代,大量的线下服务走到线上,随之而来的,比如外卖、叫车……于是,有各种各样的 App 和设备在收集你的…

基于DWT(离散小波变换)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

nodejs+vue高校师资管理系统python-flask-django-php

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式…

nginx: [emerg] stream directive is duplicate in /etc/nginx/nginx.conf:56

背景: 在维护paas平台的时候发现一个web前端容器服务运行报错,提示如下: 问题分析: 根据日志的内容,发现是nginx.conf配置文件的stream模块配置存在问题导致的。需要查看一下nginx.conf配置文件的内容: 注…

Soybean Admin:基于 Vue3、Vite3、TypeScript、NaiveUI、Pinia 和 UnoCSS 的清新优雅的中后台模版

一、引言 随着互联网技术的快速发展,前端开发领域也在不断演进。Soybean Admin 作为一个基于最新前端技术栈的中后台模版,为开发者提供了一个高效、规范、灵活的解决方案。本文将深入探讨 Soybean Admin 的技术特性及其在中后台前端开发中的优势。 二、…

android h5理财(记账)管理系统eclipse开发mysql数据库编程服务端java计算机程序设计

一、源码特点 android h5理财管理系统是一套完善的WEBandroid设计系统,对理解JSP java,安卓app编程开发语言有帮助(系统采用web服务端APP端 综合模式进行设计开发),系统具有完整的源代码和数据库,系统主要…

从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

一、引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化,毕竟作为开发我们肯定没有经历每天定…

基于springboot实现在线拍卖系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线拍卖系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍…

[热门]通义灵码做活动,送挺多礼品,快来薅羊毛!!!

你的编辑器装上智能ai编辑了吗,的确挺好用的。 最近阿里云AI编码搞活动,可以免费体验并且还可以抽盲盒。有日历、马克杯、代金券、等等其他数码产品。 大多数都是日历。 点击链接参与「通义灵码 体验 AI 编码,开 AI 盲盒」 https://develope…

PCI产业概述和产业发展动态分享

atsec白海蔚 2024年3月底 关键词:支付卡产业、PCI DSS、数据安全、支付交易 本文为atsec和作者技术共享类文章,旨在共同探讨信息安全的相关话题。转载请注明:atsec和作者名称。 *如有兴趣了解早期产业信息请参见作者于2021年4月发布信息&a…

液晶显示解决方案T-CON面板显示驱动PMIC芯片

随着数智时代的到来,高清电影、游戏、VR/AR、车载等对多屏、大尺寸、更清晰显示设备的需求越来越高;特别是在智能手机、平板电脑、电视、广告展示和显示器等消费电子产品领域;高效、稳定、多功能的电源管理芯片变得至关重要。 对于LCD TV显示…

Linux-安装redis

安装指令 sudo apt-get install redis-server 启动服务 sudo systemctl start redis 查找redis路径 find / -name "filename" linux redis修改密码 sudo nano /etc/redis/redis.conf 找到 "requirepass" 这一行,取消注释并设置新的密码&…

算法练习-常用查找算法复现

一个不知名大学生,江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion:2024.03.24 Last edited: 2024.03.24 目录 算法练习-常用查找算法复现 第1关:顺序查找(算法7.1和7.2) 任务…