750 likes | 918 Views
及接口技术. 微型计算机原理. 授课教师: 周茂霞. 第 4 章 汇编语言程序设计. 第一部分: 程序的基本结构 语法规则 上机操作过程 第二部分: 汇编语言源程序 结构化程序 的设计的基本方法 典型例题分析. 4.1 概述. 程序设计语言 机器语言 汇编语言 :机器语言的符号化,与机器密切相关。 高级语言. 低级语言. 机器语言 :
E N D
及接口技术 微型计算机原理 授课教师: 周茂霞
第4章 汇编语言程序设计 • 第一部分: • 程序的基本结构 • 语法规则 • 上机操作过程 • 第二部分: • 汇编语言源程序结构化程序的设计的基本方法 • 典型例题分析
4.1 概述 • 程序设计语言 • 机器语言 • 汇编语言:机器语言的符号化,与机器密切相关。 • 高级语言 低级语言
机器语言 : 是用 二进制 代码表示的 计算机 能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的 硬件 结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的 程序 ,不能在另一种计算机上执行。 4.1.1 机器语言(machinelanguage) 机器语言编写的程序:目标程序
4.1.1 机器语言(machinelanguage) 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。 手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。 编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。
4.1.1 机器语言(machinelanguage) 如何解决矛盾呢? 小结: • 机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。 • 8086到PENTIUM的机器语言指令长度可以从1字节到13字节。 • 尽管机器语言好像复杂的,然而它是有规律的。 • 存在着多至100000种机器语言的指令。这意味着不能把这些种类全部列出来
4.1.2 汇编语言(Assembly Language) 汇编语言(Assembly Language):是面向机器的程序设计语言。 在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。
汇编语言源程序 汇编程序翻译 目标程序 图4.1汇编程序功能示意图 4.1.2 汇编语言(Assembly Language) • 汇编程序: 使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。 • 汇编:汇编语言把汇编程序翻译成机器语言的过程称为汇编。 • 汇编语言源程序(source program) Microsoft 公司的MASM宏汇编语言
4.1.2 汇编语言(Assembly Language) 汇编语言特点: 汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。 程序员必须熟悉计算机的硬件结构,有要熟悉计算机的指令系统,才能写出高质量的汇编语言源程序。 根据特点,比较适合编制系统软件、实时控制软件,以及直接控制硬件的接口的驱动程序。
4.1.3 高级语言(high level language) 为了克服汇编语言的缺点,更方便于编写计算机应用程序,使程序设计语言适合于描述各种算法,而不依赖于具体的计算机结构和指令系统,后来便产生了各种类型的高级语言。面向过程的语言。 高级语言的优点: (1)不依赖于特定的机器,独立于机器,用同一种高级语言编写的程序可以在不同的机器上运行而获得相同的结果。 (2)编写的程序由一系列编程语句和相应的语法规则构成,编程方法更适合于人们的思维习惯,易于理解和阅读,程序本身具有可移植性,通用性强。
4.1.3 高级语言(high level language) 高级语言的缺点: (1)翻译程序和解释程序复杂,占用内存空间大,与汇编语言程序相比,经编译后产生的目标程序长,执行速度慢。同时,目前高级语言处理微型计算机接口和中断处理系统比困难。 (2)目前,高级语言主要用于科学计算和其他非实时的数据处理。
4.1.3 高级语言(high level language) 高级语言的执行: 高级语言源程序必须经过编译软件或解释软件程序,翻译成目标程序,机器才可以运行。 编译软件程序是一次把所有的源程序翻译成功后才能运行程序,得到处理结果,一般高级语言采用编译方式。解释软件程序的处理是边翻译边执行,如BASIC语言。 翻译 高级语言源程序 目标程序 编译软件程序或解释软件程序
4.1.4 宏汇编程序及上机过程简介 宏汇编程序主要功能:是一种系统软件,将汇编语言源程序翻译成对应的目标程序。 宏汇编程序功能: (1)按用户要求自动分配存储区 (2)自动把各种进位数制转换成二进制 (3)计算源程序中表达式的值 (4)对源程序进行语法检查、给出错误信息 (5)进行宏汇编,展开指令。
4.1.4 宏汇编程序及上机过程简介 MASM 形成汇编语言源程序文件.ASM 汇 编语 言源程序 编辑软件进行编辑 汇编程序 汇编 执行程序 机器语言目标程序文件 .OBJ .LST 形成可执行文件 . EXE LINK 连接程序 连接 图4.3 汇编语言上机处理过程
4.2 汇编语言源程序的格式与基本语法 不同微处理器的汇编语言语法规则不尽相同,但表示方法、基本语法结构形式类似。 程序段不是规范的完整的宏汇编语言源程序,因此不能形成汇编,形成目标代码。 一个完整的汇编语言源程序采用分段结构。
4.2.1 汇编语言源程序的分段结构 NAME 自己根据程序取名 ; STACK SEGMENT : STACK ENDS DATA SEGMENT : DATA ENDS CODE SEGMENT ASSUM CS:CODE, DS :DATA, SS:STACK START: ………………….. : CODE ENDS END START ;整个源程序汇编结束
4.2.2 汇编语言语句类型与格式 一、语句的种类 MASN宏汇编语言语句的种类分为三种: 指令性语句:与机器指令对应,在汇编过程产生与之对应指令的目标代码,是可执行的语句。 指示性语句:包括伪操作命令与伪操作符,在汇编过程不产生指令的目标代码,类似于指令是非执行的指令。作用:在汇编时,只为汇编程序提供所需要的有关信息,执行特 定的功能操作。例 如定义符号、定义数据常数、分配存储区等,在汇编过程起作用。 宏指令语句:简化汇编语言源程序的设计,它以某个宏指令名定义一段指令序列,在程序中用一条宏指令语句代替一段程序,凡是有宏指令的程序在汇编时,用相应的目标代码序列代替,插入到对应的程序中。 DATA SEGMENT NUM DW 1234H DATA ENDS;在汇编时,变量NUM定义为字类型数据区的首地址,存放有数据1234H
4.2.3 汇编语言语句类型与格式 二、语句的格式 汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。 1、指令性语句的格式 标号区 操作码区 操作数区 ;注释区 [标号:] 助记符 [操作数表列] [;注释] LOOP:ADD AX,BX ;AX AX+BX
4.2.3 汇编语言语句类型与格式 二、语句的格式 汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。 2、指示性语句的格式 [符号名] 定义符 [参数1,参数2,….,参数n] [;注释] DAT DB 12H,34H,56H ;注释 DATA SEGMENT NUM DW 1234H; DATA ENDS 汇编程序规定的伪操作指令 注意: 符号名的定义规则, 不是必须有。用空格分隔定义符
4.2.3 汇编语言语句类型与格式 二、语句的格式 汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。 3、宏指令语句的格式 [标号:] 宏指令名 [参数1,参数2,….,参数n] [;注释] 操作数用逗号分开。 宏指令名由编程者命名,可出现在汇编语言指令序列,做为宏指令使用。 MOV AL, 90H CRLF MOV DL, 30H
4.2.3 汇编语言语句类型与格式 二、语句的格式 4、标识符的命名 标识符: 段名、过程名、变量名、标号、组名、记录名、结构名、模块名、宏指令名等。 标识符可由以下字符集组成: (1)字母(a~z A~Z) (2)数字(0~9) (3)特殊符号
4.2.3 汇编语言语句类型与格式 二、语句的格式 4、标识符的命名 命名规则: (1)第一个字符一般为英文字母。 (2)如若用 就必须是第一个字符。 (3)大小字母可以混用,汇编时不加识别。 (4)特殊符号不能成标识符。 (5)若超过31个字符,只有前31个有效。 (6)标识符不能用系统的中的保留字,如助记符、伪操作指令、运算符、寄存器名等。
开始讲课 开始讲课
LEA SI,SUM1 LEA DI,SUM2 LEA BX,SUM CLC MOV CX,04H LOP1:MOV AL,[SI] ADC AL,[DI] MOV [SI],AL INC SI INC SI INC DI INC DI DEC CX JNZ LOP1 RET 4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 1、标号(LABEL): (1)标号以及属性:给存放指令的机器码所在存储单元的地址所起的名字,标号实质上是指令的名称地址(符号地址),用来转移或调用指令的操作数,表明程序转移的目标地址。 标号的三种属性: 段属性: CS 偏移量属性:IP 类型属性(TYPE):说明段内操作还是段间操作。 近程NEAR OR 远程 FAR JMP转移指令
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 (2)标号定义及组成 标号用一个标识符(规则)定义。最好用有一定含义的英文单词缩写,增加程序的可读性。 (3)使用过程定义的伪操作指令命令PROC定义一个“过程”时,过程名是一个标号,该标号作为CALL指令的操作数使用。 Mov AL,06H CALL print ………… Print PROG …………. …………. RET Print ENDP
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 2、关于操作数(operand):可由标号、界限符、常量、变量、表达式和寄存器等组成。 操作数的类型: (1)常数操作数:可为直接数值表达的常数或符号名表示的常数。 [数值常数]表示的方法: ①二进制常数 ②十六进制常数 ③八进制常数 ④十进制常数 ⑤十进制科学计数表示法,6.24E-4 Num DB 123H NUM1 DW 12 NUM2 DW 12O NUM3 DW 12B
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 单引号代表ASCII码 (1)常数操作数: [数值常数]: [字符常数]:‘A’—41H,’CD’——4344H 值 [数值符号名]:在指示性语句中:count EQU 2343H [常数表达式]:可求值的表达式,在汇编时,计算出。 DAT DB 23H+45H
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 (2)寄存器操作数:内部寄存器可以作为一个操作数使用,以其存放的数据参加操作,可以是源操作数,可以是目的操作数。IP指令指针寄存器不可以作为寄存器来使用。 8位的寄存器 16位的寄存器AX、BX、CX、DX、SI、DI、BP、SP、DS、CS、ES、SS
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 (3)存储器操作数:以指定的存储单元的数据做指令操作的内容,汇编指令中的存储器操作数实际上是偏移地址表示的存储单元。 分为:标号与变量(内存变量)(段属性、偏移属性、类型属性)
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 变量(内存变量):如变量BUFFTER 段属性:属于哪个段,段基址是多少 偏移属性: LEA AX,BUFFTER; MOV AX, OFFSET BUFFTER 类型属性: DB,DW ,DD
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 操作类型必须明确,而不允许模糊,对于含有源操作数与目的操作数的指令性语句,要求两者的数据类型必须一致。 如果双操作数类型中,一个操作数类型明确,一个不明确,汇编程序规定以明确的那个操作数做为两个操作数的 共同类型。
4.2.3 汇编语言语句类型与格式 三、关于指令性语句的说明 DAT DB 18,20,30 …… MOV AL DAT MOV AX, DAT MOV AX, WORD PTR DAT MOV [BX],100 MOV WORD PTR [BX], 100 分析类型是否一致
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 汇编语言表达式:分为 数值表达式 与 地址表达式 ,可以作为指令中的一个操作数,这就涉及到了运算符和伪操作符。 伪操作符是指示性语句和指令性语句操作数的修饰词。 表达式:由常数、变量、标号数据等再加上必要的运算符和伪操作构成。
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 1、运算符: 算术运算符、逻辑运算符、关系运算符。 (1) 算术运算符:+、—、*、/、MOD、SHR、SHL。 例如:NUM=0101 1010B 表达式 NUM SHL 1=1011 0100B MOV AX,2*0101H MOV AX,STA+2;STA为变量,表达式为存储单元地址
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 1、运算符: 算术运算符、逻辑运算符、关系运算符。 (2)逻辑运算符:AND OR XOR NOT 例如:MOV AL,77H AND 84H; MOV AX,00FFH OR 1783H ; MOV AH,,NOT 0FFH ; AL=04H AX=17FFH AH=00H
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 1、运算符: 算术运算符、逻辑运算符、关系运算符。 (2)逻辑运算符:只能出现在数值表达式中,只能对常数进行逻辑运算,其结果仍是一个常数。 注意:逻辑运算指令的助记符的符号 与 逻辑运算符是相同的,意义不同注意区别。 AND BX,77H AND 0FEH 分析
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 1、运算符: 算术运算符、逻辑运算符、关系运算符。 (3)关系运算符:EQ、LT、GT、LE、GE等运算符号。 一个关系运算符联系两个操作数,操作数可以为数值组成的数值表达式,也可以是地址表达式,但表达式运算的结果一定是一个固定的数值,用来表示逻辑运算发结果。 结果:真===关系值为1 假===关系值为0 分析
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 (3)关系运算符:EQ、LT、GT、LE、GE等运算符号。 例如: MOV AX,PORT LT 5 汇编 MOV AX,0FFFFH MOV AX, 0 分析 PORT<5---- PORT>5---
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 (3)关系运算符:一般不单独使用,常由各种运算符组合成逻辑表达式的形式。 例如: MOV BX,((PORT LT 5)AND 20H)OR ((PORT GE 5) AND 30H) 分析 PORT<5---- MOV BX,20H MOV BX, 30H PORT>5---
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符: 两类 :分析运算符 合成运算符
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符: [分析运算符 ]:对存储器地址(变量或标号)进行分析,它可对存储器的三个属性(段基址、偏移量、类型)分离出来,返回所在的位置并以数值的形式作为操作数使用。
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符:[分析运算符 ] (1)SEG :段地址操作符 功能:利用该操作符返回一个变量或标号所在的段基址。 格式:SEG 变量名 或 标号名 例如:MOV DX, SEG ABC MOV DS,DX 同一个段内所有变量的段基址是相同的。
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符:[分析运算符 ] (2) OFFSET :偏移操作符 功能:取变量或标号所在的段的偏移地址。 格式: OFFSET 变量名 或 标号名 Mov SI , OFFSET DAT1
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 例如: 数据段的DATA定义如下的变量 DATA SEGMENT DAT1 DB 20,30 DAT2 DW 2000H,3532H DAT3 DD 1234 5678H, 9ABCDEFH DATA ENDS MOV AX OFFSET DAT1 汇编成:MOV AX, 0 MOV AX OFFSET DAT2 汇编成:MOV AX, 2 MOV AX OFFSET DAT3 汇编成:MOV AX, 6
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符:[分析运算符 ] (3) TYPE :类型操作符 功能:返回取得变量或标号的类型属性值。 格式: TYPE 变量名 、标号名 或 结构名 MOV AX, TYPE DAT1(变量)
4.2.3 汇编语言语句类型与格式 四、操作数表达式使用的运算符和伪操作符 2、取值运算和属性操作符:[分析运算符 ] 内存变量类型属性值规定