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

2019-06-28  本文已影响0人  Jorunk

4.1 汇编语言的格式

4.1.1 8086汇编语言程序的一个例子

4.1.2 8086汇编语言源程序的格式

NAME1    SEGMENT
   语句
      语句
NAME1 ENDS
NAME2 SEGMENT
  语句
    语句
 NAME2 ENDS
     END<标号>

语句行的构成

4.2.1 标记(Token)

1.IBM宏汇编的字符集

(1)字母

2.界符
3.常量

(1)数字(整数)常量
①二进制常量

(2)字符串常量

4.标识符
5.保留字
IBM宏汇编中的保留字


6.注释

4.2.2 符号(Symbol)

1. 寄存器
2.变量
3.标号(Label)
4.数
5.其他符号

4.2.3 表达式(Expressions)

1.操作数(Operands)

(1)常量操作数

(2)存储器操作数

变量可以具有以下几种寻址方式:

①直接寻址
②基址寻址
③变址(索引)寻址
④基址变址寻址

2.运算符(Operators)

(1)算术运算符(Arithmetic Operators)

因此对例子中地存储其地址作如下运算:
SUM+2
CYCLE-5
NOT_DONE-GO
是有效地表达式。而
SUM-CYCLE

(2)逻辑运算符

MOV BX ,PORT_VAL LT 5
若PORT_VAL地值小于5,关系为真,则会变程序在汇编后产生地语句为:
MOV BX ,OFFFFH
若PORT_VAL的值不小于5,则关系为假,汇编后产生的语句为:
MOV BX,0

(4)分析运算符

4.2.4 语句(Statements)

4.3 指示性语句

4.3.1 符号定义语句

1.等值语句EQU

NAME EQU EXPRESSION

2.等号(Equal Sign) =语句
3.解除语句PURGE

PURGE 符号1,符号2,...,符号n

4.3.2 数据定义语句

(3)数据双字(四个连续的字节)
BIGGER DD ? ;定义一个双字
(4)Near指令单元
CYCLE : CMP SUM,100
(5)Far指令单元

存储器地址操作数的类型值

4.3.3 段定义语句

伪指令ORG的一般格式为:
ORG <表达式>

此语句指定了段内在它以后的程序或数据块存放的起始地址,也即以语句中的表达式的值作为起始地址,连续存放,除非遇到一个新的ORG语句

4.3.4 过程定义语句

过程定义语句的格式:
PROCEDURE_NAME PROC [NEAR]

PROCEDURE_NAME PROC FAR
RET
PROCEDURE _NAME ENDP

4.3.5 结束语句

START:
END START

4.4 指令语句

4.4.1 指令助记符

1.NOP(No Operation)
2.保留空格(Place Holder)

4.4.2 指令前缀

具有前缀的指令语句例子
CYCLE: LOCK DEC COUNT

4.4.3 操作数寻址方式

1.立即

MOV AX,15 ;15是一个立即数

2.寄存器

MOV AX,15 ;15是一个寄存器操作数

3.直接

SUM DB ?
MOV SUM,15 ;SUM是一个直接存储操作数

4.通过基址寄存器间接

MOV AX,[BX]
MOV AX,[BP]

5.通过变址寄存器间接

MOV AX,[SI]
MOV AX,[DI]

6.通过基址寄存器加变址寄存器间接

MOV AX,[BX][SI]
MOV AX,[BX][DI]
MOV AX,[BP][SI]
MOV AX,[BP][DI]

7.通过基址或变址寄存器加位移量间接

MANY_BYTES DB 100 DUP (?)
.
.
.
MOV AX,MANY_BYTES[BX]
MOV AX,MANY_BYTES[BP]
MOV AX,MANY_BYTES[SI]
MOV AX,MANY_BYTES[DI]

8.通过基址寄存器加变址寄存器加位移量间接存储器

MANY_BYTES DB 100 DUP (?)
.
.
.
MOV AX,MANY_BYTES[BX][SI]
MOV AX,MANY_BYTES[BX][DI]
MOV AX,MANY_BYTES[BP][SI]
MOV AX,MANY_BYTES[BP][DI]

4.4.4 串操作指令

ALPHA DB ?
BETA DB ?
MOV SI,OFFSET ALPHA
MOV DI,OFFSET BETA
MOV BETA,ALPHA

该例子是把两个分别由未组合的BCD码(一个字节为一位BCD数)的串相加;由于8086中允许两个未组合的十进制数相加,只要经过适当的调整就可以得到正确的结果。所以,在程序中把第一个串的一位BCD数取至AL中,与第二个串的相应位相加,经过AAA调整,再把结果存至存储器中。程序中的前面部分是为了设置段,先设置数据段,用DB伪指令定义两个数据串,用COUNT表示数据的长度。接着是定义堆栈段,为堆栈留下了100个单元的空间(实际上当然由需要来定),然后是当以代码段,从标号GO开始就是可执行指令部分。







4.5 汇编语言程序设计及举例

4.5.1 算术运算程序设计(直线运行程序)

4.5.2 分支程序设计

4.5.3 循环程序设计

1.用计数器控制循环

例题:在一串给定个数的数中寻找最大值(或最小值),放至指定的存储单元。每个数用16位表示

2.多重循环

4.5.4 字符串处理程序

1.确定字符串的长度

例题:从头搜索字符串的结束标志,统计搜索的字符个数

2.加偶校验到ASCII字符

4.5.5 码转换程序设计

1.十六进制到ASCII的转换

例4-5 若有一个二进制数码串,要把每一个字节中的二进制转换位两位十六进制数的ASCII,高4位的ASCII放在第hi高的单元。串中的第一个字节为串的长度(小于128)

2.从二进制到ASCII串的转换

4.5.6 有关I/O的DOS功能调用

1.在CRT上连续输出0 ~ 9

4.5.7 宏汇编与条件汇编

1.宏命令的用途

(1)在汇编语言的源程序中,若有的程序段要多次使用,为了使在源程序中不重复书写这个程序段,可以一条宏指令来代替。由宏汇编程序在汇编时产生所需要的代码

MOV CL,4
SAL AL,CL

若要多次使用,就可以用一条宏指令代替:
SHFT MACRO
MOV CL,4
SAL AL,CL
ENDM

(2)宏定义不但能使源程序书写简洁,而且由于宏指令具有接受参量的能力,所以功能就更灵活

SHFT MACRO X,Y
MOV CL,X
SAL Y,CL
ENDM

(3)形式参量不只可以出现在操作数部分,也可以出现在操作码部分。如:
SHFT MACRO X,Y,Z
MOV CL,X
S&Z Y,CL
ENDM

若有以下调用:
SHFT 4,AL,AL
SHIFT 6,BX,AR
SHIFT 8,SI,HR
在汇编时,分别产生以下指令的目标代码
MOV CL,4
SAL AL,CL
MOV CL,6
SAR CL,6
SAR BX,CL
MOV CL,8
SHR SI,CL

2.IBM宏汇编中主要宏操作伪指令

(1)MACRO

宏定义名 MRRCO <形式参量表>

(2)PURGE
PURGE 宏定义名 [,......]

(3)LOCAL

上面的CHANGE宏定义在下有多次调用的情况,应定义为:
CHANGE MACRO
LOCAL ADD_0
CMP AL,10
JL ADD_0
ADD AL,'A'-'0'-10
ADD_0 ADD AL,'0'
ENDM

(4)REPT
REPT <表达式>
ENDM

例4-7 把数字0 ~ 9的ASCII填入表TABLE。CHAR = ‘0’


例题4-8 建立一个地址表,其中每个字的内容是下一个字的地址(用作地址指针),而最后一个字的内容是第一个字的地址


(5)IRP
IRP 形式参量(参数表)
ENDM


(6)IRPC
IRPC 形式参量,字符串(或<字符串>)
ENDM

3.宏定义嵌套
4.宏指令与子程序的区别

(1)宏指令是为了简化源程序的书写,在汇编时,汇编程序处理宏指令,还把宏定义体插入到宏调用处。所以,宏指令并没有简化目标程序。有多少次宏调用,在目标程序中仍需要有同样多次的目标代码插入。所以,宏指令不能节省目标程序所占的内存单元
(2)若一个源程序中多次调用一个程序段,则可用子程序,也可以用宏指令来简化源程序。用子程序的办法,汇编后产生的目标代码少,也即目标程序占用的内存少,节约了内存空间。但是,子程序在执行时,每调用一次都要先保护断点,通常在程序中还要保护现场;在返回时先要恢复现场,然后恢复断点(返回)
这些操作都额外增加了时间,因而执行时间长,速度慢指令恰好相反,它的目标程序长,占用的内存的那元多;但是执行时不需要保护断点,也不需要保护现场以及恢复、返回等这些额外的操作,因而执行时间短、速度快

5.条件汇编
上一篇 下一篇

猜你喜欢

热点阅读