汇编语言程序设计ppt课件第1章.ppt

上传人:小飞机 文档编号:2159227 上传时间:2023-01-21 格式:PPT 页数:84 大小:926KB
返回 下载 相关 举报
汇编语言程序设计ppt课件第1章.ppt_第1页
第1页 / 共84页
汇编语言程序设计ppt课件第1章.ppt_第2页
第2页 / 共84页
汇编语言程序设计ppt课件第1章.ppt_第3页
第3页 / 共84页
汇编语言程序设计ppt课件第1章.ppt_第4页
第4页 / 共84页
汇编语言程序设计ppt课件第1章.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《汇编语言程序设计ppt课件第1章.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计ppt课件第1章.ppt(84页珍藏版)》请在三一办公上搜索。

1、第一章 预备知识,一、本章的学习内容:本章学习汇编语言的预备知识:1什么是汇编语言?2Intel 80X86微处理器中的寄存器组3主存储器的编址方式及物理地址的形成方式4.数和符号在计算机中的表示方法5.标志寄存器6汇编源程序的基本结构,第一章 预备知识,第一章 预备知识,二、本章的学习重点:1汇编语言、汇编程序的概念280X86寄存器组3.堆栈的概念、进栈、出栈指令4实模式和保护模式下物理地址的形成5.整数和字符串的表示方法6.CF、OF、ZF、SF标志位7汇编源程序举例,三、本章学习的难点:1寄存器组各个寄存器的名称和用途2PUSH/POP指令、堆栈指示器的变化3保护模式下物理地址的形成4

2、.有符号数、无符号数及其运算对于标志寄存器 的影响,第一章 预备知识,1.1 机器语言与汇编语言,1.机器语言(指令)机器语言的特点:由0和1组成的二进制码。(2)能为计算机识别并执行。(3)不同类型的机器,不同类型的CPU都有自己特有的、一定数量的基本指令。,机器指令(硬指令):指挥计算机完成某一基本操作的命令,是面向机器的。操作种类 操作数存放位置例:1011 1011 BB 操作码0011 0100 34 操作数0001 0010 12操作:1234H BX,1.1 机器语言与汇编语言,操作码,地址码,指令系统:每台计算机都规定了自己所特有的、一定数量的基本命令,这批指令的全体为计算机的

3、指令系统机器语言:机器指令的集合机器语言程序:用机器语言编写的程序,1.1 机器语言与汇编语言,2.汇编语言(改进的方案)助记符 变量或标号 汇编语言:一种用符号书写的、其操作与机器指令一一对应的,并遵循一定语法规则的计算机语言。,1.1 机器语言与汇编语言,操作码,地址码,例2:刚才的例子若用汇编语言来书写:操作码 地址码 BB 34 12 MOV BX,1234H,1.1 机器语言与汇编语言,汇编源程序 用汇编语言编写的程序类似于高级语言编写的源程序 汇编程序 把汇编源程序翻译成目标程序的(语言加工)程序类似于高级语言的编译程序汇编 汇编程序对源程序进行翻译的过程 类似于高级语言的编译过程

4、,1.1 机器语言与汇编语言,机器语言、汇编语言和高级语言的比较,1.1 机器语言与汇编语言,1.2 Intel系列机简介,微型计算机的构成,1.2.2 80 x86微处理器结构,80 x86微处理器结构,1总线接口部件:是CPU与计算机系统中其它功能部件之间的高速接口 功能:接受所有的总线操作请求,并按优先权进 行选择,最大限度地利用本身的资源为这 些请求服务。2执行部件:寄存器组、标志寄存器、算逻部件、控制部件等组成 功能:从译码指令队列中取出指令并且执行,1.2.2 80 x86微处理器结构,(1)数据寄存器组(EAX,EBX,ECX,EDX)EAX(累加器)Accumulator EB

5、X(基址寄存器)Base ECX(计数寄存器)Count EDX(数据寄存器)Data 作用:用来保存操作数、运算结果或作指示 器、变址寄存器,减少存取操作数所需 要的访问总线和主存储器的时间,加快 运行速度。,1.2.2 80 x86微处理器结构,注意:它们既可作32位、16位寄存器,也可作8位寄存器使用。8位的寄存器不能作指示器或变址寄存器。,1.2.2 80 x86微处理器结构,(2)指示器变址寄存器组(ESI、EDI、ESP、EBP)作用:一般用来存放操作数的偏移地址,用作 指示器或变址寄存器。ESP(Stack Pointer),称为堆栈指示器,存放的是当前堆栈段中栈顶的偏移地址;E

6、BP(Base Pointer),为对堆栈操作的基址寄存器;ESI(Source Index),称为源变址寄址器;字符串指令源操作数的指示器EDI(Destination Index),称为目的变址寄存器;字符串指令目的操作数的指示器,1.2.2 80 x86微处理器结构,3.指令预取部件和指令译码部件指令预取部件:通过总线接口部件,把将要执行的指令从主存中取出,送入指令排队机构中排队。指令译码部件:从指令预取部件中读出指令并译码,再送入译码指令队列排队供执行部件使用。指令(地址)指示器:它总是保存着下一条将要被CPU执行的指令的偏移地址(简称EA),其值为该指令到所在段首址的字节距离。,1.

7、2.2 80 x86微处理器结构,4分段部件和分页部件使用分段部件和分页部件实现虚拟存储空间映射到物理存储空间程序员使用二维地址 段地址:段内偏移地址分段部件段地址:段内偏移地址 一维的线性的地址分页部件虚拟的线性的地址 主存储器的物理地址,1.2.2 80 x86微处理器结构,段寄存器:低档处理器保存段首地址,高档处理器保存选择字 代码段寄存器 CS 堆栈段寄存器 SS 数据段寄存器 DS 附加段寄存器 ES 附加段寄存器 FS 附加段寄存器 GS,1.2.2 80 x86微处理器结构,指令执行过程:(1)指令预取部件和指令译码部件 EIP 指令的偏移地址 EIP增量,形成下一条指令的地址(

8、2)分段部件和分页部件CS:EIP 指令的物理地址(3)总线接口部件从主存中取指令 预取指令队列,1.2.2 80 x86微处理器结构,(4)CPU按序从预取指令队列中取出指令 指令译码部件。(5)指令译码部件译码 执行部件执行指令;(6)执行过程中若需要取主存操作数 操作数偏移地址(7)分段部件和分页部件偏移地址,段寄存器 操作数的物理地址(8)总线接口部件从主存中取数据 执行部件,1.2.2 80 x86微处理器结构,1.实方式(实际地址)操作相当于一个可进行32位快速运算的8086(内部32位、外部总线16位数据、20位地址)2.保护方式(虚地址)是80X86设计目标全部达到的工作方式,

9、通过对程序使用的存储区采用分段、分页的存储管理机制,达到分级使用互不干扰的保护目的。能为每个任务提供一台虚拟处理器,使每个任务单独执行,快速切换。3.虚拟8086方式保护方式下所提供的同时模拟多个8086处理器。,1.2.2 80 x86的三种工作方式,存储器:用来存放程序和数据的装置,包括主存和外存。主存储器:主机内部的半导体存储器,相对外存,容量小,速度快,成本高。,1.3 主存储器和物理地址的形成,主存储器编址方式主存储器的基本记忆单元是位,它能记忆/容纳一个二进制数0或1。8位组成一个字节,当前微机一个存储单元存放一个字节。为了区别不同的存储单元,每一存储单元都被指定一个编号,编号作为

10、存储单元的物理地址。,1.3.1 主存储器,80X86系统中主存是按字节编址的,即字节作最小访问单位。,1.3.1 主存储器,字:由2个字节组成,字地址由两字节地址较小的一个(即低字节)的地址表示。存放的方式是低8位存放低字节,高8位存放高字节。双字:双字的地址也由四个字节中的最低地址表示,1.3.1 主存储器,问题:一个字数据该怎样存入计算机主存呢?双字数据呢?高-高 低-低字:要占有连续的两个字节.16位中,低8位存放在低字节地址中,高8位存放在相邻的高字节地址中。双字:32位中,低16位存放在低字地址中,高16位存放在相邻的高字地址中。,1.3.1 主存储器,1.3.1 主存储器,从逻辑

11、上来看:是内存中开辟的一片存贮区,这片存贮区采用的存贮方式是一端固定,一端活动,即只允许在一端插入或删除(访问可任意)。堆栈中数据的存取原则:“先进后出”,堆栈中的数据也称元素或栈项。元素进栈称压入,出栈称弹出。,1.3.2 堆栈,从硬件的观点看堆栈必须由一片存贮单元和一个指示器组成。固定端叫栈底。栈指针用来指示栈顶进栈和出栈时偏移地址的变化指针所指示的最后存入信息的单元叫栈顶,所有信息的存取都在栈顶进行,栈指针总是指向栈顶的。,1.3.2 堆栈,问题:为什么要用堆栈?程序中经常用到子程序或处理中断,此时,主程序需要把子程序或中断程序将用到的寄存器内容保护起来,以便子程序或中断返回后,主程序能

12、够从调用点或中断点处继续执行。此外,堆栈还经常用于:保护和恢复现场主程序和子程序之间传递参数子程序中的局部变量,1.3.2 堆栈,1.进栈指令PUSH 格式:PUSH OPS 功能:将立即数、寄存器、段寄存器或存贮器中的一个字/双字数据压入堆栈。例:PUSH AX 设:(AX)=4241H(SP)=10000H执行:(SP)-2SP(AX)(SP),1.3.2 堆栈,1.3.2 堆栈,出栈指令POP 格式:POP OPD 功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或字/双字存贮单元中。例:POP BX设指令执行前:(BX)=1111H,堆栈内容如上题所示。,1.3.2 堆栈,1.

13、3.2 堆栈,问题的由来 8086的限制,20位地址总线,16位寄存器(SP,BP,SI,DI)。问题:如何通过16位寄存器访问1MB的内存解决:将1M字节主存分段,每段最多64K字节,1.3.3 存储器物理地址的形成,分段管理的方法:段寄存器保存起始首地址+段内偏移地址的总体策略。段首地址分别存放在:段寄存器CS、DS、ES、SS、FS、GS中 段内偏移地址:段内相对于段起始地址的偏移值,往往由SP、BP、SI、DI、IP给出。,1.3.3 存储器物理地址的形成,1.实模式PA=段寄存器保存的16位二进制数后补4个0+EA,1.3.3 存储器物理地址的形成,分段的实际作用:(1)实现了16位

14、表示20位的地址;(2)当程序和数据的大小64KB时,编制的程序可只关心EA,而不用管它的起始地址在哪(便于程序在主存中任何位置运行)(3)便于不同目的的程序或数据分开存放,使程序各部分的含义更加明确。,1.3.3 存储器物理地址的形成,2.保护模式保护什么:分清不同程序使用的存储区域,不允许随便使用别人的数据和代码。必要条件:(1)要标记每段存储区的所有者或被使用的权限级别。(2)要标记使用者是谁(权限级别)。(3)中间环节:CPU要去判断此次访问是否合法。,1.3.3 存储器物理地址的形成,(1)如何标记存储区 操作系统每次将某块存储区分给某程序使用时,用8个字节的描述符描述这段存储区的特

15、征。,1.3.3 存储器物理地址的形成,1.3.3 存储器物理地址的形成,(2)如何标记使用者,1.3.3 存储器物理地址的形成,程序的权限由程序所在的段决定,由当前程序正在使用的段寄存器内的段选择符反映。,1.3.3 存储器物理地址的形成,(3)中间执行环节:CPU去判断例如,执行:MOV AL,DS:100H设:(CS)=0000000000001 1 11 B,(DS)=0000000000001 0 01 B,(a)程序权限与被访问数据段的权限的关系;(b)(DS)指向的描述表中寻找描述符;(c)对应描述符描述的段是否可以被访问;(类别、权限)(d)从描述符2中提取段的首地址(32位)

16、;(e)段的首地址(32位)+32位EA(100H)=线性地址,不分页时即为PA(f)送出PA,选中存储单元,将内容读出后送入AL中。,1.3.3 存储器物理地址的形成,保护方式的实际含义:程序知道的“段首址”实际上是一个代号,是一个虚拟的起始地址,CPU通过转换才能获得真正的段首地址。在这个由CPU完成的转换过程中,实现了访问权限的判断,达到了保护的目的。,1.3.3 存储器物理地址的形成,1.4 数据在计算机内的表示形式,对于有符号数,一律采用二进制补码,对n位数有:,1.4.1 数值数据,补码表示的几个特点:1.所有正数的补码表示最左(高)位为0,其二进制补码表示为本身;2.所有负数的补

17、码表示最左(高)位为1,其补码表示为:(原码)除符号位保持不变外,其它位取反加1。例如:设n=8,50补=00110010B补=00110010B-50补=-00110010B补=11001110B,1.4.1 数值数据,1.4.1 数值数据,3.一个二进制补码的最高位向左延伸S位,所得到的仍是此数的补码表示。,例:设n=8 X1=-0101 0111B(-87),X2=-0011 0101B(-53),求X1+X2补 X1+X2补=X1补+X2补=1010 1001B+1100 1011B=1 0111 0100B(116)0 相加后,原本8位的二进制数变成了9位,这多出的一位称为进位位。由

18、于一个字节只能是8位,多出的一位(即进位位)就被丢掉了,这种情况称为溢出。,1.4.1 数值数据,在标志寄存器中有一溢出位OF,当出现上述情况时,则OF位置1,检查OF就可判断运算是否溢出。对加运算来说,使OF位置1的条件是:同符号数相加,结果的符号与之相反,则OF为1,否则为0。即:正数+正数=负数 负数+负数=正数 OF=1 OF=1 正数+正数=正数 负数+负数=负数 OF=0 OF=0,1.4.1 数值数据,例:设n=8,X1=-0100 0010B(-66),X2=0110 1101B(109),求X1补-X2补。X1补-X2补=X1补+X2补=1011 1110B+1001 001

19、1B=1 0101 0001B(81)0 在用补码作减运算时,负数减正数,一定为负数(结果),而结果为正说明产生了溢出。,1.4.1 数值数据,对减运算来说,如果被减数与减数异号,且结果的符号与减数相同(与被减数相反),说明运算产生了溢出,结果是错误,否则不是溢出。即:正数-负数=负数 负数-正数=正数 OF=1 正数-负数=正数 负数-正数=负数 OF=0,1.4.1 数值数据,1.4.1 数值数据,无符号数表示范围,有符号数表示范围,1.4.1 数值数据,BCD(Binary Coded Decimal)码(8421码)用4位二进制数(例如00001001)表示1位十进制数(09)。如:1

20、983=0001 1001 1000 0011 BCD非压缩的BCD码:一个字节存放一个十进制数位00000000=0 00000001=1 00000010=2压缩的BCD码:一个字节存放2个十进制数码00010000=10 10001001=89,1.4.2 BCD码,1.4.3 字符数据,键盘输入的字母和数字、显示器显示的文字等都是字符信息。西文:常用的将字符与2进制数对应起来的编码方法是美国信息标准交换代码ASCII码。汉字:GB2312编码 区位码表:分94区*94位,包括一级汉字(最常用汉字,按拼音排序)和二级汉字(稍常用汉字,按部首排序),均为简体汉字,共约6700个。,标志寄存

21、器用来保存在一条指令执行之后,CPU所处状态的信息及运算结果的特征16位标志寄存器:FLAGS32位标志寄存器:EFLAGS,1.5 标志寄存器,一、条件标志位 1符号标志SF(7)若运算结果为负则SF=1,否则SF=0;这里负是指运算结果的最高位为1则SF=1 2零标志ZF(6)若运算结果为0则ZF=1,否则ZF=0例:MOV AX,0ADD AX,1 SF=0 ZF=0SUB AX,1 SF=0 ZF=1SUB AX,2 SF=1 ZF=0,1.5.1 标志位,3溢出标志OF(11)当将操作数作为有符号数看时,使用该标志位判断运算结果是否溢出。加法:若同符号数相加,结果的符号与之相反则OF

22、=1,否则OF置0。减法:被减数与减数异号,而结果的符号与减数相同则OF=1,否则置0。,1.5.1 标志位,4进位标志CF(0)将操作数看作无符号数时,使用该标志位判断运算结果是否发生了进位或者借位。加法:若运算结果从字或字节的最高位向前产生了进位则CF置1,否则置0。减法:两数相减,若将它们看作无符号数,则够减无借位置0,有借位置1。,1.5.1 标志位,实际运算结果 应得结果 看作无符号数 看作有符号数 0000 0100 4+4+0000 1011+11+(+11)0000 1111 15+15 无符号数 15 CF=0 OF=0 有符号数 15,1.5.1 标志位,1.5.1 标志位

23、,实际运算结果 应得结果 看作无符号数 看作有符号数 0000 0111 7+7+1111 1011+251+(-5)1 0000 0010 258+2 无符号数2 CF=1 OF=0 有符号数2,1.5.1 标志位,实际运算结果 应得结果 看作无符号数 看作有符号数 0000 1001 9+9+0111 1100+124+(+124)1000 0101 133+133 无符号数133 CF=0 OF=1有符号数-123,1.5.1 标志位,实际运算结果 应得结果 看作无符号数 看作有符号数 1000 0111 135-121+1111 0101+245+(-11)1 0111 1100 38

24、0-132 无符号数124 CF=1 OF=1有符号数124,5奇偶标志位PF(2)当运算结果(指低8位)中1的个数为偶数时,PF置1,否则置0。该标志位主要用于检测数据在传输过程中的错误。6辅助进位标志位AF(4)标识作字节运算的时候低半字节向高半字节的进位和借位。有进位和借位时AF置1,否则置0。,1.5.1 标志位,二、控制标志位1方向标志DF(10)控制串操作指令的处理方向DF=0,地址递增(从低地址向高地址变化)DF=1,地址递减(从高地址向低地址变化)2中断允许标志IF(9)控制CPU是否允许响应外设的中断请求。IF=0,关中断(CPU屏蔽外设的中断请求)IF=1,开中断(CPU响

25、应外设的中断请求)3跟踪(单步)标志TF(8)控制单步执行。TF=0,CPU连续工作TF=1,CPU单步执行,1.5.1 标志位,1.标志寄存器传送指令 LAHF 功能:将标志寄存器的低8位AH 说明:本指令不带操作数,也不影响标志位。SAHF 功能:将(AH)标志寄存器的低8位。说明:标志寄存器原来低8位的内容全部被冲掉,以AH的内容来取代。但它算不影响高字节内容。(因高字节中以控制标志为主,不能随便改变),1.5.2 标志寄存器操作指令,标志寄存器进栈指令PUSHF 功能:将标志寄存器内容压入堆栈 即:(SP)2SP(FLAGS)(SP)标志寄存器出栈指令POPF 功能:将栈顶的内容送入标

26、志寄存器,1.5.2 标志寄存器操作指令,2.标志位操作指令 CLC 使CF=0(Clear carry)进位标志CF CMC 使CF取反(Complement carry)STC 使CF=1(Set carry)CLD 使DF=0(Clear direction)方向标志DF STD 使DF=1(Set direction)CLI 使IF=0(Clear interrupt)中断标志IF STI 使IF=1(Set interrupt),1.5.2 标志寄存器操作指令,.386(绿色部分可省略,红色为段名);数据段DATA SEGMENT USE16;段为16位段 SUM DW?;SUM为字

27、变量,初值不定DATA ENDS,1.6 汇编源程序举例,;堆栈段 STACK SEGMENT USE16 STACK;段名和组合类型 DB 200 DUP(0);定义堆栈为200个字节STACK ENDS,1.6 汇编源程序举例,;代码段CODE SEGMENT USE16 ASSUME CS:CODE,SS:STACK,DS:DATASTART:MOV AX,DATA MOV DS,AX;数据段首址送DS,1.6 汇编源程序举例,MOV CX,50;循环计数器置初值 MOV AX,0;累加器置初值 MOV BX,1;1BXNEXT:ADD AX,BX;(AX)+(BX)AX INC BX

28、INC BX;(BX)+2BX DEC CX;(CX)-1CX JNE NEXT;(CX)0转NEXT MOV SUM,AX;(CX)=0累加结果SUM,1.6 汇编源程序举例,MOV AH,4CH INT 21H;返回DOSCODE ENDS END START;源程序结束语句。程序运行时,启动地址为START。,1.6 汇编源程序举例,与C语言程序的对比:main()int sum=0;/初始化变量 int i,j;j=1;for(i=0;i50;i+)sum=sum+j;/求和j+=2;比较:C语言程序编译成可执行文件之后,大小为24K字节。汇编语言为几百字节。,1.6 汇编源程序举例,

29、总结:汇编语言语句的格式名字 操作符 操作数或地址;注释名字:段名、变量名、标号名 字母、数字、特殊符号(_、等)组成,不能以数字开始。不可重名、不可与关键字相同,1.6 汇编源程序举例,机器指令助记符=机器指令语句 操作符 伪指令助记符=伪指令语句 宏定义名=宏指令语句,1.6 汇编源程序举例,操作数:2个:ADD AX,BX 双操作数指令 1个:INC AX 单操作数指令 0个:CLC 零操作数指令,1.6 汇编源程序举例,本章应掌握的主要问题:1汇编语言、汇编源程序、汇编程序的概念。2通用寄存器组(EAX EBX ECX EDX)、作指示和变址寄存器的寄存器组(ESI EDI EBP ESP)、段寄存器组(CS DS ES SS)、指令指示器(EIP)的作用。,第一章总结,3主存编址方式、物理地址的形成方式。堆栈的概念和堆栈操作指令 PUSH、POP的功能及使用格式。4在80 x86机中,数的表示范围(有符号、无符号),压缩和非压缩BCD码的表示形式,字符在机内的表示形式。5标志寄存器 SF、ZF、OF、CF标志位改变方法6汇编源程序的基本结构,第一章总结,本章作业,1.21.51.111.14,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号