汇编语言程序设计2_第1页
汇编语言程序设计2_第2页
汇编语言程序设计2_第3页
汇编语言程序设计2_第4页
汇编语言程序设计2_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计

AssemblyLanguageProgramming第一章基础知识§2硬件基础计算机的基本结构CPU系统总线MemoryI/O子系统

80x86的寄存器组8086的存储器组织2.1计算机基本结构

中央处理机

CPU总线控制逻辑接口接口存储器大容量存储器I/O设备I/O子系统系统总线组成:算术逻辑部件、控制部件和寄存器组。

CPU的作用:执行算术与逻辑运算。控制指令的执行。编程结构:对汇编语言程序员来说,关心的是其中的寄存器。CPU总线是部件之间进行数据(电信号)交换的通道。

80x86计算机的系统总线分为3类:数据总线地址总线控制总线系统总线数据总线数据总线是用来传递数据的,定义了CPU在每个内存周期所能存取数据的位数。

80x86系列CPU的数据总线为8位、16位、32位或64位。这就是“为什么通常的数据存取是以8位、16位、32位或64位进行的”。数据总线越宽,处理能力越强。具有N位数据总线并不意味着CPU只能处理N位数据。系统总线地址总线地址总线用来指出数据的地址(内存或I/O)。地址总线的位数决定了最大可编址的内存与I/O空间。对于N位地址总线,CPU可以提供2N个不同地址:0~2N-1。地址总线由内存与I/O子系统共享使用(I/O只用低16位)。(如何区分?)控制总线控制总线用来控制CPU与内存和I/O设备之间的数据传送方式(如传送方向)。系统总线内存是存放指令和数据的部件,由若干内存单元构成。80x86的内存以字节编址:每个内存单元有唯一的地址,可存放1个字节。内存单元的2个要素:地址(编号)与值(内容)。(100H)=34H1个字占据2个相邻的内存单元;低字节在低地址单元,高字节在高地址单元;字的地址由其低地址来表示。双字也类似。同一地址可以看作是字节、字或双字单元的地址。(?)内存I/O子系统通过接口电路与微机系统连接I/O接口由若干寄存器组成:数据寄存器、状态寄存器、命令寄存器I/O端口:即I/O地址,是区分I/O设备及其寄存器的编号。汇编语言程序员看到的,是端口8086计算机采用16位表示I/O端口I/O端口与内存地址如何区分?I/O子系统

2.280x86的寄存器组8086/8088中共有14个16位寄存器寄存器在CPU内部,所以访问速度快。但容量小外存内存寄存器CPU寄存器与存储器的比较:

寄存器存储器

在CPU内部在CPU外部访问速度快访问速度慢容量小,成本高容量大,成本低用名字表示用地址表示没有地址地址可用各种方式形成专用寄存器数据寄存器:AX/BX/CX/DX存放任何数据信息。暂存计算的中间结果,数据中转站。每个寄存器又有它们各自的专用目的:AX(Accumulator)——累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等;BX(Base)——基址寄存器,常用做存放存储器地址;CX(Count)——计数器,作为循环和串操作等指令中的隐含计数器;DX(Data)——数据寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。16位一分为二AHALAXBHBLBXCHCLCXDHDLDXAX=1234HAH=12HAL=34HAX=CDABHAH=CDHAL=ABH80386及其后继:EAX,EBX,ECX,EDXEAX=12345678HAX=5678HAH=56HAL=78HAXAHALEAXBXBHBLEBXCHCLECXDHDLEDXCXDX变址寄存器:SI/DI变址寄存器常用于存储器寻址时提供地址串操作类指令中,SI(SourceIndex)是源变址寄存器串操作类指令中,DI(DestinationIndex)是目的变址寄存器16位,不可拆分使用80386及其后继:ESI,EDI指针寄存器:SP/BP指针寄存器用于寻址内存堆栈内的数据SP(StackPointer)为堆栈指针寄存器,指示栈顶的偏移地址SP不能再用于其他目的,具有专用目的BP(BasePointer)为基址指针寄存器,表示数据在堆栈段中的基地址SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址80386及其后继:ESP,EBP段寄存器:CS/DS/SS/ES8086CPU的4个16位的段寄存器代码段寄存器CS(CodeSegment)数据段寄存器DS(DataSegment)堆栈段寄存器SS(StackSegment)附加数据段寄存器ES(ExtraSegment)段寄存器用来确定该段在内存中的起始地址。用途特定,不可分开使用。80386及其后继:FSGSIP(InstructionPointer)指令指针寄存器IP,指示代码段中指令的偏移地址它与代码段寄存器CS联用,确定下一条指令的物理地址计算机通过CS:IP寄存器来控制指令序列的执行流程IP寄存器是一个专用寄存器,程序一般不可直接使用该寄存器。80386及其后继:EIP标志寄存器用途:标志寄存器F(FLAGS),又称程序状态字寄存器PSW,是用以记录或存放状态标志和控制标志信息的。状态标志位——用以记录当前运算结果的状态信息控制标志位——用以存放控制CPU工作方式的标志信息。80386及其后继:FLAGS控制标志位

方向标志DF中断允许标志IF追踪标志TF为什么要标志寄存器?Why状态标志位?一般只需要计算结果结果特征有时更重要Why控制标志位改变CPU工作方式标志寄存器设置状态标志位的设置是由CPU根据当前程序运行结果的状态自动完成的。状态标志位信息一般用作转移指令的转移控制条件。控制标志位由程序设置,控制CPU的工作方式进位标志CF(CarryFlag)当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0。例如:3AH+7CH=B6H没有进位:CF=0AAH+7CH=(1)26H有进位:CF=1零标志ZF(ZeroFlag)若运算结果为0,则ZF=1,否则ZF=0例如:3AH+7CH=B6H,结果不是零:ZF=086H+7AH=(1)00H,结果是零(为什么?):ZF=1注意:ZF为1表示的结果是0符号标志SF(SignFlag)有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。运算结果最高位为1,则SF=1;否则SF=0。例如:3AH+7CH=B6H,最高位D7=1:SF=186H+7AH=(1)00H,最高位D7=0:SF=0奇偶标志PF(ParityFlag)当运算结果最低字节中“1”的个数为偶数时,PF=1;否则PF=0。例如:3AH+7CH=B6H=10110110B,结果中有5个1,是奇数:PF=0注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。辅助进位标志AF(AuxiliaryCarryFlag)运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0。例如:3AH+7CH=B6HD3有进位:AF=1这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。(类似于进位标志)溢出标志OF(OverflowFlag)若算术运算的结果有溢出,则OF=1;否则OF=0。只是对有符号数而言。对无符号数而言,OF=1并不意味着结果出错。

80H-01H=7FH=127,OF=1对于无符号数而言,128-1=127,正确对于无符号数而言,-128-1=127,错误什么是溢出处理器内部以补码表示有符号数8个二进制位能够表达的整数范围是:+127~-12816位表达的范围是:+32767~-32768如果运算结果超出了这个范围,就是产生了溢出有溢出,说明有符号数的运算结果不正确无符号数有溢出吗?FFH+01H=00H,CF=1,进位溢出溢出的判断方法一(CPU):如果最高位与次高位同时向前有或无进/借位,则OF=0;(?)如果最高位与次高位不同时向前有或无进/借位,则OF=1;方法二:两个正补码数相加结果为负两个负补码数相加结果为正正补码数-负补码数为负负补码数-正补码数为正其他情况OF=1OF=0溢出和进位溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;可恢复的错误。溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。不可恢复错误。溢出和进位的对比例1:7FH+01H=80H无符号数运算:127+1=128,范围内,无进位有符号数运算:127+1=128,范围外,有溢出例2:FFH+01H=(1)00H无符号数运算:255+1=256,范围外,有进位有符号数运算:-1+1=0,范围内,无溢出如何运用溢出和进位处理器对两个操作数进行运算时,并不知道操作数是有符号数还是无符号数,所以全部设置,按各自规则。应该利用哪个标志,则由程序员来决定。将参加运算的操作数是无符号数,就应该关心CF;将参加运算的操作数是有符号数,则要注意是否溢出。我怎么知道是什么数?除了你没人知道,例:

MOVAX,1MOVBX,2ADDAX,BX

指令执行后,(AX)=3,OF=0,CF=0,ZF=0,SF=0例:

MOVAX,FFFFHMOVBX,1ADDAX,BX

指令执行后,(AX)=0,OF=0,CF=1,ZF=1,SF=0方向标志DF(DirectionFlag)用于串操作指令中,控制地址的变化方向:设置DF=0,串操作的存储器地址自动增加;设置DF=1,串操作的存储器地址自动减少。中断允许标志IF(Interrupt-enableFlag)用于控制外部可屏蔽中断是否可以被处理器响应:设置IF=1,则允许中断;设置IF=0,则禁止中断。陷阱标志TF(TrapFlag)用于控制处理器是否进入单步操作方式:设置TF=0,处理器正常工作;设置TF=1,处理器单步执行指令。单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断。这种内部中断称为单步中断,所以TF也称为单步标志。利用单步中断可对程序进行逐条指令的调试。这种逐条指令调试程序的方法就是单步调试。2.38086存储器组织

分段技术地址形成方式分段技术Why?矛盾:AB20位≮≯

DB16位地址:20位≮≯地址Register:16位How?用两个16位Register方案?方案用两个16位Register1616+20分段管理将存储器分成若干个逻辑段段首地址必须为:****0H。其有效地址“****H”存放在段寄存器中,称为段地址。段中某一个单元相对于段首的距离称为偏移地址,偏移地址存放在偏移地址寄存器中。段的长度不超过216=64K。(仅能访问4*64K?)对比物理地址=16×段地址+偏移地址1616+200000段地址偏移地址物理地址段首地址地址概念物理地址20位,20位地址总线上产生的唯一的地址。逻辑地址--程序指令中引用和操作的地址段地址:16位,段首地址的有效地址偏移地址:段中某一个单元相对于段首的距离,16位4个专门存放段地址的段寄存器(16位)代码段段寄存器CS数据段段寄存器DS堆栈段段寄存器SS附加段段寄存器ES例:(DS)=3000H,偏移=1234H,

物理地址=16d(DS)+偏移

=31234H存储器

8K代码

2K数据

256堆栈02000H04800H04000H0200H0400H0480H逻辑段CPU形成物理地址的过程ALU完成加法,地址加法器段地址一般在程序开始时预定访问某一个内存单元,程序中只需要给出16位偏移地址CPU几种典型的操作取指令:指令单元地址=(CS)×10H+IP堆栈操作:堆栈数据地址=(SS)×10H+偏移内存数据:内存数据地址=(DS)×10H+偏移§38086寻址方式8086机器码格式指令格式寻址方式3.18086机器码格式机器码格式:是将指令以2进制数0和1进行编码的形式操作码说明计算机要执行哪种操作,ModRegR/M

:表明寻找操作数的方式。操作码位移量立即数ModRegR/M3.2指令格式指令的一般格式操作码说明计算机要执行哪种操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象,为数据及数据所在地址。操作码操作数1操作数2操作码操作数1操作数2【;注释】【标号:】3.2指令格式操作数的形式立即操作数:指令的操作数是立即数(常量),只能是源操作数。寄存器操作数:操作数存放在寄存器中值,指令中使用寄存器名。内存操作数:操作数存放在内存中,指令中给出内存地址,通常为有效地址EA,段地址在某个段寄存器中。3.38086寻址方式立即寻址方式寄存器寻址方式内存操作数寻址方式1.立即寻址方式(immediateaddressing)操作数在指令中给出,作为指令机器码的一部分存储

MOVAL,34H;机器码:B034MOVAX,0034H;机器码:B83400使用场合:常数,8位和16位。注意:只能用于源操作数2.寄存器寻址方式(registeraddressing)操作数在指定的数据寄存器中

MOVAX,BXMOVAL,BH注意:无FS和GSCS/IP不能用作目的操作数:MOVCS/IP,AX(X)3.内存操作数寻址方式直接寻址方式(directaddressing)寄存器间接寻址方式(registerindirect)寄存器相对寻址方式(registerrelative)基址变址寻址方式(basedindexed..)相对基址变址方式(relativebasedindexed..)直接寻址方式(directaddressing)内存操作数的偏移地址由指令直接给出

MOVAX,[2000H] MOVWORDPTR[1000H],-1MOVAX,Y注意:隐含的段为数据段DS物理地址

=16*(DS)+偏移地址…………1000H1001HAX3412AHAL比较比较1MOVAL,[1000H]AL=34H;MOVAX,[1000H]AX=1234H比较2MOVAX,1000HAX=1000H;MOVAX,[1000H]AX=1234H1234

寄存器间接寻址方式(registerindirect)指定某个地址寄存器(SI、DI、BX、BP)的内容作为内存操作数的偏移地址

MOVAX,[BX] MOV[BP],AL使用场合:表格、字符串、缓冲区处理注意:段地址规则BX,SI,DI(DS)BP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论