当前课程知识点:微机原理与接口技术 >  第8周 汇编语言程序设计 >  第32讲 汇编语言源程序 >  汇编语言源程序_02

返回《微机原理与接口技术》慕课在线视频课程列表

汇编语言源程序_02在线视频

汇编语言源程序_02

下一节:数据定义伪指令

返回《微机原理与接口技术》慕课在线视频列表

汇编语言源程序_02课程教案、知识点、字幕

第二个问题我们来看一下

汇编语言的语句类型和它的格式

首先我们来看一下汇编语言的语句类型

汇编语言的语句类型有两种类型

一种称为指令性语句

还有一种称为指示性语句

那么所谓指令性语句是什么意思呢?

指令性语句就是我们前面学的

那些助记符所编写的程序

指令性语句就是我们前面说的那些用助记符

来编写的语句

也就是说它的主要特点是CPU可执行

比如我们的MOV指令

我们的那种IN指令 OUT指令等等

这些指令我们写完了的目的是要CPU去执行的

所以指令性语句的最大特点就是CPU

会执行

那么要让CPU执行 那么我们

它会一定要被翻译成机器语言的目标程序

所以所有的指令性语句

汇编程序都会把它翻译成

0和1这样表示的机器语言

然后由CPU去执行

这个是指令性语句的特点

那么和指令性语句对应

另外一种称为指示性语句

指示性语句就是CPU不执行的语句

也就是说它是一种假的语句

那么CPU既然不执行

它就不会被翻译成机器语言的目标程序

目标语句

所以执行性语句那么起什么作用?

你写了CPU又不执行

那么它的作用主要是为了告诉汇编程序

或者说告诉编译器

该怎么样给我分配多大的内存空间

我的程序从哪里开始 到哪里结束

等等这样的一些信息

这些信息我们将会在下一讲

里头给大家去介绍

如何告诉CPU

如何告诉汇编程序我定义了多大的内存

我的程序从哪里开始 到哪里结束

有几个逻辑段等等这些信息

都会在下一讲里介绍给大家

下面我们来说一下语句的格式

对于指令性语句我们实际上已经很熟悉了

一个完整的指令性语句

大概应该是这样子的形式

大家看到这个语句里头很多都有方括号

只有这个红颜色的这个是

助记符没有带方括号

这里的方括号请大家注意

绝对不是我们前面学指令里头

操作数那个带方括号的那种意思

我们说指令中在操作数

某一个操作数带方括号

表示这个操作数是存储器操作数

但是在这样一个里头

这里的方括号表示可以有可以没有

就是可选项的意思

那么在这里助记符我们知道就是指令的操作码

比如我们学的MOV LEA CMP ADD等等

这些都是指令助记符

也就是说它是指令码

在所有的指令性语句里头

在微机系统的所有指令性语句里头

我们说指令的操作数最多可以有两个

它也可以只显示的给出一个

也可以是两个都不显示的给出

也就是对应到我们的双操作数格式的指令

单操作数格式指令和零操作数格式的指令

所以在这里两个操作数的外面都加了方括号

表示它可以全部显示的给出

也可以全部的不显示给出

有一点

我们编写程序的时候为了阅读

或者为了为别人可读

或者是为了自己再过一段时间避免忘掉

通常我们在语句的后边

会鼓励大家加一定的注释

无论是高级语言

还是我们现在正在学习的低级语言

在汇编程序里头

注释的前面用分号来隔开

也就是说系统的编译器

或者说汇编程序

看到你这个指令性语句后边有分号的时候

分号以后的内容

它是不会被翻译成机器语言的

也就是说它是知道这后边是注释的

这个请初学者一定要习惯于加注释

这是非常好的一个编程习惯

我们知道在我们串操作指令的前面

我们可以加各种前缀

比如我们可以加REP这样无条件重复的前缀

我们也可以加条件重复的前缀

那么在其他的指令前面

我们看到我们没有讲过要加前缀

所以前缀本身不是指令

但是它是表示着一种循环的重复执行的概念

所以它在和指令助记符连在一起

可以构成一个循环体

这些是我们在串操作指令里带给大家的内容

我们实际上也在转移类指令 循环类指令

以及其他的一些程序控制类指令里头

我们都看到有这么一个东西叫做标号

比如我们说JMP NEXT

在我们前面的例子里大家看到过这样的语句

也就是无条件的转移到NEXT

那么NEXT是什么呢?

就是一个标号

标号实际上代表着下一条要取的那条指令

或者说下一条要执行的那条指令它的符号地址

也就是说它代表着代码段中的符号地址

标号可以用一些字符或者数字的组合来构成

有关标号的取名规则

请大家参阅我们相应的教材

在这里我不啰嗦了

总体来讲它有一些规定

比如它不能超过32个字母的长度等等

不能以数字开头

这些大家去看一些资料 我们就不重复了

但是这里要强调的一点

标号的后边一定要有冒号

也就是说这个NEXT

比如 如果这个NEXT到底是不是标号

取决于这个NEXT的后边是不是指令助记符

如果是指令助记符

那么这个NEXT就是标号

它后面一定要有冒号 这是词法

请大家这一点要注意一下

那么对应的指示性语句呢?

我们虽然这个时候还没有学到

我们会在下一讲里带给大家各种指示性语句

但是总体来讲

指示性语句里头也有一个很关键的东西

也叫伪指令助记符

也就是说它和指令性语句中的助记符去对应

那么伪指令助记符下一讲我们会带给大家

指令性语句的后边可以有多个操作数

但是它至少要有一个操作数

也就是说大家看到的那个操作数里

至少有一个是没有带方括号的

但是它用逗号隔开可以有多个操作数

它的操作数个数不受两个的限制

但是它受什么限制呢?

受你整个逻辑段容量的限制

也就是说所有操作数加在一起

不能够超过64K个字节这么长的空间就可以了

同样的指示性语句的后边也可以加注释

同时它前面也可以有类似于标号这样子的一个

字符串在前面

但是这个不叫标号

我们给它起名叫名字

名字和标号你可以完全取一样的名字

比如你这个名字也可以取NEXT

当然这个NEXT放在这里有点不太好

但是理论上也是可以的

但是这个名字和标号的区别在哪里呢?

是标号的这个字符串的后面

就是说这个NEXT后面一定要有冒号

而名字呢 可能这个也同样叫NEXT

但是这个名字的后面是不能有冒号的

那么你说我怎么知道我起的这个NEXT

到底是标号还是名字呢?

它的唯一的区别就是你的这个字符串

就是说这个NEXT 比如这个NEXT后边

到底是指令性助记符还是伪指令助记符

如果这个NEXT的后边是指令助记符

那么这个NEXT就是标号

如果NEXT的后边是伪指令助记符

那么这个NEXT就不是标号是名字

所以这个名字的后边是不能有冒号的

这一点特别的强调给大家

好 第三个问题我们来介绍一下

汇编语言语句中间的操作数

我们在讲指令集的时候我们开篇就介绍过

在整个指令集中操作的对象

当然所有的指令从它的定义上我们知道

指令的定义就是人发出的一种命令

这种命令要被计算机所识别

控制计算机能够完成相应的工作

所以 这个指令既然是一种

控制对方完成一种工作的命令

所以它就一定要有两个层面的含义

这里我们顺便复习一下

一个是你要做什么

再一个是对谁做 就要有两个含义

所以做什么就是它的指令的功能

比如MOV 比如ADD等等这些

那么对谁做就是操作数对象

就是我们称为操作数

所以一个指令总体上来讲表示

包括指令码和操作数两个部分

那么我们在指令集这一部分

开篇我们讲过操作数

我们说主要有三种

一种我们说存储器操作数

表示我们操作数对象在内存里

第二我们说寄存器操作数

表示我们操作对象在某个通用寄存器

或者某个段寄存器中

当然段寄存器是要被受限的

这些我们前面都讲过了

还有就是立即数

我们说这个立即数就是以常数的形式

呈现在指令中由指令直接给出来的

它所对应的寻址方式我们也讲了

叫直接寻址

叫立即寻址

这是我们在指令集

指令系统这一章里头

我们说操作数它的三种类型

那么在这里我们更加细分一下

实际上我们现在回忆一下刚才我们说

比如刚才我们说那个例子JMP NEXT

那NEXT是不是操作数呢?是的

它是JMP指令这个指令码后面的操作对象

但是这个NEXT是什么呢?

当时我们说它实际上是一种标号

所以标号是不是操作数呢?

对吧 这是一种

还有我们讲LEA指令的时候我们讲

LEA我们曾经经常看到

LEA目标操作数是DX

原操作数我们说是一个变量名

比如M1 比如MEM1 比如BUFF等等

这是我们之前举得例子里大家都看到过的

那么这些到底是不是操作数呢?

实际上它们在指令码的后边

我们说它其实也是操作数的属性

所以在这里我们把指令性语句

指示性语句合在一起

我们说整个来讲汇编语言语句中的操作数

就可以有这样的几种形式

除了我们前面已经看到过的这种

寄存器操作数和存储器操作数之外

我们还可以有常量

就是我们所谓的立即数

还可以有变量或者标号

甚至还可以有表达式

有表达式就变得有运算符

所以下边我们来把

寄存器和存储器操作数我们前面已经看到很多

我们在这里不啰嗦了

我们把下边的三种我们简单地给大家介绍一下

首先我们来看一下常量

常量我们前面说的是立即数

立即数我们可以在这里细分为数值常量

也就是说123456等等

那么除了这种数值常量以外

实际上还可以有字符常量

比如

重来说这句话

除了数字常量以外实际上还可以有字符常量

字符常量在汇编程序里头

我们把它用单引号括起来的称为字符常量

比如这样一条指令

就是将大写字母A的ACSII码送给AL

所以这条指令的执行结果AL等于41H

这个就是字符常量

所以我们用单引号括起来后

这个A就不再是十六进制的A

而是一个字符A

当然在未来我们看到定义的这些变量里头

我们的操作对象或者是我们的字符串

也可以是这样的形式

比如用单引号括起来的ABCD

那么这个ABCD一旦用单引号括起来

它就是A是A的ASCII码 B是B的ASCII码

所以这个翻译完了以后

它会对应的翻译成41H 42H 43H 44H

如果你把这个单引号去掉

你说比如我们MOV AX,ABCD

可不可以呢?

光这样写肯定不可以

如果我们后边加了H

那么ABCDH这就是一个十六进制数

是一个十六位字长的十六进制数

当然在这里请大家一定要注意

理论上这条指令是可以的

但是因为第一个数

这个ABCDH这个数的第一个数是A

是字母

所以为了防止

为了让汇编程序能够理解

到底是字符还是数值

所以如果你的数字的第一个

是字母形式的数字 也就是说A到F的话

它的前面要加0

这一点我们前面提到过

希望大家注意

我们主要要说一下变量

变量的含义我们在LEA指令

就讲这条指令的时候

我们已经反复的跟大家提示过

我们说变量实际上是我们学习这部分内容

可能同学们比较容易

理解起来有点难度的东西

变量简单的讲就是内存单元的符号地址

我们这个图大家是看到过的

对吧

这里的DATA1就是变量

DATA1代表着什么呢?

代表着这个单元

就是存放了11H的这个单元它的地址

那么它在这个形式上它只代表这一个单元

但是有可能因为你在不同的定义模式下

它可能代表着一串地方

就是说一串地方的头在这里

这个所以总的来讲

我们那些内容我们下一讲来介绍

所以在这里总的来讲

变量是内存单元的一个符号地址

它代表着

它也就代表着内存单元

所以它在本质上属于存储器操作数

因为它属于存储器操作数

所以 变量就有这样的一些属性

它有段值的属性

因为它代表的这个单元 比如这里的DATA1

它代表着这个单元 这个单元在

一旦在作为程序员的角度来讲

它一定属于某个逻辑段

这个逻辑段的段地址等于多少呢?

我们后边会看到

这个系统会自动的根据它装入操作

装入到内存不同位置系统会给它设置

那么一旦设置好这个存放11H

或者这个DATA1这个单元

它就属于某个逻辑段

它也就有相应的段地址

所以 变量的段值或者说变量的段地址

就是它所指向的这个单元的段地址

那么它既然是代表这个单元

它也一定有偏移量的属性

所以它的偏移量就是这个单元的偏移地址

这些我觉得没有问题

我们如果有过高级语言编程经历的同学

那么大家知道我们在高级语言里头

我们的变量实际上可以声明为

比如整形 比如double型 比如float型

比如char类型等等

不同类型的变量

它所占的字节的长度是不一样的

在汇编程序里也一样

所以这个就是变量的类型

在这里变量的类型也有字节类型

也有字类型 双字类型等等

这个也是在我们下一讲讲伪指令的时候

我们会带给大家

我们刚才说了这个操作数还有一个表达式

有表达式就有运算符

所以在我们汇编程序里头

操作数可以以表达式的形式来表示

在这个表达式里可以有各种算术运算符

就是加减乘除

另外还有一个取模

另外它同时它也可以有

与或非 异或这样的逻辑运算符

还有就是我们的关系运算符

属性运算符以及一些其他运算符

在这里我们不在讲其他的加减乘除

这样的运算符大家都很熟悉

与或非 异或也没有问题

我们在这里主要给大家把

取值运算符和属性运算符跟大家再介绍一下

所谓取值运算符就是用来分析

存储器操作数的属性

或者说获取变量的属性值

刚才我们说变量的属性值除了类型以外

有段值的属性 有偏移量的属性

所以取值运算符就是用来取变量的

段地址和它的偏移地址

取变量的偏移地址实际上

我们知道用LEA指令是可以的

但是实际上我们在这里

还有一个就是用运算符也是可以的

这个运算符叫OFFSET

用它就可以获取变量的偏移地址

另外呢

另外 它的取段地址的运算符叫SEG

它就是用来取变量的段地址

我们用一个例子来看一下

比如这三行指令前面两行指令

就是将变量DATA它的段地址最后送给DS

第一行指令是将变量DATA的段基地址

送给AX然后第二行把它送给DS

那么在第三行语句呢

就是取变量的偏移地址把它送给D

送给BX

这行语句我们完全可以等价于LEA指令

所以取变量的偏移地址

你用LEA指令去做也是可以的

用OFFSET运算符去取也可以的

但是你取变量的段基地址或者说段地址

没有指令 只能用这个运算符SEG

这是取值运算符

属性运算符呢

我们这个运算符大家在之前已经看到过了

因为我们说单操作数格式的指令中

如果操作数是存储器操作数的话

必须要声明它的字长

这个声明的办法就是用属性运算符PTR来声明

所以在这里我们正式的把这个运算符带给大家

比如这个例子我们实际上前面看到过

这条指令的

操作就是把原操作数12H写到

目标这个存储器的单元里头

哪个单元?BX所指的单元

但是在这里我们用属性运算符PTR

来声明了这个目标操作数

也就是这个存储器操作数的字长是一个BYTR

所以现在整个存储器操作数

也就是这个目标操作数变成了一个字节类型

因此它的原操作数就是确定是12H

如果我们现在把目标操作数这个

属性运算符PTR的前面BYTR改成WORD的话

那么这个原操作数的12H就不再是12H

而是0012H

所以这个就是属性运算符它的作用

好 有关我们汇编语言程序的一些基本的概念

我们就介绍到这里

下一讲我们将给大家具体的来介绍伪指令

也就是刚才我们指示性语句中间的伪指令助记符

下一讲我们首先要介绍的就是数据定义伪指令

这一类伪指令就是

它的作用就是来定义我们刚才说的变量的类型

好 这一讲就到这里

微机原理与接口技术课程列表:

第1周 微型计算机基础概论

-第1讲 关于本课程

--关于本课程

-第2讲 微型计算机系统

--微机系统_01

--微机系统_02

-第3讲 微型计算机一般工作过程

--微机的一般工作过程_01

--微机的一般工作过程_02

-第4讲 数制与编码

--常用计数制及其转换

--计算机中的编码

-第5讲 计算机中数的表示与运算

--数的表示

--符号数的表示

--数的表示与运算

-第6讲 基本逻辑运算与逻辑电路

--基本逻辑运算与逻辑门

--常用逻辑运算及电路

-第7讲 本周小结

--本周小结

-第1周 微型计算机基础概论--第一周单元测验

第2周 8088微处理器

-第8讲 8088微处理器

--8088 CPU_01

--8088 CPU_02

-第9讲 8088 CPU主要引线及机构

--8088 CPU主要引线

--8088 CPU内部结构

--8088 CPU内部寄存器

-第2周 8088微处理器--第二周单元测验

第3周 实模式存储器寻址与总线

-第10讲 实模式存储器寻址

--实模式存储器寻址_01

--实模式存储器寻址_02

--实模式存储器寻址_03

-第11讲 8088系统总线

--8088系统总线

-第12讲 微处理器小结

--微处理器小结

-单元测验--作业

第4周 数据传送指令

-第13讲 指令概述

--指令概述

-第14讲 寻址方式

--寻址方式

-第15讲 通用数据传送指令

--通用数据传送指令_01

--通用数据传送指令_02

--通用数据传送指令_03

-第16讲 地址传送指令

--地址传送指令

-第17讲 输入输出指令

--输入输出指令

-第4周 数据传送指令--第四周单元测验

第5周 算术运算、逻辑运算与移位操作指令

-第18讲 算术运算指令

--加法运算指令

--减法指令

--乘除运算指令

-第19讲 逻辑运算指令

--逻辑运算指令_01

--逻辑运算指令_02

-第20讲 移位操作指令

--移位操作指令

-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验

第6周 串操作指令

-第21讲 关于串操作指令的说明

--串操作指令说明

-第22讲 串传送与串比较

--串传送与串比较

-第23讲 串扫描指令

--串扫描指令

-第24讲 串装入与串存储指令

--串装入与串存储指令

-第六周单元测验--作业

第7周 程序与处理器控制

-第25讲 程序控制指令说明

--程序控制类指令说明

-第26讲 转移类指令

--无条件转移指令

--条件转移指令

-第27讲 循环控制指令

--循环控制指令

-第28讲 过程调用指令

--过程调用指令

-第29讲 中断指令

--中断指令

-第30讲 处理器控制指令

--处理器控制指令

-第31讲 指令系统小结

--指令系统小结

-第7周 程序与处理器控制--第七周单元测验

-第7周 程序与处理器控制--第七周作业

第8周 汇编语言程序设计

-第32讲 汇编语言源程序

-- 汇编语言源程序_01

-- 汇编语言源程序_02

-第33讲 伪指令

--数据定义伪指令

--符号与段定义伪指令

--汇编语言源程序结构例

--其它伪指令

-第34讲 系统功能调用

--系统功能调用_01

--系统功能调用_02

-第35讲 汇编语言程序设计示例详解

--程序设计示例1

--汇编语言程序设计示例_02

-第36讲 汇编语言程序设计小结

--汇编语言程序设计小结

-第8周 汇编语言程序设计--第八周单元测验

-第8周 汇编语言程序设计--第八周作业

第9周 半导体存储器

-第37讲 半导体存储器概述

--半导体存储器概述

-第38讲 内存单元编址

--存储单元编址

-第39讲 随机存取存储器RAM

-- RAM_01

--RAM_02

-第40讲 只读存储器ROM

--ROM_01

--ROM_02

-第九周单元测验--作业

第10周 半导体存储器扩展技术

-第41讲 半导体存储器扩展

--半导体存储器扩展_1

--存储器扩展_2

--半导体存储器扩展_3

-第42讲 半导体存储器小结

--半导体存储器小结

-第十周单元测验--作业

-第十周作业--作业

第11周 输入输出与中断技术

-第43讲 基本I/O接口

--I/O系统概述_01

--I/O系统概述_02

-第44讲 简单接口芯片

--简单接口芯片

-第45讲 基本输入输出方法

--基本I/O方法

-第46讲 简单I/O控制系统设计

--简单I/O控制系统设计1

--简单I/O控制系统设计2

-第47讲 中断技术

--中断技术1

--中断技术2

-第48讲 输入输出与中断技术小结

--本周小结

-第十一周单元测验--作业

第12周 可编程并行数字接口

-第49讲 可编程定时计数器

--可编程定时计数器8253_01

--可编程定时计数器8253_02

--可编程定时计数器8253_03

-第50讲 可编程并行接口

--可编程并接口8255_01

--可编程并行接口8255_02

--可编程并行接口8255_03

-第51讲 可编程接口小结

--本周小结_01

--本周小结_02

-第十二周单元测验

第13周 模拟量的输入输出

-第52讲 模拟量的输入输出

--模拟量的输入输出

-第53讲 D/A转换器

--D/A转换器_01

--D/A转换器_02

-第54讲 A/D转换器

-- A/D转换器_01

--A/D转换器_02

-第十三周单元测验--作业

第14周 系统综合设计示例详解

-第55讲 I/O接口系统综合设计示例详解I

--综合设计示例详解I_01

--综合设计示例详解I_02

-第56讲 综合设计示例详解II

--综合设计示例详解II_01

--综合设计示例详解II_02

-第57讲 结束语

--结束语

汇编语言源程序_02笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。