(六)汇编语言——包含多个段的程序

news2024/9/28 15:27:40

目录

使用数据

使用栈

代码

总结


使用数据

        首先,我们来看一个问题,就是编程计算0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H的和,结果存在ax寄存器中。看起来还是比较简单的,用简单的加法指令可以完成,但是这样会有一个问题,就是我们的程序和代码就是混在一起的,不仅导致程序混乱,也让人难以理解。

        我们在使用C语言的时候,知道可以定义一个数组来解决这样的问题,但是在汇编中也没有数组啊,这可怎么办,别急,我们自有办法,那就是代码段。

        我们把数据独立出来,这样的程序就简单明了了,而且也没有安全风险,看起来似乎不错,但是。我们来看看编译后这段代码是什么样的吧! 值得一体的是:dw定义一个字,db定义一个字节,dd定义一个双字

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

        当我们简单编译一下后发现,里面代码全乱套了,这是为什么呢?原因就在于我们定义的数据段 。代码直接从数据段开始编译了,才导致这样的结果,那我们这么解决这个问题呢?

        很清楚的看到,第一行是数据。 

        接下来,我们修改一下我们的代码如下。我们可以看到,在代码段前面添加了start:字样,说明现在数据段和代码段已经分开了。到此,数据段的问题已经解决了,加下来我们来看栈段的使用。

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

使用栈

        使用栈的话,我们首先有一种想法,就是定义一段空的空间出来把它当成栈不久好了,这样虽然可行,但是程序这样显得混乱,编程和阅读时都要注意何处是数据,何处是栈,何处是代码。根据我们定义数据段的方法,大家也应该猜到了,我们可以再定义一个栈段来存放栈,说干就干,我们看代码。

代码

        代码,栈,数据,各司其职,每个人都有自己的位置,到目前为止,一段完整的代码已经被我们敲出来了。 

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
	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

总结

        已经可以敲出一段相对完整的代码了,再接再厉!

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

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

相关文章

《剑指offer》每日三题

这里使用的是题库: https://leetcode.cn/problem-list/xb9nqhhg/?page1 目录剑指 Offer 07. 重建二叉树剑指 Offer 14- I. 剪绳子剑指 Offer 14- II. 剪绳子 II剑指 Offer 07. 重建二叉树 递归思想: 代码 class Solution {int pPre0;//用于遍历preorde…

深入理解HashMap

HashMap集合 1. HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。hashMap的实现不是同步的,这就意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8之前…

短视频上热门技巧总结,这样做你也可以快速上热门。

最近开始做短视频,找了很多短视频运营创作技巧,但能上热门的只有那么几个,经过近一周的分析,结合了我赢上短视频运营创作技巧,得到了以下几个经典技巧合集:学会一个就值了。 首先说一下:什么样的…

团簇生长过程-Ovito渲染

文章目录一、选择出团簇原子和非团簇原子1. 选择团簇原子2. 删除非团簇原子二、选择出团簇原子和非团簇原子1. 团簇分析2. 团簇具体信息三、渲染团簇1、 对团簇进行选择2、 获得团簇渲染后的结果四、渲染结果五、 案例dump下载博文《根据近邻列表法识别团簇—冷凝成核 MatlabOv…

java06-面向对象1

一:面向对象学习内容: 1.java 类及成员:属性、方法、构造器、代码块、内部类 2.面向对象三大特征:封装、继承、多态 3.其他关键字:this、super static、final、abstact、interface 、package、import 二&#xff…

iPhone/iPad上值得推荐的5个免费PDF转Word

PDF 文件是在不同平台上传输数据的最便捷方式,可确保保持高端信息质量。处理将不同文件格式转换为 PDF 的任务通常很麻烦,尤其是在 iOS 设备上。为了解决这个问题,这里讨论了您可以轻松依赖的前 5 个iPhone PDF 转换器工具。 适用于 iPhone 和…

多传感器融合定位六-惯性导航原理及误差分析

多传感器融合定位六-惯性导航原理及误差分析1. 惯性技术简介1.1 惯性技术发展历史1.2 惯性器件1.2.1 机械陀螺(几乎没人用了)1.2.2 激光陀螺1.2.3 光纤陀螺1.2.4 MEMS陀螺(常用)1.2.5 加速度计2. 惯性器件误差分析2.1 信号误差组成2.2 Allan方差分析3. 惯性器件内参标定3.1 惯性…

十六、状态管理——Vuex(1)

本章概要 简单的状态管理安装 Vuex基本用法 Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。他采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex 也被集成到了 Vue 官方调试工具 vue-devtools 中…

跨年夜,想请你看一场烟花秀!

代码分享地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Cu_lKYfAlMBDttSzhVXPuQ 提取码&#xff1a;2ocd 代码效果展示&#xff1a; 源代码分享如下&#xff1a; <!--* Author: Xiao Wang* Date: 2022-12-30 14:26* Description: --> <!DOCTYPE html …

剑指 Offer 20. 表示数值的字符串

题目 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘E’ &#xff0c;后面跟着一个…

canopen11-sdo-2b写入命令

源码 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服务器2000位…

Go 语言从入门到实战

《Go 语言从入门到实战》 的学习笔记&#xff0c;欢迎阅读斧正。感觉该专栏整体来说对有些后端编程经验的来说比无后端编程经验的人更友好。 数据类型 运算符 算数运算符 比较运算符 用 比较数组 相同维数切含有相同个数元素的数组才可以比较&#xff0c;每个元素都相同的才…

四旋翼无人机学习第18节--cadence的bom表、网表导出,PCB板创建,层叠设置

文章目录1 bom表导出2 网表导出3 PCB板创建4 PCB板文件重要设置5 层叠设置1 bom表导出 1、选择DSN文件&#xff0c;之后依次点击Tools&#xff0c;Bill of Materials。 2、当然&#xff0c;也可以点击图标进行bom导出。 3、下图标出的地方可以自行修改&#xff0c;最后点击O…

设计师必须知道的 5个设计灵感网站

设计没灵感&#xff0c;一定要上这5个网站&#xff0c;设计师每天必逛&#xff0c;建议收藏&#xff01; 设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYwNDUx 国内灵感网 1、设计之窗 http://www.333cn.com/ 设计之窗是一个设计师分享作品及备案的网站&…

【Ctfer训练计划】——命令执行的解题技巧(持续更新中)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

什么是软考?软考有什么作用?

一、软考是什么&#xff1f; 1.软考介绍 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试是由国家人力资源和社会保障部、工业和信息化部领导的国家级考试&#xff0c;其目的是&#xff0c;科学、公正地对全国计算机与软件专业技术人员进行职业资格、专业技术…

保姆教程系列三、Redis高可用(Cluster集群模式)

系列文章目录 &#xff01;&#xff01;&#xff01;是的没错&#xff0c;胖友们&#xff0c;保姆教程系列又更新了&#xff01;&#xff01;&#xff01; 保姆教程系列一、Redis部署 so easy 保姆教程系列二、Redis高可用&#xff08;主从同步哨兵模式&#xff09; 保姆教程系…

java开发的医院体检预约系统

简介 体检项目预约网站&#xff0c;普通用户注册登录可以网上预约体检项目&#xff0c;经过后台人员审核后可以去体检。用户还可以记录自己的身体指标下载体检报个&#xff0c;查看医嘱等。医院后台可以进行权限管理&#xff0c;实现多角色管理后台的其他业务等&#xff0c;实…

前端—化繁为简

化繁为简 HTML5要的就是简单、避免不必要的复杂性。HTML5的口号是“简单至上&#xff0c;尽可能简化”。因此&#xff0c;HTML5做了以下改进&#xff1a; 以浏览器原生能力替代复杂的JavaScript代码。 新的简化的DOCTYPE。 新的简化的字符集声明。 简单而强大的HTML5API。 我…

【 shell 编程 】第2篇 判断

判断 文章目录判断一、条件测试二、流程控制1.单分支结构2.双分支结构3.多分支结构4.嵌套结构三、匹配模式一、条件测试 格式&#xff1a; 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 格式3&#xff1a;[[ 条件表达式 ]] 注意&#xff1a;[] 中的条件…