微机原理-汇编语言设计

一、序言

  • 使用指令的助记符、符号地址和标号等编写的程序设计语言称为汇编语言
  • 用汇编语言编写的程序运行速度快,实时性好,占用内存空间小,能最大限度发挥硬件的作用。
  • 用汇编语言编写程序效率低,程序设计的技巧性强
  • 汇编语言程序汇编处理过程
    ①汇编语言程序经编辑程序EDIT编排后生成汇编语言源程序PROG.ASM
    ​②经汇编语言汇编后生成目标文件PROG.LIST
    ③此时还可以生成一个可选的列表文件PROG.LIST
    ​④目标文件经连接程序LINK连接后生成可执行文件PROG.EXE。

二、汇编语言程序格式和伪指令

2-1 汇编语言程序格式

指令语句:标号: 指令助记符 操作数 ;注释

  • 标号
    ①标号后面必须加冒号:
    ②如果没有别的转移指令要转移到某条指令,则该条指令前面就无须加标号
    ③可以用作标号的字符,包括英文字母、数字或某些特殊字符,但第一个字符必须为英文字母或某些特殊字符,圆点只能用作第一个字符。
    ④特殊字符不能单独用作标号系统中已定义的保留字,如指令,操作符为指令,指示符,寄存器名和运算符等都不能作标号。
    ⑤标号具有段基址,偏移量及类型等三种属性。
    ⑥有JMP语句必须有标号
  • 指令助记符
    是指令语句中唯一不可缺少的部分,表示指令系统中指令的操作码。
  • 操作数
    ①一条指令可以有一个操作数或两个操作数,也可以没有。
    ②操作数可以由常数字符或字符串变量标号,寄存器,存储器和表达式等组成。
    ③常数可以由二进制,十进制,16进制及2-10进制的BCD数组成,其中二进制,16进制及BCD数后面必须加B,H和H作为后缀。使用BCD码做操作数的指令,其后面一定要紧跟一条调整指令,以便将运算结果调整为BCD数。
    ④字符和字符串要用单引号括起来。
    ⑤变量通常指用符号表示的存放在存储单元中的可变数值。程序在运行期间可以对它进行修改,其数值可以由为指令DB,DW,DD等来定义,所谓定义就是为变量分配存储单元,也可以为这个存储单元起个名字或设定初值。
  • 注释
    ①注释用来说明一条指令或一段程序的功能,加了注释之后,增强了程序的可读性
    ②可以省略
    ③注释前必须加分号;

伪指令语句:名字 伪指令指示符 操作数 ;注释

  • 名字
    ①名字后面不能跟冒号:
    ②可以省略,但有些语句不能省略
  • 伪指令指示符
    常用:
    ①段定义语句 SEGMENT和ENDS
    ②段分配语句 ASSUME
    ③过程定义语句 PROC和ENDP
    ④变量定义语句 DB、DW、DD、DQ、DT
    ⑤程序结束语句 END
  • 操作数:有的伪指令不允许带操作数,有的伪指令可以带一个或多个操作数。
  • 注释:注释部分与指令语句要求类似。

表达式和运算符

将常数、符号、寄存器等通过运算符连接起来的式子叫做表达式。

2-2 伪指令语句

2-2-1 段定义语句

段定义语句用来定义一个逻辑段,每个段以SEGMENT开始,以ENDS结束,整个段的内容都在这两条伪指令之间。每个段都有一个段名,段名由用户指定,位于SEGMENT和ENDS前面,不可省略,它确定了该逻辑段在存储器中的段基地址,即高16位物理地址。

(1)定位类型

  • 一个汇编语言程序可以包括多个段,必须用LINK程序将各个段相互衔接起来,两段之间如何连接由定位类型来规定,它确定该段存储器的起始边界要求。
  • 定位类型为PAGE、PARA和WORD时,分别表示该段起始地址能被256(页)、16(节)和2(字)整除。
  • 定位类型为BYTE(字节)时,起始地址可以从任何地方开始。
  • 默认值PARA(节)表示能被16整除的地方分段。
  • 在计算机中,16个字节单元称为1节,256个字节为1页。

(2)组合类型

组合类型用来告诉LINK程序本段与其他段的关系。

  • NONE
    表示本段与其他段不进行连接,各段有独自的段基地址和偏移量,这是默认值的组合类型
  • PUBLIC
    两个或几个同名同类别的模块段连接成一个段,段基地址相同,但偏移量不同
  • COMMON
    本段与其他段覆盖,偏移地址名称不同
  • STACK
    表示是堆栈段,不可忽略
  • MEMORY
    该段在连接时被放在所有段的最后(最高地址)
  • AT
    告诉连接程序将本段装在表达式所指定的段基地址处

(3)分类名

  • 必须用单引号括起来
  • 使LINK程序所有分类名相同的逻辑段组成一个段组,典型的分类有‘STACK’,‘CODE’和‘DATA’等。

2-2-2 段分配语句

  • ASSUME可以根据各个逻辑段的段名,将它们分别定义成代码段(CS)、数据段(DS)、堆栈段(SS)和附加数据段(ES)。
  • 格式:ASSUME CS:代码段名,DS:数据段名,SS:堆栈段名,ES:附加段名

2-2-3 过程定义语句

用过程定义伪指令PROC和ENDP进行定义,并把这些程序称为过程或子程序,有主程序中的CALL语句来调用它们。

2-2-4 变量定义语句

  • 变量定义语句也称为数据定义语句,它为一个数据项分配存储单元,用-个符号即变量名与该存储单元相联系,并可为该数据项提供一个任选的初始值,也可以没有初始值。
  • 变量定义语句的一般形式为:变量名伪指令指示符 操作数 ;注释
  • DB→字节
    DW→字
    DD→双字
    DQ→4字
    DT→10字节
    DUP(复制操作符)→定义重复变量
  • 变量名用符号表示,也可以省略,其作用与指令语句中的标号类似。

2-2-5 程序结束语句

程序结束语句的格式为:END [标号名或名字]

  • 个模块只能有一条也必须有一条END语句。
  • 标号名或名字也可以省略不写。

2-2-6 其他伪指令

(1)等值伪指令EQU
等值伪指令语句的格式为:符号名 EQU 变量、标号、常数等。
我jio得跟C语言中的符号变量有点像😊
(2)定义类型伪指令LABEL
其作用与PTR类似,格式为:名字 LABEL 类型 ;将LABEL左边的名字定义为其右边的类型
(3)对准伪指令EVEN
要求汇编程序将下一语句所指向的地址调整为偶地址。
(4)ORG伪指令
给它下面一条语句指定起始偏移地址。
(5)模块连接伪指令PUBLIC和EXTRN

  • PUBLIC用于将标号、变量定义为公共的,可供其他程序模块使用,否则别的模块不能引用它。
  • EXTRN用于引用其他模块中已用PUBLIC伪指令定义过的标号和变量

2-3 完整的汇编语言程序框架

  • 数据段:代码段中用到变量和数据时,应设置数据段
  • 代码段:必须有
  • 堆栈段:根据情况设置
  • 附加数据段:当代码段中有字符串操作指令时,不仅要设置数据,还需设置附加段

三、汇编语言程序设计方法与实例

看看例题,打算与习题一起总结,后面再发。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值