汇编语言程序设计入门

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

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

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,参数的传递

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

常用的方法有:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阔升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值