第一章 预备知识.docx
《第一章 预备知识.docx》由会员分享,可在线阅读,更多相关《第一章 预备知识.docx(12页珍藏版)》请在冰豆网上搜索。
第一章预备知识
第一章预备知识
汇编语言是面向机器的低级语言:
和其他计算机语言相比,能够充分利用计算机硬件特性;随机器的不同而不同。
学习汇编语言必须做到:
了解特定机器的硬件;了解其数据类型的表示方法;了解其指令系统等。
本章的内容包括:
什么是汇编语言;
汇编源程序举例;
汇编和调试过程;
寄存器组
1.1机器语言与汇编语言
人们用计算机语言操纵计算机,和计算机交流信息。
一般来说,计算机语言可以分为以下几类:
低级语言是面向机器的,为特定机器提出的;
高级语言是面相人的,接近于自然语言,为了方便人们使用提出的。
一、机器语言
机器指令:
能够被计算机识别,并能直接加以执行的语句。
机器语言:
由机器指令构成的集合。
机器指令也叫做硬指令,不同类型的CPU都有自己特有的、一定数量的基本指令,组成其特有的机器语言。
机器指令用二进制代码来表示,这样才能够被计算机识别并直接执行。
机器指令的一般形式为:
例如:
完成操作:
MOVAX,7FH;7FH→AX
操作码指出了运算的种类,如数据传送、加减运算等。
地址码指出了参与运算的操作数和运算结果的存放位置。
用机器语言编程,就意味着要用二进制数0和1编写程序。
这样做效率很低,而且容易出错。
但为了能够充分利用硬件特性,在一些时候仍然需要用低级语言编程,因此人们想办法对机器语言进行改进,提出了汇编语言。
此后很少直接使用机器语言了。
二、汇编语言
从本质上看,汇编语言是一种符号化的机器语言:
用助记符表示机器指令的操作码;
用变量代替操作数的存放地址;
用在语句前加一个标号,来代表该指令的存放地址。
汇编语言的主要操作与机器指令一一对应,是一种用符号书写的(不再是二进制代码)、并遵循一定语法规则的计算机语言。
例如:
MOVAX,7FH
MOVBX,1234H
ADDAX,BX
汇编语言是为了方便用户使用而设计的一种符号语言,并不能直接被计算机识别,必须将汇编语言程序翻译成机器语言程序(也叫目标程序),才能由计算机所执行。
翻译过程的图形表示:
汇编程序不同于汇编语言程序。
汇编语言程序是用汇编语言写的程序,汇编程序是翻译汇编语言程序的加工程序。
汇编程序可分为:
ASM——小汇编程序,占有较小的存贮区,但功能较弱,没有宏功能。
MASM——宏汇编程序,需要较大的存贮区,但功能强大,具有宏能力。
这门课使用的是宏汇编程序。
宏,是指用一个宏指令名字代替程序中重复出现的一组语句,在其它的地方,可以用宏指令名字及不同的参数来调用。
宏的功能类似于子函数,但实现方式不同。
此外,汇编语言还必须指出:
程序从什么地方开始、什么时候结束、数据放在哪里、数据类型是什么、临时存贮区等,这需要一组另外的指令指示MASM工作,这种指令叫做伪指令。
三、为什么要学习汇编语言?
汇编程序产生的目标程序简短,占用的存贮空间小,执行速度快,适合于编写过程控制、多媒体接口、通讯程序。
有些无法用高级语言实现的操作,可以由汇编完成。
机器语言
汇编语言
高级语言
计算机能否直接识别
能
不能
不能
易用性
差
中
好
占据空间
小
小
大
执行速度
快
快
慢
用途
特殊
加密/解密
系统核心
要求速度快,代码短的程序
直接操纵I/O
信息安全
一般性软件开发
1.2汇编源程序举例举例
一、完整源程序
为了对汇编语言有具体的理解,下面编写一个简单的程序:
.386
;堆栈段
STACKSEGMENTUSE16STACK;段名和组合类型
DB200DUP(0);堆栈的大小为200个字节
STACKENDS
;数据段
DATASEGMENTUSE16;段为16位段
SUMDW?
;SUM为字变量,初值不定
DATAENDS
;代码段
CODESEGMENTUSE16
ASSUMECS:
CODE,SS:
STACK,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX;数据段首址送DS
MOVCX,50;循环计数器置初值
MOVAX,0;累加器置初值
MOVBX,1;1→BX
NEXT:
ADDAX,BX;(AX)+(BX)→AX
INCBX
INCBX;(BX)+2→BX
DECCX;(CX)-1→CX
JNENEXT;(CX)≠0转NEXT
MOVSUM,AX;(CX)=0累加结果→SUM
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART;源程序结束语句。
程序运行时,启动地址为START
二、分段
在该例中,一共定义了三个段:
堆栈段、数据段和代码段。
.386
;堆栈段
STACKSEGMENTUSE16STACK
…
STACKENDS
;数据段
DATASEGMENTUSE16
…
DATAENDS
;代码段
CODESEGMENTUSE16
ASSUMECS:
CODE,SS:
STACK,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
…
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
三、语句
该例中的源程序由一系列语句组成。
语句的一般格式为:
[名字]操作符[操作数或地址][;注释]
1.操作符可分为3类:
●指令
●伪指令
●宏
2.操作数也可分为3类:
●数值
●寄存器
●内存
3.常用指令:
MOVAX,0
ADDAX,BX
INCAX
DECCX
等
1.3汇编和调试过程
一、汇编过程
1.必备软件
●MASM.EXE
●LINK.EXE
●TD.EXE
●其他:
文本编辑器、DOSBOX等
2.命令
●MASMDEMO.ASM
汇编DEMO.ASM,应该生成MASM.OBJ
●LINKDEMO.OBJ
连接DEMO.OBJ,应该生成MASM.EXE
●TDDEMO.EXE
调试DEMO.EXE
二、调试程序TurboDebugger的使用
1.如图,TD的界面可分为:
●菜单
●代码操作区
●数据操作区
●寄存器操作区
●标记寄存器操作区
●堆栈段操作区
标记有:
●当前指令标记
●当前栈顶标记
2.TD的主要操作
●单步执行:
F7,F8
●设置(取消)断点:
F2
●直接执行:
F9
3.查看数据区
4.查看用户界面
5.修改数据、指令、寄存器内容
1.4Intel80x86微处理器简介
汇编语言是一种面向机器的低级语言,要学好它,必须对计算机硬件结构有一个初步了解。
一、微型计算机的组成
微型计算机主要由微处理器(CPU)、主存贮器(MM)、外部设备及互连部件组成。
如下图所示:
微处理器是计算机系统的核心。
存贮器:
存放程序以及数据、信息、中间结果。
外设:
I/O设备和大容量存贮器。
I/O设备包括显示器、打印机、键盘等。
二、Intel80x86内部结构
个人电脑的发展,经过了8086、80186、80286、80386等几代产品,Intel80x86是1985年推出的32位处理器,按功能可分为执行部件(EU)和总线接口部件(BIU)。
其中运算器执行所有的算术和逻辑运算指令;控制器负责计算机的控制工作(如取出指令、发出各种控制命令)。
其内部结构如下所示:
各部分的功能:
1.总线接口部件:
是CPU与整个计算机系统之间的高速接口
功能:
接受所有的总线操作请求,并按优先权进行选择,最大限度地利用本身的资源为这些请求服务。
2.执行部件:
寄存器组、标志寄存器、算逻部件、控制部件等组成
功能:
从译码指令队列中取出指令并且执行
(1)数据寄存器组(EAX,EBX,ECX,EDX)
●EAX(累加器)Accumulator
●EBX(基址寄存器)Base
●ECX(计数寄存器)Count
●EDX(数据寄存器)Data
作用:
用来保存操作数、运算结果或作指示器、变址寄存器,减少存取操作数所需要的访问总线和主存储器的时间,加快运行速度。
注意:
●它们既可作32位、16位寄存器,也可作8位寄存器使用。
●16位和8位的寄存器不能作指示器或变址寄存器。
(2)指示器变址寄存器组(ESI、EDI、ESP、EBP)
作用:
一般用来存放操作数的偏移地址,用作指示器或变址寄存器。
●ESI(SourceIndex),称为源变址寄址器;字符串指令源操作数的指示器;
●EDI(DestinationIndex),称为目的变址寄存器;字符串指令目的操作数的指示器
●ESP(StackPointer),称为堆栈指示器,存放的是当前堆栈段中栈顶的偏移地址;
●EBP(BasePointer),为对堆栈操作的基址寄存器;
3.指令预取部件和指令译码部件
指令预取部件:
通过总线接口部件,把将要执行的指令从主存中取出,送入指令排队机构中排队。
指令译码部件:
从指令预取部件中读出指令并译码,再送入译码指令队列排队供执行部件使用。
指令指示器:
它总是保存着下一条将要被CPU执行的指令的偏移地址,其值为该指令到所在段首址的字节距离。
4.分段部件和分页部件
(1)使用分段部件和分页部件实现虚拟存储空间映射到物理存储空间
程序员使用二维地址,即“段地址:
段内偏移地址”
段地址:
段内偏移地址一维的线性的地址
虚拟的线性的地址主存储器的物理地址
(2)段寄存器用来保存段首地址
●代码段寄存器CS
●堆栈段寄存器SS
●数据段寄存器DS
●附加段寄存器ES
●附加段寄存器FS
●附加段寄存器GS
5.指令执行过程:
(1)指令预取部件和指令译码部件
由EIP取得指令的偏移地址
EIP增量,形成下一条指令的地址
(2)分段部件和分页部件
由分段部件和分页部件,将“CS:
EIP”转换为指令的物理地址
(3)总线接口部件
从主存中取指令送到预取指令队列
(4)CPU按序从预取指令队列中取出指令送到指令译码部件。
(5)指令译码部件译码,执行部件执行指令;
(6)执行过程中若需要取主存操作数,从指令中取得操作数偏移地址
(7)分段部件和分页部件
由分段部件和分页部件,将“段首址:
偏移地址”转换为操作数的物理地址
(8)总线接口部件
从主存中取数据送到执行部件
三、80x86的三种工作方式
1.实方式(实际地址)
操作相当于一个可进行32位快速运算的8086(内部32位、外部总线16位数据、20位地址)
2.保护方式(虚地址)
是80386设计目标全部达到的工作方式,通过对程序使用的存储区采用分段、分页的存储管理机制,达到分级使用互不干扰的保护目的。
能为每个任务提供一台虚拟处理器,使每个任务单独执行,快速切换。
3.虚拟8086方式
保护方式下所提供的同时模拟多个8086处理器。
本章作业
一、1.2
二、利用寄存器,编程实现:
(12+34)*56–78,结果放在寄存器AX中