微机原理与接口技术-第四章-汇编语言程序设计

第四章

4.1 8086汇编语言的语句

0. 变量:通过伪指令定义的标识符

  • 格式: 变量名 DB/DW/DD/DQ/DT 表达式
    • a)变量名:标识符;
    • b)变量类型:标定变量所指地区的数值属性;
    • c)表达式:表示变量所表示的内容;
      • 1)常数或运算公式,多个时由从左到右,从上到下(由低到高)排放;
      • 2)字符串: 须用单引号引出,编译时/存放在内存中时,以ASCII码的值存放;
      • 3)?:表示占着内存,内容随机;
      • 4)DUP格式:n DUP (重复操作的值) 表示在内存中将“重复操作的值”重复放置n次;
      • 5)地址表达式:表达式的内容为存放的地址;只能为DB或DD类型
        • 为DB类型时:变量名表示该变量首存储地址的偏移; 表达式中的标号表示该指令的首字节地址的偏移;
        • 为DD类型时:低字节预置偏移地址;高字节预置段地址;
        • 表达式中的变量/标号可与常数相加减
        • 变量或标号不能与变量或标号相加,但可相减,减完为无属性的纯数字。

1. 指令性语句可由汇编程序翻译成机器语言

  • 格式[标号:] 操作码 [操作数1,] [操作数2,] [;注释]
    • 标号:用符号表示的地址,表明语句所在的地址
      • a)指令性语句的标识符;
      • b)可由数字、字母、特殊字符(?,·,@,-,¥)组成,且字母在前;
      • c)最多31个字符;
      • d)属性:
        • 1)段地址属性:标号的段地址表示标号所表示的指令语句所在的段地址;
        • 2)偏移地址:标号的偏移地址表示标号所表示的指令语句所在的偏移地址;
        • 3)类型:段内引用:NEAR;段间引用:FAR
    • 操作助记符:表示指令语句的基本操作功能;
    • 操作数:可带可不带,多个用逗号隔开;

2. 指示性语句CPU不执行,仅帮助CPU理解汇编程序的意义

  • 格式: [标识符(名字)] 指示符(伪指令) 表达式 [;注释]
    • 标识符:由数字、字母、下划线组成,其意义由伪指令指定;
    • 指示符:标定标识符为数据/代码/堆栈/附加段,并规定其属性;
      • a)EQU语句:相当于C语言中的#define
        • 格式: 名称 EQU 表达式
      • b)=(赋值语句):与EQU的区别是可以对同一名字重复定义。
      • c)LABLE语句:定义标号的类型(NEAR/FAR)与定义变量的类型(BYTE/WORD/DWORD)。
    • 表达式:由操作数和操作符组成;
      • a)算术运算符:加减乘除取模(MOD)
      • b)逻辑运算符:与(AND)或(OR)非(NOT)异或(XOR)
      • c)关系运算符:EQ(=);NE(!=)LT(<)GT(>)<=(LE)>=(GE),其类型是布尔类型
      • d)分析运算符
        • SEG:取段地址
        • OFFSET :取偏移地址
        • TYPE:取类型
        • SIZE:取尺寸大小
        • LENGTH:取长度
      • e)综合运算符
        • PTR运算符:重新定义变量或标号的类型
          • 格式:类型 PTR 表达式
        • THIS运算符:改变存储区的类型

4.2 汇编语言程序结构

4.2.1 段定义语句

  • 主要用于定义逻辑段
    • 格式:
      • 段名 SEGMENT [定位类型] [组合类型] [‘类别’]
        ……
      • ENDS
        • a)段名:表示该段语句的地址。
        • b)定位类型:PAGE/PARA/WORD/BYTE
        • c)组合类型:表示该段与其他同名段间的连接方式
组合类型名意义
PUBLIC只要是满足定位类型,就可依次连接
COMMON所有同名段共享存储空间,且以最长的段最为连接后的空间容量
AT将段定位到由表达式求得的节边界地址上
STACK把所有带有堆栈属性的模块依次连接
MEMORYMEMORY后的第一个段连在同段名段中的最高地址,之后的按COMMON处理
  • ’类别‘:决定连接时装入各逻辑段的顺序,相同类别的逻辑段装入连续的内存区,无名的按先后排序装入内存。

4.2.2 ASSUME 语句

指出逻辑段与物理段的关系
  • 格式:
    • ASSUME 段寄存器名:段名[段寄存器名:段名,……]
      • 段寄存器:CS/DS/SS/ES
      • 段名:由SEGMENT伪指令定义的段名。

4.2.3 ORG伪指令

  • 格式:ORG 表达式
    • 指明该语句下一条程序的段内偏移地址。其表达式为2字节无符号数。

4.2.4 PUBLIC与EXTRN伪指令

  • PUBLIC:其后定义的符号公用。
    • 格式:PUBLIC 符号
  • EXTRN:引用外部的符号与符号的类型
    • 格式:EXTRN 名字:类型

4.2.5 汇编语言过程定义

定义格式:过程名 PROC [类型]
……
RET
过程名 ENDP
  • 1)过程名: 一种供调用的标识符,或调用的入口地址,其段地址和偏移地址表示过程中第一个语句的段地址和偏移地址
  • 2)类型: NEAR:过程与调用程序在同一段;FAR:过程与调用程序在不同段
  • 3)PROC/ENDP:过程定义的关键字,一个表开始另一个表结束;
  • 4)RET:返回到调用指令的下一条指令。
  • 5)过程的调用CALL 过程名

4.2.6 标准程序返回方式

1)使用中断调用20H
2)使用DOS的功能调用
  • 在结束后插入:MOV AH,4CH
    INT 21H

4.3 子程序

4.3.1 子程序结构(同过程调用)

4.3.2 主程序与子程序的参数传递

1)寄存器传参
  • 子程序的入口参数和出口参数由寄存器传递
2)指定内存单元传参
  • 入口参数和出口参数同在一个指定区
3)堆栈传参
  • 入口参数和出口参数通过堆栈传递

4.4 DOS功能调用

输入/显示功能

  • 单字符输入
    • MOV AH,O1H
    • INT 21H
    • 可将输入的单字符储存到AL中
  • 单字符显示
    • MOV DL,待显示单字符的ASCII码
    • MOV AH,02H
    • INT 21H
  • 多字符输入
    • MOV DX,数据区首偏移地址
    • MOV AH,0AH
    • INT 21H
  • 多字符显示
    • MOV DX,待显示字符串首地址偏移地址
    • MOV AH,05H
    • INT 21H

4.5 宏定义

格式

宏指令名 MACRO <形参>

宏体

ENDM

宏调用:

宏指令名 <形参>

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Simon-GPT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值