汇编语言程序设计入门

article/2025/10/11 21:10:41

前言:公号 「编程有料」后台回复 “大礼包” 即可获取近1000本助力你编程之路的电子书

汇编语言程序设计

      • 一,汇编语言程序设计概述
        • 1,程序设计语言
        • 2,汇编语言源程序
        • 3,汇编语言程序开发过程
      • 二,汇编语言基本语法(重点)
        • 1,汇编语言的语句类型
        • 2,常量、标识符和表达式
        • 3,汇编语言程序伪指令(重点)
        • 4,DOS系统功能调用(重点)
      • 三,汇编语言程序设计
        • 1,子程序的调用
        • 2,子程序的返回
        • 3,参数的传递

一,汇编语言程序设计概述

1,程序设计语言

  • 机器语言
    用二进制表示,能够被机器直接识别
  • 汇编语言
    采用助记符表示机器指令
  • 高级语言
    接近自然语言

2,汇编语言源程序

汇编语言源程序是程序员根据具体问题的算法,用汇编语言的语句编写的程序文本,通常以 .asm 作为扩展文件名。

汇编语言程序设计中由于开发环境支持不同,可以有完整段程序和简化段程序。

3,汇编语言程序开发过程

  • 基本步骤:

    ①编辑:保存 XXX.ASM

    image-20211127141204289

    ②汇编:生成 XXX.OBJ

在这里插入图片描述

在这里插入图片描述

③连接:生成 XXX.EXE

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

④调试运行

image-20211127141519110

在这里插入图片描述

二,汇编语言基本语法(重点)

1,汇编语言的语句类型

  • 指令性语句:由指令构成,与机器指令一一对应。如:

    START: MOV AX,DATA ;初始化程序段

  • 指示性语句:由命令(伪指令)构成,是程序员发给汇编程序的命令,没有相应的机器指令。如:

    DATA SEGMENT

2,常量、标识符和表达式

  • 常量
    指令中出现的固定值,在程序运行期间不会变化。 分为数字常量、字符常量和符号常量三种(指令中的立即数,MEM直接地址)
  • 标识符
    有特定意义的字符序列,标识符可用作符号常量、名字、变量和标号等。(注意**?**不能单独作为标识符。
  • 表达式
    由操作数(常量、变量、标号)和运算符构成。在汇编时完成相应的运算(数字常数)、(OBJ)目标程序中不存在表达式,应用程序的DEBUG调试中不可能看到任何表达式。

3,汇编语言程序伪指令(重点)

  • 程序结束伪指令

    格式:END 标号

    说明:标号为程序中第一条指令性语句标号

  • 段定义伪指令

    • 1,段定义语句

    8086分段访问存储器。

    格式:

    段名 SEGMENT [定位方式] [组合方式] [‘类别名’]

    段名 ENDS

    • 2,段寄存器说明伪指令
      格式:ASSUME 段寄存器:段名1,段寄存器:段名2…

      说明:在代码段,告诉汇编程序CS、DS、ES、SS 应具有的符号段基址,但是段寄存器(CS除外)还必须用传送指令赋值。一般紧跟在SEGMENT语句之后。

  • 过程定义的伪指令

    格式:
    过程名 PROC NEAR[FAR]

    过程名 ENDP
    说明:NEAR 近过程(主、子同段)
    FAR 远过程(主、子在两个不同的代码段)

  • 数据定义伪指令

    数据定义语句用来为数据分配存储单元,数据段、附加段和堆栈段都是存放数据的,其中所用的语句主要是数据定义语句。

    • 命令:表示符号及功能如下
    DB字节(8位)一个字节存储单元
    DW(16位)两个连续字节存储单元
    DD双字(32位)四个连续字节存储单元
    DQ双字(64位)8个连续字节存储单元
    DT双字(80位)10个连续字节存储单元
    • 参数

      相应内存单元中的数据,可以是数字常量、字符常量或符号常量,当它是保留时就以问号(?)表示。参数可以有多个,相互间用逗号(,)隔开,若连续多个数据是重复的,可用复制符DUP 以简化书写,DUP的用法为:

      赋值次数 DUP(数据)

      例如:ARRAY DB 10 DUP(12H)

  • 符号定义伪指令

    • (1) 应用命令EQU和PURGE

      格式:符号常量 EQU 表达式
      说明:如需对已赋值的名字赋以新值,则先用PURGE语句撤销原赋值,其格式为:
      PURGE 名字
      PURGE 可同时撤销几个已赋值。

      例如:

      COUNT EQU 20
      ADD AX,COUNT
      PURGE COUNT
      COUNT EQU 30
      ADD AX,COUNT
      
    • (2)应用命令“=”
      格式:符号常量=表达式
      说明:其功能与EQU 类似,唯一的区别是命令 “=” 可随时对名字赋新值,而不必使用PURGE命令。

      例如:

      COUNT=20
      ADD AX,COUNT
      COUNT=30
      ADD AX,COUNT
      
  • 变量

    • (1) “$” 的含义

      DATA	SEGMENT
      ARRAY DB 10H, 5AH, 0C7H, 98H, 'ABCD'
      COUNT EQU $-ARRAY
      MAX	DB 12H
      DATA	ENDS

      说明:$表示该行的偏移地址,此处COUNT 表示ARRAY 有多少个元素。

    • (2) 变量的五种属性

      • 段基址
      • 偏移地址
      • 符号名的类型值
      • 长度属性
      • 规模属性
    • (3) 类型指定运算符 PTR

      格式:类型 PTR 表达式
      说明:类型可以是BYTE、WORD、DWORD、NEAR、FAR
      作用:按PTR 前面指定的类型去寻址

      例:INC BYTE PTR [2000H]

4,DOS系统功能调用(重点)

什么叫DOS 系统功能调用

为提高汇编程序的编程效率,减少重复开发过程,MS-DOS操作系统内置了几十个子程序,这些子程序能够完成大量底层功能,用户程序可以通过软中断的方式使用这些子程序,软中断号为21H。指令为INT 21H。

  • DOS 系统功能子程序使用的基本要求有:

    1)传送入口参数到指定寄存器中;

    2)调用子功能的功能编号放在AH 寄存器中;

    3)执行INT 21H指令。

    • 1、键盘单字符输入(1号)

      MOV AH,1
      INT 21H
      功能:等待从键盘输入一个字符。
      返回:(AL)=ASCII 码,并回显在显示器上。

    • 2、输出单字符(2号)

      MOV DL,‘A’

      MOV AH,2

      INT 21H
      功能:将DL中字符从屏幕上输出。

      返回:无返回

    • 3、输出字符串(09号)

      MOV DX,OFFSET BUF

      MOV AH,09

      INT 21H
      功能:BUF中以’$'为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。

    • 4、键盘输入字符串 (OAH号)

      MOV DX,OFFSET BUF

      MOV AH,0AH

      INT 21H

      功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。
      键盘缓冲区定义:
      BUF DB 81 ;缓冲区的大小
      DB? ;实际输入的字符个数
      DB 80 DUP(?) ;字符串存放区

    • 5、返回操作系统(4CH)

      MOV AH,4CH

      INT 21H
      功能:将控制权交给操作系统。

三,汇编语言程序设计

1,子程序的调用

格式:CALL 过程名(子程序地址)

功能:

  1. 下条指令的地址压入堆栈。

主子同段(段内调用):只将IP的值压入堆栈

段间调用:先将CS的值压入堆栈,再将IP的值压入堆栈。

  1. 转入子程序运行(子程序的地址送入CS: IP)

2,子程序的返回

格式:RET

说明:子程序的最后一条指令,用于返回CALL指令的下条指令继续执行。无论对哪一种调用方式其返回指令都相同。
功能:

  1. 段内调用只将当前[SP] 弹进IP,从而使程序正常返回。
  2. 对于段间调用则先弹IP,再弹CS。

3,参数的传递

主程序调用子程序必须传递入口参数,子程序返回必须传递出口参数。

常用的方法有:

  • 寄存器:适用于参数少的情况。
  • 约定单元:适用于参数多的情况。要事先建立参数数据缓冲区。
  • 堆栈:适用于参数较多,且子程序嵌套,递归调用的情况。

http://chatgpt.dhexx.cn/article/kTelExiE.shtml

相关文章

手把手教你学习汇编语言——从入门到起飞

专接本交流群:1051749714 (有什么问题欢迎进群讨论) 关于这篇博客,笔者会尽量用最简单的方式教会大家汇编语言以便应付各种考试 有什么不足的忘大佬评论或私信指出。 汇编环境安装 汇编运行调试 汇编指令 希望大家看完这些找一些…

小白的入门之——汇编语言程序设计教程

目录 第一章 基础知识 1.1汇编语言的特点 1.2计算机中数据表示的特点 【BCD码表示法(Binary Coded Decimal)】 【定点数】 —原码表示法— —反码表示法— —补码表示法— 浮点数 1.3 ​​​​​​计算机的数据存储 寄存器 存储器 数据在主…

汇编入门基础

1.什么是汇编语言? 汇编语言就是低级语言,直接描述/控制 CPU 的运行,我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来&…

汇编语言入门教程

一、汇编语言是什么 ​ 汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令00000011写成汇编语言就是ADD 二、前置知识——寄存器 ​ 1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去…

南邮《汇编语言程序设计》期末复习 CH3: 汇编语言指令集

本文转载自厉害的 孔姐姐 的 博客 。 由一只孔姐姐的小迷弟负责排版和整理~ 一、基本概念 1.指令:单个的 CPU 操作,通知 CPU 执行某种操作的 “命令” 指令集:所有指令的集合 机器指令:用二进制序列(0、1&#xff09…

汇编语言程序格式

1 逻辑段 汇编语言源程序由一个或多个逻辑段组成。 ❖ 一个程序中可以有几个同一类型的逻辑段。 ❖ 必须至少有一个代码段。 [注]源程序分段的目的在于程序结构清晰、便 于内存分配,寻址方便,一个源程序需要设置 几个段应根据具体…

汇编常用指令

通用寄存器及使用 IA-32系列有8个32位通用寄存器&#xff0c;名称分别为&#xff1a;EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI&#xff0c;如图&#xff1a; 简单传送指令 指令中文名格式解释备注MOV传送指令MOV DEST,SRCDEST<SRCXCHG交换指令XCHG OPER1,OPER2把操作数oper1的内容…

第一章 汇编语言和汇编指令

【用最少的指令来实现功能】 自用 文章基于《计算机体系结构新讲》&#xff08;中国地质大学出版社&#xff09; 目录 一、汇编指令 &#xff08;1&#xff09;MIPS汇编指令示例解析 &#xff08;2&#xff09;MIPS指令集 二、汇编指令中的操作数 &#xff08;1&#xff0…

pic单片机汇编 c语言,PIC单片机汇编语言指令详解

PIC单片机汇编语言指令详解 pic单片机为最常用单片机之一&#xff0c;许多程序均基于pic单片机进行开发。因此&#xff0c;熟练pic单片机编程尤为重要。为保证大家能准确、熟练掌握pic单片机的使用&#xff0c;本文特带来pic单片机的各种汇编语言指令的讲解。 一、pic的指令系统…

汇编:汇编指令分类

文章目录 一、指令分类二、伪指令1、assume2、segment、ends3、end 三、汇编指令1、退出程序指令2、中断2.1、概念2.2、中断的分类2.3、本质2.4、中断指令 3、call、ret 四、指令处理的数据长度 使用汇编语言编写一个完整的程序&#xff0c;步骤大致如下&#xff1a; 1、编写源…

汇编语言指令及七种寻址方式指令实现

指令讲解 进入debug模式后&#xff1a;&#xff08;进入debug模式之前的讲解 可以参考我的另一篇博文&#xff1a;masm5.0运行 -u::显示机器指令和汇编指令 -d:显示的具体数据 内存单元内容查看 -r:查看寄存器内容 -r&#xff1a;修改寄存器的内容 如修改ax寄存器的值为12…

微机原理之汇编语言指令集

汇编语言指令集 1.1 概述1.1.1 指令集体系结构、机器指令和符号指令1.1.2 符号指令的书写格式 1.2 操作数1.2.1 通用寄存器中的操作数1.2.2 段寄存器和指令指针寄存器1.2.3 标志寄存器 1.3 寻址方式1.3.1 立即寻址1.3.2 寄存器寻址1.3.3存储器操作数寻址1.3.3.1 直接寻址1.3.3.…

MIPS汇编语言指令

MIPS汇编语言指令 寄存器指令集指令格式R型指令I型指令J型指令 寄存器 寄存器在MIPS体系结构中有32个通用寄存器&#xff0c;在汇编程序中可以用编号表示&#xff0c;$0~31 &#xff0c; 也 可 以 用 名 称 表 示 &#xff0c; 如31&#xff0c;也可以用名称表示&#xff0c;如…

汇编常见指令

文章目录 常见的运算类汇编指令add指令sub指令mul乘法指令div除法指令inc&#xff08;自增&#xff09;&#xff08;即C语言&#xff09;dec&#xff08;自减&#xff09;&#xff08;即–&#xff09;push&#xff08;入栈&#xff09;pop&#xff08;出栈&#xff09;and&…

log4j的ConversionPattern

log4j的ConversionPattern参数的意义 http://lizhou.iteye.com/blog/939154 博客分类&#xff1a; java log4j 多线程 Apache Tomcat F# &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&am…

log4j的ConversionPattern参数的意义

1、常用标志&#xff1a; &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&#xff0c;FATAL, %d: 输出日志时间点的日期或时间&#xff0c;默认格式为ISO8601&#xff0c;也可以在其后指定…

conversionpattern(conversionpattern 自定义字段)

请教以下log4j 日志文件不会弄啊。 直接在Myeclipse中编辑properties 文件的时候不能使用中文的。你可以下载个插件&#xff0c;或者干脆在外边编辑~~你用一个类去读&#xff0c;然后在里面用logger去执行&#xff0c;在log4j的配置文件里面针对这个类配置一个把日志写到文件里…

log4j的配置ConversionPattern详细讲解

原文来自https://blog.csdn.net/reserved_person/article/details/52849505感谢大佬 先写下我一直没找到的ConversionPattern里面参数代表的详细含义 参数说明例子%c列出logger名字空间的全称&#xff0c;如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间log…

零阶保持器(ZOH)与一阶低通滤波器频率特性分析

1.零阶保持器&#xff08;ZOH&#xff09;频率特性分析 零阶保持器传递函数&#xff1a; 画 Bode 图进行频率分析&#xff1a; stf(s); T0.0002; %采样周期0.0002s G(1-exp(-T*s))/s; bode(G); 从图中可以看出&#xff1a;随着频率 ω 的的增加&#xff0c;当 ω 在 10000 附…

一阶低通滤波器、功能触发、周期性触发的simulink模型

01--概述 主要简单叙述在基于模型的过程中比较常用的一些算法&#xff0c;一个是一阶低通滤波器&#xff0c;一个是功能触发&#xff0c;另外一个是周期性触发。会简单介绍下这些算法的应用。 02--一阶低通滤波器 其计算公式为&#xff1a;Y(n) A*X(n) (1−A)*Y(n-1) A滤…