当前位置:文档之家› 第三章 80868088汇编语言程序设计

第三章 80868088汇编语言程序设计

第三章 汇编语言程序设计 3.1 程序设计语言概述 3.2 8086/8088汇编语言的基本语法
3.3 汇编语言程序设计基本方法
3.1 程序设计语言概述
程序设计语言是专门为计算机编程所配置的语言。它们按照
形式与功能的不同可分为3种,即 :
机器语言—— 0、1二进制代码书写指令;难认,记,写。
★例:
JMP
MOV
BB
AX,SEG SUBP
MOV DX,OFFSET AA ; 假设AA为变量名
3.2.3 汇编语言的数据
4、数值表达式 一个数值表达式可自由常量、字符常量以及代表常量的名字 等用算术、逻辑和关系运算符(Operator)连接而成。 1)算术运算符 + 、-、*、/、MOD、SHR、SHL 如:MOV AX, 19 MOD 7 MOV BX, AA+1 MOV AX, BX SHR 3
3.2.2 汇编语言语句的类型和格式
指令助记符 主要为8086/8088CPU指令系统中指令助记符。 操作数 立即操作数 如:MOV BX,1000+5*3 寄存器操作数 如:MOV BX,AX 存储器操作数 如:mov bx,[100H] 注释 ;注明语句或程序的作用
3.2.2 汇编语言语句的类型和格式
开始 指令1 指令2 ……
指令n
结束
例:对两个8字节无符号数求和,这 两个数分别用变量D1及D2表示。 将两数之和的最高位进位放在AL中, 两数之和的其他位按从高到低顺序依 次放在SI,BX,CX,DX中。
程序如下:
D D1 D2 D C SEGMENT DB 12H,34H,56H,78H,9AH,0ABH,0BCH,0CDH DB 0CDH,0BCH,0ABH,9AH,78H,56H,34H,12H ENDS SEGMENT LEA DI,D2 ASSUME CS:C, DS:D ADD DX,[DI] BG: MOV AX,D ADC CX,[DI+2] MOV DS,AX ;给DS赋段值 ADC BX,[DI+4] LEA DI, D1 ;偏移地址送DI ADC SI,[DI+6] MOV DX,[DI] ;取第1操作数 MOV AL,0 MOV CX,[DI+2] ADC AL,0 MOV BX,[DI+4] MOV AH,4CH MOV SI,[DI+6] INT 21H CLC C ENDS END BG
3.2 8086/8088汇编语言的基本语法 3.2.1 认识汇编程序 3.2.2 汇编语言语句的类型和格式 3.2.3 汇编语言的数据
3.2 8086/8088汇编语言的基本语法
本节知识点:熟悉汇编语言程序的基本结构 掌握汇编语言语句几种类型、格式 掌握汇编语言数据格式 熟悉伪指令的构成、种类、作用
3.2.1 认识汇编程序---段结构
汇编源程序一般由若干段组成,每个段以SEGMENT作为段的开 始,以ENDS作为段的结束,这两者前面都要冠以相同的名字。 段分为:代码段、堆栈段、数据段和附加段4种,但代码段 与堆栈段是不可少的,数据段与附加段可根据需要设置。 整个源程序必须以END语句来结束,它通知汇编程序停止 汇编。END后面的标号START表示该程序执行时的起始地 址。
2、伪指令语句的格式 [名字] 伪指令 [参数表][;注释] 1)名字 用标识符定义的常量名、变量名、过程名、段名以及宏名等。 注意:汇编程序是不区分大、小写;名字的后面没有冒号。 例如:ONE DATA STRING AA DATA EQU 1 ;常量名 ;段名 ;变量名
SEGMENT DW ENDS 1,2,3
3.3.2 分支结构程序
利用转移指令,控制计算机执行某段程序或不执行某段程序。
满足判断条件 1?
2)逻辑运算符---AND OR NOT XOR
如:MOV AX, 9999H XOR 0F0F0H
3.3 汇编语言程序设计基本方法
本节重点:熟悉程序设计的基本步骤
掌握结构化程序设计的概念
掌握3种基本结构的程序设计方法 了解过程设计的步骤
3.3.1 顺序结构程序
顺序结构程序, 在程序中不包含任何转移类指令. 执行时 按指令的先后次序从第一条开始逐条执行,直至程序结束.
DATA STACK
ENDS SEGMENT
DB 200 DUP(0)
STACK CODE
ENDS SEGMENT
ASSUME
DS:DATA,SS:STACK,CS:CODE
;由ASSUM伪指令定义各段寄存 器的内容
3.2.1 认识汇编程序
START: MOV MOV MOV MOV MOV NEXT: ADD AX,DATA DS,AX CX,50 AX,0 BX,1 AX,BX ;将DS初始化为数据段首址 的段值DATA ;CX置入循环计数值 ;清AX累加器 ;BX置常量1 ;累加奇数和TA 3.宏指令
伪指令助记符 参数,参数,…… ;注释
DATA SEGMENT
DW 20H,-30H ;定义变量
ENDS
是以某个宏名字定义的一段指令序列。
3.2.2 汇编语言语句的类型和格式
二、汇编语言语句的格式 1、指令性语句 [标号:] 指令助记符 [操作数表][;注释] 标号(Label) 1)标号及其属性 标号作为程序转移的目标地址--指令的符号地址(逻辑地址) 标号3种属性——段地址、段内偏移量以及类型(near/far) 标号定义:字母开头,由字母、数字、特殊字符(?、_等) 出现位置:循环、转移、调用指令中
3.2.1 认识汇编程序—完整的定义格式
例:求从1开始连续50个奇数之和,并将结果存放在名字为SUM的字 存储单元中。
DATA SUM SEGMENT DW 0 ;定义数据段,DATA为段名 ;由符号(叫变量名)SUM指定的 内存单元类型定义为一个字,初 值为0 ;定义数据段结束 STACK ;定义堆栈段,这是组合类型伪指 令,它规 定在伪指令后须跟 STACK类型名 ;定义堆栈段为200个字节的连续 存储区, 且每个字节的值为0 ;定义堆栈段结束 ;定义代码段
3.2.2 汇编语言语句的类型和格式
一、汇编语言语句的种类 语句的种类-有3种基本语句:
指令语句
伪指令语句 宏指令语句
3.2.2 汇编语言语句的类型和格式
1.指令语句(也称为硬指令) 是一种执行性语句,它在汇编时,汇编程序将为之产生一一对应 的机器目标代码。
标号: 指令助记符 操作数,操作数
汇编语言—— 助记符、符号地址、标号书写程序;通用型、可移植性差; 但可直接对硬件操作。 高级语言—— 通用性好、简单易读、易写;但编译时间长,占内存;对硬 件编程复杂。
为什么学习汇编语言?
汇编语言本质是机器语言,可直接对硬件控制,运行速度 快,占用内存少 适用场合:要求执行时间短,占用小存储容量,如实时控 制软件、底层开发、直接控制硬件的软件开发
十六进制
0B800H
01100100B
二进制
2) 字符串
字符串常量是用单引号或双引号括起来的单个字符 或多个字符 其数值是每个字符对应的ASCII码值 例如: ‘d’(等于64H) ‘AB’(等于4142H)
‘Hello, Assembly !’
3) 符号常量
符号常量使用标识符表达一个数值 MASM提供等价机制,用来为常量定义符号名 符号定义伪指令有“等价EQU”和“等号=”: 符号名 EQU 数值表达式 符号名 EQU <字符串> ;MASM 5.x不支持 符号名 = 数值表达式 EQU用于数值等价时不能重复定义符号名,但“=”允 许有重复赋值。例如: X= 7 ;等效于:X qeu 7 X= X+5 ;“X EQU X+5”是错误的
8000h,?,'AB' 64h maxint maxint dup(0)
字变量定义实例
3.2.3 汇编语言的数据—地址参数
3、地址型参数 指令参数可为地址型的,该参数表示存储单元的地址(值) 地址型参数主要形式:

标号 名字

变量名 段名 过程名(子程序名)
;假设BB为标号
;假设SUBP为过程名
DB‘Hello, Everybody!’,0DH,0AH,‘$’;
3.2.2 汇编语言语句的类型和格式
2)伪指令 符号定义伪指令—EQU/= 数据定义伪指令—DB/DW/DD 段定义伪指令—SEGMENT/ENDS/ASSUME 过程定义伪指令—PROC/ENDP 定位伪指令—ORG 3)伪指令参数 各参数之间用逗号分隔,可以是常量、变量名、表达式
INC
INC DEC
BX
BX CX
;求下一个奇数
;循环计数器作减1计数
JNE
MOV MOV
NEXT
SUM,AX AH,4CH
;未计完50次时,转至NEXT循环
;累加和送存SUM单元 ;DOS功能调用语句,机器将结束本
INT
CODE ENDS END
21H
START
程序的运行,并返回DOS状态
;代码段结束 ;整个程序汇编结束
3.2.3 汇编语言的数据——变量
2、变量 必须事先定义才能有效 变量定义为变量申请固定长度的存储空间,并将该空间的基 址转换为符号地址 变量定义使用伪指令实现 变量定义的同时可对存储单元初始化 格式——变量名 伪指令助记符 初值表 初值表是用逗号分隔的参数
3.2.3 汇编语言的数据—变量
1) 数值常量
指由10、16、2和8进制形式表达的数值,各种进制 的数据以后缀字母区分,默认不加后缀字母的是十 进制数
十进制 由0 ~ 9数字组成,以字母D(d)结尾(缺 省情况可以省略) 由0 ~ 9、A ~ F数字组成,以字母H(h)结 尾,以字母开头的常数需要加一个前导0 由0和1两个数字组成,以字母B(b)结尾 100,255D 64H,0FFH
相关主题