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

news/2024/7/6 13:41:53 标签: 数据库, 汇编

文章目录

  • 一、汇编格式
    • 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.niftyadmin.cn/n/5132991.html

相关文章

第三次ACM校队周赛考核题+生活随笔

本周ACM校队周赛考核题 1.简单数学(签到题) 题目: Joker想要买三张牌,但是三张牌太少了,老板不卖,除非Joker算出老板给出的数学题。 现在老板给出t组数据,每一组数据有三个数a,b,c&#xff0c…

MySQL数据库 #5

文章目录 一、Python操作MySQL1.pymysql的基本操作2.pymysql补充说明1.查看补充2. 增删改,自动确认 3.SQL注入问题1.输入对的用户名就可登录2.输入错的用户名也可以登录针对上述的SQL注入问题,核心在于手动拼接了关键数据 二、视图1.什么是视图2. 为什么…

12、SpringCloud -- redis库存和redis预库存保持一致、优化后的压测效果

目录 redis库存和redis预库存保持一致问题的产生需求:代码:测试:优化后的压测效果之前的测试数据优化后的测试数据redis库存和redis预库存保持一致 redis库存是指初始化是从数据库中获取最新的秒杀商品列表数据存到redis中 redis的预库存是指每个秒杀商品每次成功秒杀之后…

深度强化学习用于博弈类游戏-基础测试与说明【1】

深度强化学习用于博弈类游戏-基础【1】 1. 强化学习方法2. 强化学习在LOL中的应⽤2.1 环境搭建2.2 游戏特征元素提取1)小地图人物位置:2)人物血量等信息3)在整个图像上寻找小兵、防御塔的位置4)自编码器提取 3. 策略梯度算法简介参考资料 1. 强化学习方法…

2.11、自定义图融合过程与量化管线

introduction 介绍如何自定义量化优化过程,以及如何手动调用优化过程 code from typing import Callable, Iterableimport torch import torchvisionfrom ppq import (BaseGraph, QuantizationOptimizationPass,QuantizationOptimizationPipeline, QuantizationSetting,Tar…

yolov5的pqt、qat量化---1(知识准备工作)

1、Pytorch-Quantization简介 PyTorch Quantization是一个工具包,用于训练和评估具有模拟量化的PyTorch模型。PyTorch Quantization API支持将 PyTorch 模块自动转换为其量化版本。转换也可以使用 API 手动完成,这允许在不想量化所有模块的情况下进行部分量化。例如,一些层可…

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

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