微机原理:汇编语言程序设计

news2024/11/25 12:48:22

文章目录

  • 一、汇编格式
    • 1、文字简述
    • 2、代码表述
  • 二、汇编语言结构说明
    • 1、方式选择伪指令
    • 2、段定义语句
    • 3、段约定语句
    • 4、汇编结束语句
    • 5、返回DOS语句
  • 三、实例
    • 1、例子
    • 2、汇编语言程序开发过程
  • 四、功能调用
    • DOS功能调用
      • 1、功能号01H
      • 2、功能号02H
      • 3、功能号09H
      • 4、功能号0AH
      • 5、举例
    • BIOS功能调用
      • 1、功能号00H
      • 2、功能号01H
      • 3、功能号0EH(文本)
      • 4、功能号13H

前言:本章我们就学习,如何汇编?大家对前面几章的学习,应该对于汇编代码有了一个初始的印象。

一、汇编格式

1、文字简述

一个完整的汇编语言源程序在结构上必须做到以下几点:

  • 用方式选择伪指令说明执行该程序的微处理器类型;
  • 用段定义语句定义每一个逻辑段;
  • 用ASSUME语句说明段约定;
  • 用汇编结束语句说明源程序结束。

2、代码表述

完整段定义格式:

.586               ;方式定义
DATA SEGMENT USE16 ;定义数据段
;....
DATA ENDS
CODE SEGMENT USE16  ;定义代码段
ASSUME CS:CODE,DS:DATA  ;说明段约定
BEG:MOV AX,DATA ;BEG为启动地址
    MOV DS,AX
	;....
    MOV AH,4CH
    INT 21H ;返回DOS
CODE ENDS
END BEG     ;汇编结束

:在汇编中,冒号后面表示注释内容。

二、汇编语言结构说明

1、方式选择伪指令

功能:通知汇编程序,源程序经过汇编链接后生成哪一种CPU类型的机器指令
应用:源程序第一条指令,指令以句号开头
例如.586
说明:不设置方式选择伪指令与设置.8086是等价的。
在这里插入图片描述

2、段定义语句

格式

段名 SEGMENT  定位参数链接参数'分类名' 段长度
段体
段名 ENDS

功能:是逻辑段的定界语句,源程序中每一个逻辑段都必须用定义语句定界

段名:无特别限制,只是为了说明,但通常便于阅读,我们通常会把DATA作为数据段的段名,用STACK作为堆栈段的段名,CODE为代码段的段名。
在这里插入图片描述

3、段约定语句

格式:ASSUME 段寄存器:段名,…,段寄存器:段名
功能:ASSUME语句通知汇编程序,寻址逻辑段使用哪一个寄存器
在这里插入图片描述

4、汇编结束语句

格式1:END 程序的启动地址标号
例如:END BEGIN
功能:通知汇编程序,源程序到此结束,用BEGIN作为标号的指令是程序的启动指令。
在这里插入图片描述
格式2:END
功能:通知汇编程序,源程序到此结束。在模块化程序的子模块中,必须用次格式作为源程序的最后一条语句。

5、返回DOS语句

程序在完成预定任务之后,必须返回DOS,返回DOS最常用的方法是使用DOS系统4CH功能调用,即连续执行以下2条指令:

MOV AH,4CH
INT 21H

三、实例

1、例子

题目:加法程序实现46H+52H,并将运算结果存在在数据段SUM中。
思路:先在数据段中定义一个随机字节,在代码段中,先将46H赋值一个通用寄存器,之后实现ADD相加指令,最后赋值给SUM。

.586
DATA SEGMENT USE16
SUM DB ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
SEG:MOV AX,DATA
    MOV DS,AX
    MOV AL,46H
    ADD AL,52H
    MOV SUM,AL
    MOV AH,4CH
    INT 21H
CODE ENDS
END SEG

注意:这里最后无输出,因为我们在这里只是做了相加后,存入数据段中,并没有显示在屏幕的功能。

2、汇编语言程序开发过程

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

四、功能调用

通过对DOS/BIOS调用,可以实现一些功能。
了解一下:
在这里插入图片描述

DOS功能调用

格式

MOV AH,功能号
设置入口参数
INT 21H
分析出口参数

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

1、功能号01H

作用:等待输入一个字符,有回显,以该字符的ASSCII码输出在屏幕上。
入口参数:无
出口参数:AL=按键的ASCII码。若AL=0,表明按键时功能键,需再次调用本功能,才能返回按键的扩展码。
举例

MOV AH,1
INT 21H

2、功能号02H

作用:显示一个字符
入口参数:DL=待显字符的ASCII码
出口参数:无
举例

MOV DL,41H ;显示‘AMOV AH,2
INT 21H

注意:该项功能会破坏AL寄存器的内容

3、功能号09H

作用:显示字符串
入口参数:DS:DX=字符首地址,字符串必须以‘$’为结束标志符。
出口参数:无
举例

.586
DATA SEGMENT USE16
MESG DB 'I AM HERE$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
    MOV AX,DATA
    MOV DS,AX
LAST:
    MOV AH,9
    MOV DX,OFFSET MESG
    INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEG

大家可以看出来,利用9号功能调用时候,需要把字符串的偏移地址送到DX里面。

4、功能号0AH

作用:等待键入一串字符送用户程序数据缓冲区,并保存在缓冲区里,同时在屏幕上显示字符串。
入口参数
DS:DX=输入字符的缓冲区的首地址
在这里插入图片描述

5、举例

题目:询问用户姓名并等待用户键入,用户输入姓名后敲击回车键,程序再把键入的姓名复制到屏幕上。

.586
DATA SEGMENT USE16
MESG DB 'WHAT IS YOUR NAME? $'
BUF  DB 30
     DB ?
     DB 30 DUP(?)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
    MOV AX,DATA
	MOV DS,AX
AGAIN:
    MOV AH,9
	MOV DX,OFFSET MESG
	INT 21H ;询问姓名
	
	MOV AH,0AH
	MOV DX,OFFSET BUF
	INT 21H ;存入内存
	
	MOV BL,BUF+1
	MOV BH,0 ;实际键入字符个数给BX
	
	MOV SI,OFFSET BUF+2
	MOV BYTE PTR[BX+SI],'$'
	
	MOV AH,2
	MOV DL,0AH ;换行
	INT 21H
	
	MOV AH,9
	MOV DX,OFFSET BUF+2
	INT 21H
	
	MOV AH,4CH
	INT 21H
CODE ENDS
END BEG	
	

BIOS功能调用

1、功能号00H

在这里插入图片描述

2、功能号01H

在这里插入图片描述

3、功能号0EH(文本)

格式如下:
在这里插入图片描述
在这里插入图片描述

4、功能号13H

在这里插入图片描述

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

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

相关文章

操作系统——二级页表(王道视频p50)

1.总体概述: 2.二级页表的工作原理——如何实现一个逻辑地址到物理地址的转换 具体工作原理(有一个地方没有弄明白——就是到底是如何通过顶级页表找到 二级页表项的?)

el-input 给icon图标绑定点击事件

选择suffix-icon&#xff0c;添加点击事件 <temeplate><el-form-item :label"$t(company[Company address])" prop"address"><el-input v-model"enterpriseForm.address"><i slot"suffix" class"el-icon-m…

联邦学习与推荐系统

[Personalized Federated Recommendation via Joint Representation Learning, User Clustering, and Model Adaptation] (https://dl.acm.org/doi/abs/10.1145/3511808.3557668) CIKM2022(CCF-B) 论文精读 Abstract 联邦推荐的背景&#xff1a;联邦推荐使用联邦学习技术在推…

四十、【进阶】索引失效情况2

1、or的使用 在使用索引查询时&#xff0c;如果使用了or&#xff0c;会出现以下情况&#xff1a; &#xff08;情况一&#xff09;or左边是索引查询&#xff0c;or右边不是索引查询 结果&#xff1a;索引查询失效 &#xff08;情况二&#xff09;or左边不是索引查询&#x…

Java字节码技术

Java 字节码简介 Java 中的字节码&#xff0c;英文名为 bytecode, 是 Java 代码编译后的中间代码格式。JVM 需要读取并解析字节码才能执行相应的任务。 从技术人员的角度看&#xff0c;Java 字节码是 JVM 的指令集。JVM 加载字节码格式的 class 文件&#xff0c;校验之后通过 J…

B. Qingshan Loves Strings(贪心规律)

Problem - B - Codeforces 解析&#xff1a; 首先判断 t 字符串是不是相邻不同并且两端不同。 然后遍历 s 并且判断每一个相邻的相同字符&#xff0c;必须 t 字符符合并且两侧不同。 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55…

私有云:【15】Composer安装无法使用cloudadmin进行下去

私有云&#xff1a;【15】Composer安装无法使用cloudadmin进行下去 1、Composer安装提示不支持windows授权2、这时候别退出3、稍微等待一会儿即可安装完成 1、Composer安装提示不支持windows授权 2、这时候别退出 上一步确定完之后&#xff0c;下一步让进行安装&#xff0c;不…

【软件测试02】测试方法

测试方法 学习目标&#xff1a; 1、能对穷举场景设计测试点---等价类划分法 2、能对限定边界规则设计测试点---边界值分析法 3、能对多条件依赖关系进行设计测试点---判定表法 4、能对项目业务进行设计测试点 一、等价类划分法 1、说明&#xff1a;在所有的测试数据中&am…

Spring更加简单的读取和存储对象

前言&#xff1a;在上篇文章中&#xff0c;小编写了一个Spring的创建和使用的相关博客&#xff1a;Spring的创建和使用-CSDN博客&#xff0c;但是&#xff0c;操作/思路比较麻烦&#xff0c;那么本文主要带领大家走进&#xff1a;Spring更加简单的读取和存储对象&#xff01; 本…

【数据结构】数组和字符串(十):稀疏矩阵的链接存储:十字链表的矩阵操作(加法、乘法、转置)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表4.2.3三元组表的转置、加法、乘法、操作4.2.4十字链表0. 十字链表的基本操作1. 矩阵加法2. 矩阵乘法3. 矩阵转置4. 主函数 5. 代码…

linux 系统编程复习07-信号

1 复习目标 了解信号中的基本概念熟练使用信号相关的函数参考文档使用信号集操作相关函数熟练使用信号捕捉函数signal熟练使用信号捕捉函数sigaction熟练掌握使用信号完成子进程的回收 信号介绍 信号的概念 信号是信息的载体&#xff0c;Linux/UNIX 环境下&#xff0c;古老…

【C语言】优化通讯录管理系统

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家优化上一篇的通讯录&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 前言二. 动态通讯录2.1 通讯录结构体2.2 初始化通讯录2.3 增加联系人2.4 销毁通讯…

【需要理解】80 单词搜索

单词搜索 题解1 回溯&#xff08;需要改变起点&#xff09; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内…

数据结构——线性表①(顺序表)

一、线性表定义 线性表是一种数据结构&#xff0c;它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素&#xff0c;除了最后一个元素an外&#xff0c;每一个元素有且只有一个…

IDEA 如何运行 SpringBoot 项目

步骤一&#xff1a;配置 Maven 第一步&#xff1a;用 IDEA 打开项目&#xff0c;准备配置 maven 环境 &#xff0c;当然如果本地没有提前配置好 maven&#xff0c;就用 IDEA 默认的配置即可 配置 maven 步骤 情况 1&#xff1a;如果本地没有配置过 maven&#xff0c;可以保持如…

【Spring】IOC容器与Bean的常用属性配置

文章目录 1.前言2.IOC容器2.1 BeanFactory 容器2.2 ApplicationContext 容器 3.Bean的常用属性配置4. 总结 1.前言 在之前的文章-IOC的快速入门中讲过Bean这个概念. 本来就来介绍容器与Bean的常用属性配置 在Spring框架中&#xff0c;Bean指的是被Spring加载生成出来的对象。 …

ubuntu 18.04 编译安装flexpart 10.4(2023年) —— 筑梦之路

2023年10月29日 环境说明 操作系统版本&#xff1a;ubuntu 18.04 python版本&#xff1a;3.6.9 gcc版本&#xff1a;7.5.0 编译安装路径&#xff1a;/usr/local cmake: 3.10.2 所需要的源码包我已经打包放到我的资源。 2021年1月份已经写过一篇Ubuntu 编译安装的帖子F…

Android OpenGL ES 2.0入门实践

本文既然是入门实践&#xff0c;就先从简单的2D图形开始&#xff0c;首先&#xff0c;参考两篇官方文档搭建个框架&#xff0c;便于写OpenGL ES相关的代码&#xff1a;构建 OpenGL ES 环境、OpenGL ES 2.0 及更高版本中的投影和相机视图。 先上代码&#xff0c;代码效果如下图…

MQ——进阶

文章目录 消息可靠性生产者消息确认消息持久化消费者确认演示none模式演示auto模式 失败重试机制本地重试失败策略 死信交换机初始死信交换机TTL延迟队列安装DelayExchange插件使用DelayExchange 惰性队列消息堆积问题惰性队列 MQ集群集群分类普通集群镜像模式镜像模式的配置 仲…

私有云:【6】VCenter安装SqlServer

私有云&#xff1a;【6】VCenter安装SqlServer 1、VCenter安装SqlServer1.1、通过模板创建虚拟机1.2、安装sqlserver服务 2、搭建sqlserver群集2.1、安装群集功能2.2、在ad域服务器创建共享文件夹&#xff0c;供集群选举使用 3、创建故障转移群集【只需安装一台即可】3.1、创建…