微机原理与应用 第4章 汇编语言程序设计

2019-02-14 22:15

第四章 汇编语言程序设计(assembly language programming)

§4.1 汇编语言(assembly language) 一.概述

汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,

用标号或符号代表地址、常量和变量,与机器语言几乎一一对应 汇编:把汇编语言源程序翻译成机器语言目标程序的过程 汇编语言源程序 手工汇编或汇编程序 机器语言目标程序

汇编程序:用来完成汇编工作的程序,有 小汇编ASM 宏汇编MASM 动态调试程序DEBUG 二.汇编语言的语句

格式: [名称] 指令助记符 [操作数] [;注释] 带方括号的项有时可没有,注释项完全可以没有

每个部分用空格分开

每行最多可有132个字符,但最好不要超过屏宽80

语句可分成指令性语句和指示性语句(伪指令语句) 指令性语句汇编后可生成机器码

[标号:] 指令助记符 [操作数] [;注释] 指示性语句指示汇编程序处理一些工作

[名称] 伪指令(指示符) [操作数] [;注释] 1.名称(或称标识符)

给指令或存储单元地址起的名字,由字母、数字、字符组成 字母:A~Z ,a~z 数字:0~9

字符:可打印 + - * / = ( ) [ ] 〈 〉 ; . ' ’ ,

_ : ? @ $ &

(非打印 空格 制表符TAB 回车 换行)

(界符: , ; : .( )[ ]〈 〉+ - * / = ? _ @ &

$ ' ’ 界符用来表示某个标志的结束)

? 数字不能作名称的第一个字符,圆点 .仅能作第一个字符 ? 保留字不能作标识符($、?是保留字,与其它字符组合除外) ? 名称最长为31个字符

? 当名称后跟冒号,表示该名称是其后指令的标号,代表该指令

的开始地址,其他指令可以用该标号作为转移地址

? 当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不

跟冒号

冒号隐含NEAR属性,例:

供段内调用写成 OUTPUT:OUT DX ,AL 供段间调用写成 OUTPUT OUT DX ,AL 2.指令助记符

1

8086/8088指令,也可以是伪指令,如果指令有前缀(LOCK、REP

等)则前缀和指令用空格分开

3.操作数

指令执行的对象,可能有一、二个或没有 名称 指令助记符 操作数 注释

RET ;返回(无操作数) COUNT: INC CX ;CX加1(1个操作数) MOV AL,BL ;AL?BL(2个操作数) 伪指令可有多个操作数

COST DB 3,4,5,6,7,8 ;(6个操作数,用逗号分开) 操作数可以是常数、寄存器名、标号、变量、表达式, MOV AX,[BP+4];(第二个操作数为表达式) 4.注释

可选项,使程序易读,汇编时不作处理

注释前面要加分号,它可位于操作数之后,也可位于行首

三.常量与变量

1.常量,也叫常数,没有属性的纯数,汇编时已确定的值

·数字常量为0~65535中的数(16位寄存器使用,伪操作可定义32

位),进制加后缀说明,十进制加D(可省),二进制加B,八进制加Q,十六进制加H,若十六进制第一位为字母,则前头应加0

·字符和字符串叫串常量,是ASCII码字符串,必须加单(或双)

引号

例:‘A’,“ABC”,汇编后变成41H,414243H 2.变量,用于表达数值(或串)的标识符,有三个属性 ① 段属性(SEGMENT) ② 偏移地址属性(OFFSET)

③ 类型属性(TYPE),用DB、DW、DD定义 §4.2 伪指令(pseudo-instruction) 一.符号定义伪指令 1.等值EQU

格式:符号名 EQU 表达式

用来给符号定义一个值,程序中出现该符号就用其值代替,EQU

只能定义一次

DATA EQU 1234 ;代表一个数 XYZ EQU ALPHA[SI] ;代表一个地址 2.等号 =

格式:符号名 = 表达式

意义与EQU一样,但程序中可重新定义符号的值 EMP = 6 ;EMP代表6 EMP =EMP + 1 ;EMP现在代表7 3.解除PURGE

2

格式:PURGE 符号名(符号1,符号2,??,符号n) 用于解除所定义的符号使该符号在以后的定义中有效 例:原定义 TAB EQU 5

可用 PURGE TAB 来解除 然后可重新定义 TAB EQU 10 二.数据定义伪指令

用于预置存储器或定义变量 1.定义字节DB

格式:[变量名称] DB 表达式

例:DATA1 DB 2,3,4,5;从DATA1单元开始存放4字节数据 2.定义字DW

格式:[变量名称] DW 表达式

例:TAB DW 1234H;TAB单元内容为34H,TAB+1单元内容为

12H

3.定义双字DD

格式:[变量名称] DD 表达式

每个数据二字(四字节)低位部分在低地址,高位部分在高地址 ·用DB/DW/DD定义的数每行不得超过16项,超过16项必须换行 DB/DW/DD用法

<1> SUM DB ? ;给SUM单元分配一个字节,内容未定 <2> TAB DB 20 DUP(0);给TAB开始单元分配20字节,内容为0 <3> TIME DW 100 DUP(?);给TIME开始单元分配100字,内容

未定

<4> ADDR DD TABLE ;TABLE的地址(双字)给ADDR 100H 01 例:DATA SEGMENT

101H 02 ORG 100H 102H 03 103H 04 TABLE DB 1,2,3,4

104H 00 ADDR DD TABLE 105H 01 106H A2 DATA ENDS

107H 13 假设汇编后DS=13A2H

┇ (如果ADDR用DW定义,只得偏移量) (如果TABLE是变量,ADDR得地址,是常量,ADDR得数值) <5> LETTER DB ‘ABCDEFG’;将字符串以ASCII码形式填入

LETTER开始的内存

<6> HIS DB 3 DUP(‘WELCOME!’,0DH,0AH);从HIS单元开

始重复3次存放WELCOME!和回车换行符

4.标号LABEL

格式:标号名 LEBEL 类型

标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,

供调用和转移之用

标号有三个属性 段属性

3

偏移量属性

距离属性(即格式中的类型):NEAR(近程)和FAR(远程) NEAR:本标号为段内标号,调用本标号只提供偏移地址,段

基址为当前代码段

FAR:本标号为段间标号,调用本标号提供偏移地址和段基址 一个具有NEAR属性的标号也可用标号加冒号作后缀,并排列在

代码行的开头来隐含

如 AGAIN LABEL NEAR XOR AX,BUFF[BX] 可写成 AGAIN:XOR AX,BUFF[BX]

例:ROOT LABEL NEAR ;以下程序所用的ROOT标号是段内属

COMP PROC NEAR ;以下程序所用的过程下的标号是段内

属性

TIME PROC FAR ;以下程序所用的过程下的标号是段间属

三.运算符 1.算术运算符

+、-、*、/、MOD即加、减、乘、除、除法取余数(如19 MOD

7=5)

操作数是数字,结果也是数字

存储器地址运算时只有加减,例TAB+2、BETA-5等 2.逻辑运算符

AND、OR、XOR、NOT即与、或、异或、非 操作数是数字,结果也是数字 例:AND BX,DAT AND 0FEH 3.关系算符

EQ、NE、LT、GT、LE、GE即相等、不等、小于、大于、小于

等于、大于等于

若关系是假结果为0,若关系是真结果为0FFFFH 例:MOV BX,PAD LT 3

则PAD的值小于3时,汇编成MOV BX,0FFFFH 否则,汇编成MOV BX,0 4.分析运算符

可把存储器操作数分解成它的组成部分,如段值、段内偏移量、

类型

5.合成算符

由已存在的存储器操作数生成一个段值与偏移量相同,而类型不

同的新的存储器操作数

以下讨论分析算符和合成算符 1.取段基址SEG

它加于一个变量或标号之前,回送段基址,例:

4

ASSUME CS:SEG BEGIN ;令CS为BEGIN程序段段基址 MOV AX,SEG VARN ;将VARN的段基址送AX 2.取偏移量OFFSET

它加于一个变量或标号之前,取其偏移量,例:

MOV BX,OFFSET SUM ;将SUM的段内偏移量存入BX 3.取类型码TYPE

它加于一个变量或标号之前,取其类型代码

DB DW DD DQ DT NEAR FAR 1 2 4 8 10 -1 -2 例:NG1 DB ‘A’,‘D’,3 NG2 DW 88,265 ??

MOV AL,TYPE NG1 ;NG1定义字节,AL ? 1 MOV AL,TYPE NG2 ;NG2定义字,AL ? 2 4.取长度LENGTH

它加于一个变量之前,取分配给变量的项数 例:TAB DB 150 DUP(?) ;150项,150字节 FUM DW 150 DUP(?) ;150项,300字节 则,MOV CX,LENGTH TAB ;CX ? 150 MOV AX,LENGTH FUM ;AX ? 150

·注意:LENGTH返回的存储区必须用DUP()来定义,否则返

回为1

5.取字节数SIZE

它加于一个变量之前,取回变量所占字节总数,有 SIZE = LENGTH * TYPE

由上例,LENGTH TAB = 150,TYPE TAB = 1 LENGTH FUM = 150,TYPE FUM = 2 可知: SIZE TAB = 150 SIZE FUM = 300 以上5个叫数值返回算符 6.类型指示PTR

格式:类型 PTR 地址表达式

表示PTR右边的(存储器)操作数是左边的类型,有: BYTE、WORD、DWORD、NEAR、FAR

例:INC BYTE PTR [BX] ;将BX指向的单元字节加1 MOV WORD PTR [DI],99 ;立即数99送DI指向的字中 JMP NEAR PTR FOK ;以近程方式跳转到FOK(只取

FOK偏移地址)

7.指定符THIS(合成算符) 用于定义当前所指单元中的类型 格式:THIS 类型/距离

经THIS定义过的标号具有当前汇编段、偏移量和所规定的类型

5


微机原理与应用 第4章 汇编语言程序设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中等职业学校学生技能考核的探索

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: