第八十三天学习记录:计算机硬件技术基础:汇编语言程序设计

news2024/11/15 8:57:34

一、汇编语言指令

汇编语言的语句是在指令系统的基础上形成的,按其作用与编译情况分为两大类:指令性语句(符号指令)和指示性语句(伪指令)。
指令性语句是可执行语句,与机器指令相对应,它命令CPU进行某种操作,其功能由硬件完成。指示性语句是说明性语句,无对应的机器指令,它仅为汇编程序提供编译信息,为连接程序提供连接信息,其功能是由相应的软件完成。
指令性语句和指示性语句的格式基本相同,分别为:
标号: 符号指令 ;注释
变量名 伪指令 ;注释
在指令性语句中,标号不是必须的,通常是当某条指令被作为转移指令的目标时,才在该条指令前加上标号,标号和指令之间必须用冒号间隔。

1、基本语法成分

1、名字
名字用来标识一定的语法成分,有系统规定与用户定义两类。
(1)标号和变量
标号是一个用冒号引入的名字,只可能出现在某一个代码段中,它代表指令地址,为转移指令提供了转移目标。变量是以存储器中一个数据或数据区的符号表示,它通常被定义在数据段、附加段或堆栈段,代表内存操作数的存储地址,或者说变量名就代表某个单元。
标号和变量都有3个属性,即:
①段属性
②偏移属性
③类型属性
(2)常量
常量在汇编时已有确定的值,它有立即数、字符串常数和符号常数三种形式。
2、运算符
(1)数值运算符
①算术运算符
②逻辑运算符
③关系运算符
EQ(等于)、NE(不等于)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)。
(2)修改属性的运算符
汇编语言提供了PTR运算符。
类型说明符 PTR 地址表达式
类型说明符有:BYTE(字节),WORD(字),DWORD(汉字),FAR(远),NEAR(近)。
在汇编语言中,PTR运算符的概念与高级语言中有些不同。通常情况下,汇编语言中使用地址寻址方式来访问内存中的数据,而PTR运算符的作用就是将数据的地址传递给指针变量,以便在汇编程序中能够使用指针变量来操作内存中的数据。
不同的汇编语言中,PTR运算符的语法可能有所不同。例如,在x86汇编语言中,PTR运算符使用方括号"[]"来表示,其格式为:

MOV BX, [PTR WORD_VAR]

上面的代码使用PTR运算符获取一个名为WORD_VAR的变量的地址,并将其存储到BX寄存器中。注意,方括号"[]"是PTR运算符的一部分,它表示将括号内的内容解释为内存地址,从而能够操作存储在该地址处的数据。

需要注意的是,在汇编语言中,变量的地址通常使用段地址和偏移地址的形式表示,因此在使用PTR运算符时需要考虑到这一点。
(3)返回属性或数值的运算符
①SEG运算符
格式:SEG 变量名或标号
功能:计算出变量名(或标号)的段基址
②OFFSET运算符
格式:OFFSET 变量名或标号
功能:计算出变量名(或标号)的地址偏移量
③TYPE运算符
格式:TYPE 变量名或标号
功能:计算出变量或标号的类型,对于字节型变量,返回值为1;字形变量返回值为2;双字形变量返回值为4.
④$运算符:$运算符返回汇编计数器的当前值,具体用法见“字节定义伪指令”。
(4)方括号运算符和地址表达式 用方括号括起来的地址表达式是访问内存操作数常用的寻址方式。方括号的另一个用途是表示数组的下标,下标可以是常数、算术表达式、16位寻址方式表达式。

2、伪指令

1、数据定义伪指令
包括DB,DW,DD,用于定义变量并分配存储区。
(1)字节定义伪指令
格式:变量名 DB 一串用逗号间隔的字节数据
功能:将所定义的字节型数据转换成二进制数,并从指定的变量单元开始依次存放。
(2)字定义伪指令
格式:变量名 DW一串用逗号间隔的字形数据
功能:将所定义的字形数据从指定的变量单元开始依次存放,每一个字形数据的存放规律是:低位字节存入低地址单元,高位字节存入高地址单元。
(3)双字定义伪指令
格式:变量名 DD一串用逗号间隔的双字形数据
功能:把DD定义的数从指定的变量名开始依次存放,每一个数占4个单元,每一个数的存放规律也是低位字节存入低地址单元,较高字节存入较高的地址单元。
2、符号定义伪指令
(1)等值伪指令
格式:变量名 EQU 表达式
功能:将表达式的值赋给一个变量。
(2)等号伪指令
格式:变量名=表达式
3、段定义伪指令
(1)SEGMENT和ENDS伪指令
使用SEGMENT和ENDS定义一个段的格式:
段名 SEGMENT 定位参数 链接参数 ‘分类名’
段定义体
段名 ENDS
①定位参数:
BYTE表示字节地址:即该逻辑段的目标代码可以从任意地址开始依次存放。
WORD表示字地址:即该逻辑段的目标代码,从偶地址开始依次存放。
PARA(或者缺省)表示节地址(一节等于16B):即该逻辑段的目标代码,从一个能被16整除的地址开始依次存放。
PAGE表示页地址:即该逻辑段的目标代码,从一个能被256整除的地址开始依次存放。
②链接参数:
PUBLIC、MEMORY、COMMON、STACK、AT表达式、当段定义中缺省段属性参数时,表明该段是一个独立的逻辑段。
③’分类名’:分类名是程序员任选一个字符串,使用时必须用单引号括起来,分类名可有可无。
(2)ASSUME伪指令
格式:ASSUME 段寄存器名:段名,段寄存器名:段名,……
功能:ASSUME 语句通知汇编程序,寻址逻辑段使用哪一个段寄存器。
(3)ORG伪指令
格式:ORG 数值表达式
功能:用以规定目标程序或数据区起始存放单元的偏移量。
4、过程与宏定义伪指令
(1)过程定义伪指令
过程又称子程序,是程序的一部分,它必须用RET作为返回指令,用过程定义语句为子程序定界。
(2)宏定义伪指令
宏的概念与过程很相似。
(3)条件汇编伪指令
(4)源程序结束伪指令

二、汇编语言程序设计方法

(1)明确任务
(2)绘流程图
(3)分配内存工作单元和寄存器
(4)编程与调试

1、分支结构程序设计

(1)简单分支结构程序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、多路分支结构程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、循环程序设计

1、单重循环程序
在这里插入图片描述
在这里插入图片描述
2、多重循环程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、子程序设计

1、子程序的调用和返回
子程序的调用和返回使用CALL指令和RET指令来完成。
2、子程序的参数传送
子程序使用中,要解决的一个重要问题是参数传送。
①利用寄存器传送参数。
②利用堆栈传送参数。
③利用内存单元传送参数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、子程序嵌套与递归
(1)子程序嵌套
(2)递归子程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

DOS及BIOS功能调用

1、DOS中断及功能调用
(1)DOS专用中断
(2)DOS可调用中断
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、BIOS中断调用
(1)键盘I/O中断调用
在这里插入图片描述
(2)打印机I/O中断调用
在这里插入图片描述
(3)显示I/O中断调用
在这里插入图片描述

5、模块化程序设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、汇编语言程序设计举例

1、数值计算

1、多字节减法运算
例4.16试计算两个组合的4 bit BCD码数之差。设参加运算的两个操作数分别存放在以DAT1和DAT2为首地址的存储单元中,结果存放在RESULT单元,数据存放形式为低前高后。
在这里插入图片描述
2、多字节乘法运算
在这里插入图片描述

2.代码转换

1、十进制码到二进制码的转换
在这里插入图片描述
在这里插入图片描述
2、二进制码与ASCⅡ码之间的转换
在这里插入图片描述

			MOV   AH ,4CH     ;返回DOS
			INT   21H
	CODE	ENDS
			END	  START

3、字符数据处理

1、字符的查找
在这里插入图片描述
在这里插入图片描述
2、字符的删除
在这里插入图片描述
在这里插入图片描述
汇编语言指令的作用是什么?
汇编语言指令用于编写底层的机器指令,它们直接操作计算机的硬件和寄存器。汇编语言是一种低级语言,更接近计算机硬件和体系结构。

汇编语言指令的主要作用包括以下几个方面:

控制流:汇编语言指令可以实现程序的控制流,如条件分支(比如if语句)、循环(比如while循环)和跳转(比如goto语句)。这些指令根据特定的条件或标志来改变程序执行的路径。

数据操作:汇编语言指令可以对数据进行各种操作,例如加载数据到寄存器中、从寄存器写回内存、在寄存器之间进行算术运算(如加法、减法等)以及逻辑运算(如与、或、非等)。

存取内存:汇编语言指令可访问计算机的内存,读取和写入数据。通过指定内存地址和使用不同的访存模式,可以读取或修改内存中的数据。

处理中断和异常:汇编语言指令用于处理计算机硬件产生的中断和异常。通过设置中断向量表和编写相应的中断处理程序,可以响应外部事件(如硬件设备的信号)或异常情况(如除法错误或缺页异常)。

操作系统调用:汇编语言指令可进行操作系统调用,使程序能够与操作系统进行交互。通过操作系统提供的接口,可以实现文件操作、网络通信、进程管理等功能。

汇编语言指令充当了高级语言和计算机底层硬件之间的桥梁,它们负责将高级语言编写的代码转化为机器指令,直接与计算机硬件进行交互和控制。

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

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

相关文章

USB转换方案介绍

随着科技的不断发展,我们的生活中出现了越来越多的电子设备。然而,这些设备通常具有不同的连接端口和协议,这可能会使它们之间的连接变得困难。这时候,使用USB转换就成为了一种非常方便和实用的解决方法。 无论是在家庭、办公室还…

自动化测试——处理场景自动化测试场景详细,跟着上高速

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、定位一组对象 …

城市消防应急通信三级作战网构建

项目背景 随着我国《消防信息化“十三五”总体规划》对消防信息化的发展规划做了统一部署,以城市为代表的消防通信成为专网通信行业重点关注的领域之一。目前,我国城市化发展面临高层建筑林立、地铁、人防工程分布密集,大型综合体不断涌现&a…

【运维】服务器系统安装 -- 服务器版

目录 一、环境 二、ubuntu 三、启动u盘制作 Stage 1:下载balena,制作U盘启动工具 Stage 2:下载Ubuntu 系统镜像(参考上一节:Ubuntu 22.04.2 LTS ) Stage 3:将镜像写入到U盘 四、设置开启…

FUZZ工具—Boofuzz框架实际使用

接着上一篇文章FUZZ工具—Boofuzz框架来对框架进行实际的使用; 官方提供了很多案例模板,且网上关于boofuzz的使用介绍很多,也比较成熟,在各个领域都有,可以通过官方提供的案例也看得出来,然后覆盖的面也非常…

西门子变频器G120XA的快速调试方法分享

以西门子变频器G120XA为例,接着为大家介绍一下G120X和G120XA系列变频器的快速调试方法。 西门子发布的Sinamics G120X和G120XA系列变频器,专为风机和泵的应用而设计,实现高效节能、可靠稳定和简单易用。以G120XA为例,通过下面的调…

locust学习教程(9)- event 事件

目录 1、对请求的测试前置、后置处理 2、在web界面添加新内容 3、监听测试的失败率或阀值 4、汇总总结 ​🎁更多干货 1、对请求的测试前置、后置处理 请求有一个上下文参数,通过数据有关的请求(之类的用户名,标签等&#xff…

双路高速 DA 实验

目录 双路高速 DA 实验 1、简介 2、实验任务 3、程序设计 3.1、hs_dual_da顶层模块代码 3.2、ROM 波形存储模块(rom_1024x10b) 创建单端口 ROM IP核 3.2、DA 数据发送模块(da_wave_send)代码 4、硬件设计 4.1、添加.xdc…

MongoDB数据库安装

MongoDB数据库 MongoDB数据的特点: 面相文档存储的分布式数据库 具有很强的扩展性 支持丰富的查询表达式,很接近于关系性数据库 使用类似于json的结构保存数据,可以轻易的查询到文档中内嵌的对象及数组 下载安装包 首先去官网下载安装…

用JAVA写一个下载器第2集

文章目录 一、开发环境及工具二、包名概览三、项目结构四、使用步骤1.编写代码Constant.java:Downloader.javaDownloaderTask.javaDownloadInfoThread.javaFileUtils.javaHttpUtils.javaLogUtils.javaMain.java 2.运行程序 总结 一、开发环境及工具 开发环境及工具…

如果开发说这不是Bug,你会怎么处理?

在项目过程中,如果开发说这个不是Bug,你的第一反应是什么? 不同的人有不同的处理方式,也许是如下几点:相信开发说的,开发说什么就是什么,问题关闭;自己不能决定,啥都上升…

GP232RNL——USB到UART桥接控制器

GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异…

日撸java三百行day69-70

文章目录 说明day69-70 矩阵分界1.基于矩阵分解的推荐系统(Funk-SVD算法)2.随机梯度下降(SGD)2.1 导数2.2 偏导数2.3 方向导数2.4 梯度2.5 随机梯度下降,与损失函数之间的关系 3.代码理解3.1 train() 方法3.2 mae方法&…

神经网络原理(2)

斯坦福大学的印度学生、机器学习爱好者 PararthShah 在2012年12月22日的使用买芒果的例子解释了神经网络,简单来说就是:如果你需要选芒果,但不知道什么样的芒果最好吃,一个简单粗暴的方法是尝遍所有的芒果,然后总结出个…

窗口函数之-前后函数(lag/lead)

窗口函数之-前后函数 应用:求同比增长、环比增长 lead(expression,n):返回当前行的后n行 > shift(-n) 数据超前n阶,与之对齐的就是后n行的数据lag(expression,n):返回当前行的前n行> shift(n)数据滞后n阶,与之对齐的就是前n行的数据 …

人工智能轨道交通行业周刊-第49期(2023.6.12-6.25)

本期关键词:设备智能维修、故障诊断、无人机巡查、车站联锁、LangChain、腾讯大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMe…

高效进行接口测试,简单易懂!

目录 前言 正文 1.Api文档导入 2.后端接口测试 3.mock数据 4.测试集接口自动化 总结 前言 日常测试过程中,常常需要多种工具来接力完成自己的接口测试任务。 比如说, 使用swagger查看接口文档, 使用mock编造接口数据对前端页面做测试…

面对高速PCB设计,你是否也有这些疑问?

在现代电子产品设计中,高速PCB设计是很重要的组成部分,然而由于高速信号的特殊性和复杂性,很多电子工程师在进行高速PCB设计时难免面临各种挑战及问题,那么面对这些挑战及问题,该如何解决? 1、添加测试点是…

管线业务模块实现

文章目录 1 .配电线路轨迹图2 )单线图存储功能3. 设备接线图1 )剖面绘制 电力管线业务模块是系统的电力业务功能,主要维护电气设备的电力连接关系以及电 缆在GIS 地图和工井内部的位置和走向。管线业务模块由配电线路的轨迹图、单线图、接 线…

介绍智能照明系统在绿色建筑中的应用与产品选型

【摘要】:智能照明系统应用在智能建筑中不仅能营造出舒适的生活、工作环境以及现代化的管理方式而且要具有一定的节能效果。给出了智能照明和传统照明系统的比较并分析了智能照明系统的节能。 【关键字】:智能建筑;智能照明;节能…