微机原理笔记04-汇编语言程序设计

汇编语言源程序

  • 汇编语言源程序:用助记符编写
  • 汇编程序:源程序的编译程序

程序执行过程

语句类型和格式

语句类型
  • 指令性语句:CPU执行的语句,能够生成目标代码
  • 指示性语句:CPU不执行,由汇编程序(编译器)执行的语句,不生成目标代码
语句格式

指令性语句:

[ 标号 : ] [ 前缀 ] 助记符 [ 操作数 ] , [ 操作数 ] [ ; 注释 ] [标号:]\quad[前缀]\quad助记符\quad[操作数],[操作数]\quad[;注释] [标号:][前缀]助记符[操作数],[操作数][;注释]

  • 串操作指令的助记符前面可以加前缀,前缀不是指令,它表示一种循环重复执行的概念,和助记符连在一起可构成循环体
    • 无条件重复前缀
    • 条件重复前缀
  • 标号代表指令的符号地址
  • 标号后要有冒号

指示性语句:

[ 名字 ] 伪指令助记符 操作数 [ , 操作数 , ⋅ ⋅ ⋅ ] [ ; 注释 ] [名字]\quad伪指令助记符\quad操作数[,操作数,···]\quad[;注释] [名字]伪指令助记符操作数[,操作数,⋅⋅⋅][;注释]

  • 名字是变量的符号地址,其后不加冒号

语句中的操作数

  • 寄存器
  • 存储器单元
  • 常量
  • 变量或标号
  • 表达式
    • 算术运算:加减乘除、取模
    • 逻辑运算:与或非异或
    • 关系运算
    • 取值运算和属性运算
    • 其他运算
  • LENGTHOF运算符:计算数组中元素的个数
  • TYPE运算符返回变量单个元素的大小,这个大小是以字节为单位计算

伪指令

  • 伪指令:由汇编程序(编译器)执行的“指令系统”
  • 作用: 帮助计算机理解指令性语句
    • 定义变量;
    • 分配存储区
    • 定义逻辑段;
    • 指示程序开始和结束;
    • 定义过程

数据定义伪指令

  • 用于定义数据区中变量的类型及其所占内存空间的大小
  • 格式:
  • 数据定义伪指令助记符:
    • DB(Define Byte):定义的变量为字节型
      • 每一个操作数占一个字节单元
    • DW(Define Word):定义的变量为字类型
      • 每一个操作数占一个字单元
    • DD(Define Double Word):定义的变量为双字型
    • DQ(Define Quadword):定义的变量为四字型
    • DT(Define Tenbytes):定义的变量为十字节型

定义字符串必须用DB伪指令助记符

【例】数据定义伪指令定义的变量在内存中的分布

  • 重复操作伪指令助记符:用于分配存储区
  • "?"的作用:

【例】变量在内存中的存储分配

符号定义伪指令

  • 作用类似C语言中的宏

段定义伪指令

  • 用来定义一个逻辑段
  • 逻辑段的段名就是段基地址(一个数)

【例】段定义伪指令

设定段寄存器伪指令

  • 用段寄存器标识逻辑段是什么段
    • 数据段
    • 附加段
    • 堆栈段
    • 代码段

结束伪指令

  • 标号通常是第一条指令性语句前的标号

源程序基本结构

【例】一个完整源程序结构

  • 段寄存器初始化后次系统才会分配前面定义的内存空间

过程定义伪指令

  • 用来定义一个子程序
  • 过程名是子程序第一条指令性语句在内存的符号地址
  • 若为近过程,NEAR可省略
  • 过程体的最后一条指令必须是RET

【例】过程定义及调用

  • 子程序用到的寄存器,为了不影响调用程序的寄存器原来的值,需要在执行子程序之前,将调用程序原来寄存器的值保存到堆栈,在执行子程序结束后,将调用程序原来寄存器的值从堆栈恢复(先进后出)

宏命令伪指令

  • 与子程序的不同:不能通过编译链接,成为一个独立的程序,只能是源程序的一部分,不能被其他源程序调用

【例】宏定义与宏调用

  • 该宏的作用:X+Y赋给Z

调整偏移量伪指令

流程控制伪指令

.REPEAT 伪指令执行循环体,然后测试 .UNTIL 伪指令后面的运行时条件:

.REPEAT
  statements
.UNTIL condition

.WHILE 伪指令在执行循环体之前测试条件:

.WHILE condition
  statements
.ENDW

INVOKE伪指令

  • 将参数入栈并调用过程
  • INVOKE 是 CALL 指令一个方便的替代品,因为,它用一行代码就能传递多个参数。常见语法如下:
INVOKE procedureName [, argumentList]
  • ArgumentList 是可选项,它用逗号分隔传递给过程的参数
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

熠熠晨曦_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值