版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 指令的基本概念w指令和指令系统wcisc和riscw指令的结构和分类w指令中的数据类型w指令的寻址方式w指令中操作数的寻址方式 指令的基本概念w能够在计算机硬件平台上运行的程序是由一系列的机器指令组成的,机器指令通常简称指令。软件的功能借助指令的集合来实现,而指令可以直接由硬件执行w在ia-32系列的cpu中,包含了由大量的具有各种各样作用的指令构成的指令系统。w在ia-32cpu中,在实地址模式下,采用16位指令模式(16位寄存器和16位偏移量);采用32位指令模式(32位寄存器和32位偏移量) 一台计算机中所有机器指令的集合,称为这台计算机的一台计算机中所有机器指令的集合,称为这台计算机
2、的指令系指令系统统。 7070年代末期,计算机硬件结构随着年代末期,计算机硬件结构随着vlsivlsi技术的飞速发展而越来技术的飞速发展而越来越复杂化,大多数计算机的指令系统多达几百条。我们称这些计算越复杂化,大多数计算机的指令系统多达几百条。我们称这些计算机为机为复杂指令系统计算机复杂指令系统计算机,简称,简称cisccisc。如此庞大的指令系统不但使计算机的研制周期变长,难以保证正确如此庞大的指令系统不但使计算机的研制周期变长,难以保证正确性,不易调试维护,而且由于采用了大量使用频率很低的复杂指令性,不易调试维护,而且由于采用了大量使用频率很低的复杂指令而造成硬件资源浪费。所以在而造成硬件
3、资源浪费。所以在19891989年随着年随着80486 dx cpu80486 dx cpu计算机的诞计算机的诞生,人们又提出了便于生,人们又提出了便于vlsivlsi技术实现的技术实现的精简指令系统计算机精简指令系统计算机,简称,简称riscrisc,有效地减少了指令的执行周期。,有效地减少了指令的执行周期。而且它以而且它以riscrisc技术为基础,技术为基础,通过几条通过几条riscrisc指令和并行流水线方式来支持经典的指令和并行流水线方式来支持经典的cisccisc型指令。同型指令。同时由于组成指令周期的机器周期变得很规整,所以可以用组合逻辑时由于组成指令周期的机器周期变得很规整,所
4、以可以用组合逻辑控制器代替微程序控制器来提高控制器代替微程序控制器来提高cpucpu处理速度。处理速度。0b0e:0100 20740a and si+0a,dh0b0e:0103 803c3f cmp byte ptr si,3f0b0e:0106 7514 jnz 011c0b0e:0108 83f901 cmp cx,+010b0e:010b 760f jbe 011c0b0e:010d 8a07 mov al,bx0b0e:010f aa stosb0b0e:0110 43 inc bx0b0e:0111 46 inc si0b0e:0112 49 dec cx0b0e:0113 fe
5、c4 inc ah0b0e:0115 8a07 mov al,bx0b0e:0117 3c20 cmp al,200b0e:0119 7401 jz 011c0b0e:011b aa stosb0b0e:011c 3400 xor al,000b0e:011e fd std0b0e:011f 0af6 or dh,dh (cs : ip)指令字)指令字 指令的注释符指令的注释符 一个较完善的指令系统,应当包括数据传送类指令、算术运一个较完善的指令系统,应当包括数据传送类指令、算术运算类指令、逻辑运算类指令、程序控制类指令、输入输出指令、算类指令、逻辑运算类指令、程序控制类指令、输入输出指令、字
6、符串类指令、系统控制类指令。字符串类指令、系统控制类指令。 1、数据传送指令:、数据传送指令:数据传送指令主要包括取数指令、存数指令、数据传送指令主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈操作指令等等,这类指令主要用来实现主存和寄存器之间,或寄操作指令等等,这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。存器和寄存器之间的数据传送。2、算术运算指令、算术运算指令:这类指令包括二进制定点加、减、乘、除指令:这类指令包括二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,求反、
7、求补指令,算术移位指令,浮点加、减、乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。这类指令主要用于定算术比较指令,十进制加、减运算指令等。这类指令主要用于定点浮点的算术运算,大型机中有向量运算指令,直接对整个向量点浮点的算术运算,大型机中有向量运算指令,直接对整个向量或矩阵进行求和、求积运算。或矩阵进行求和、求积运算。3、逻辑运算指令:、逻辑运算指令:这类指令包括逻辑加、逻辑乘、按位加、逻辑这类指令包括逻辑加、逻辑乘、按位加、逻辑移位等指令,主要用于无符号数的位操作、代码的转换、判断及移位等指令,主要用于无符号数的位操作、代码的转换、判断及运算。运算。典型指令
8、典型指令4、程序控制指令:、程序控制指令:程序控制指令也称转移指令。计算机在执行程程序控制指令也称转移指令。计算机在执行程序时,通常情况下按指令计数器的现行地址顺序取指令。但有时会序时,通常情况下按指令计数器的现行地址顺序取指令。但有时会遇到特殊情况:机器执行到某条指令时,出现了几种不同结果,这遇到特殊情况:机器执行到某条指令时,出现了几种不同结果,这时机器必须执行一条转移指令,根据不同结果进行转移,从而改变时机器必须执行一条转移指令,根据不同结果进行转移,从而改变程序原来执行的顺序。这种转移指令称为条件转移指令。转移条件程序原来执行的顺序。这种转移指令称为条件转移指令。转移条件来自于程序状态
9、字(标志)寄存器来自于程序状态字(标志)寄存器psw如下特征位:进位标志如下特征位:进位标志(c)、结果为零标志()、结果为零标志(z)、结果为负标志()、结果为负标志(s)、结果溢出标志)、结果溢出标志(v)等。)等。5、输入输出指令、输入输出指令:主要用来启动外围设备,检查测试外围设备的:主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和工作状态,并实现外部设备和cpu之间,或外围设备与外围设备之之间,或外围设备与外围设备之间的信息传送。间的信息传送。(单独编址和统一编址单独编址和统一编址)6、字符串处理指令、字符串处理指令:是一种非数值处理指令,一般包括字符串传是一种非数
10、值处理指令,一般包括字符串传送、字符串转换(把一种编码的字符串转换成另一种编码的字符送、字符串转换(把一种编码的字符串转换成另一种编码的字符串)、字符串比较、字符串查找(查找字符串中某一子串)、字符串)、字符串比较、字符串查找(查找字符串中某一子串)、字符串抽取(提取某一子串)、字符串替换(把某一字符串用另一字符串抽取(提取某一子串)、字符串替换(把某一字符串用另一字符串替换)等。这类指令在文字编辑中对大量字符串进行处理。串替换)等。这类指令在文字编辑中对大量字符串进行处理。7、特权指令:、特权指令:是指具有特殊权限的指令。由于指令的权限量大,是指具有特殊权限的指令。由于指令的权限量大,若使用
11、不当,会破坏系统和其他用户信息。因此这类指令只用于操若使用不当,会破坏系统和其他用户信息。因此这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。作系统或其他系统软件,一般不直接提供给用户使用。 在多用户、多任务的计算机系统中特权指令必不可少。它主要在多用户、多任务的计算机系统中特权指令必不可少。它主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。切换等。8、其他指令、其他指令:除以上各类指
12、令外,还有状态寄存器置位、复位指:除以上各类指令外,还有状态寄存器置位、复位指令、测试指令、暂停指令、空操作指令,以及其他一些系统控制用令、测试指令、暂停指令、空操作指令,以及其他一些系统控制用的特殊指令。的特殊指令。42 指令格式指令格式 表示一条指令的机器字,就称为表示一条指令的机器字,就称为指令字指令字,通常简称,通常简称指令指令。一条指令字的二进制位数称为一条指令字的二进制位数称为指令字长指令字长,一般采用一般采用可变的指令字长可变的指令字长指令格式,则是指令字用二进制代码表示的结构形式。一条指令指令格式,则是指令字用二进制代码表示的结构形式。一条指令的结构可用如下形式来表示:的结构可
13、用如下形式来表示:操作码和地址码操作码和地址码两部分组成。两部分组成。 4 42 21 1 操作码操作码 ( (固定长度的操作码、可变长度的操作码)固定长度的操作码、可变长度的操作码)指令的操作码表示该指令应进行什么性质的操作,如进行加法、指令的操作码表示该指令应进行什么性质的操作,如进行加法、减法、乘法、除法、取数、存数等等。组成操作码字段的位数一减法、乘法、除法、取数、存数等等。组成操作码字段的位数一般取决于计算机指令系统的规模。般取决于计算机指令系统的规模。 操作码字段操作码字段地址码字段地址码字段指令名称符号指令机器指令(用十六进制表示)指令助记符符号地址条件转移jznext7409h
14、增量inccx41h减量deccx49h入栈pushax50h出栈popax58h比较cmpstringbx,0dh80bf04000dh加法addsi,283c602h传送movindex,bl881e0a00h转子程序calldisplaye82a00h表4.2 典型的符号指令与其相对应的机器指令的结构形式 指令名称指令助记符二进制操作码(用十六进制表示)条件转移jz74h增量inc41h减量dec49h入栈push50h出栈pop58h比较cmp80h加法add83h传送mov88h转子程序calle8h表4.3 部分典型指令的助记符与其相对应的二进制操作码 4 42 22 2 地址码地
15、址码 根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。目前二地址和一地址指令格式用的最多。令。目前二地址和一地址指令格式用的最多。 l l 零地址指令零地址指令( (无操作数无操作数) )的指令字中只有操作码,而没有地址码。的指令字中只有操作码,而没有地址码。 a.无操作数的控制操作无操作数的控制操作 如空操作指令、停机指令等。如空操作指令、停机指令等。 b.隐含操作数的操作隐含操作数的操作 例如,在例如,在8086/8088指令系统中,字节转换字指令指令系统中,字节转换字指令cbw,其源操作数隐含为,
16、其源操作数隐含为al的内容;字转换双字指令的内容;字转换双字指令cwd,其源操作数隐含,其源操作数隐含为为ax的内容,又比如的内容,又比如ibmpcibmpc的指令系统中下面的几条操作标志寄存器有关的指的指令系统中下面的几条操作标志寄存器有关的指令:令:lahflahf、sahfsahf、pushfpushf、popfpopfl l 单单地址指令常称为单操作数指令。地址指令常称为单操作数指令。a.a.比如压栈和弹出栈有关的两条指令比如压栈和弹出栈有关的两条指令 push ax pop ax push ax pop ax b. 地址码所指定的操作数为源操作数地址码所指定的操作数为源操作数 在这种
17、情况下,累加器在这种情况下,累加器ax的内容为目标的内容为目标操作数,其操作如下操作数,其操作如下 8位和位和16位微型机的操作数单地址指令都采用这种操作位微型机的操作数单地址指令都采用这种操作方式。方式。mul div 等指令等指令w 二地址指令常称双操作数指令,它有两个地址二地址指令常称双操作数指令,它有两个地址码字段码字段a1和和a2,分别指明参与操作的两个数在内,分别指明参与操作的两个数在内存中或运算器通用寄存器的地址,因此包括在寄存中或运算器通用寄存器的地址,因此包括在寄存器存器寄存器型,寄存器寄存器型,寄存器存储器型和存储器存储器型和存储器存储器型三类指令。这些指令的特点是:执行速
18、存储器型三类指令。这些指令的特点是:执行速度越来越慢,但是数据处理能力越来越强。其中度越来越慢,但是数据处理能力越来越强。其中地址地址a1兼做存放操作结果的地址。(大多数指令兼做存放操作结果的地址。(大多数指令都是二地址指令)都是二地址指令) (a1) op (a2) a1 比如比如: mov ax, 054ch wl 三地址指令字中有三个顺序的操作数地址三地址指令字中有三个顺序的操作数地址a1,a2和和a3。(比较少,往往可以实现复杂的。(比较少,往往可以实现复杂的功能功能) (a1) op (a2) a3 比如在比如在80c51单片机的指令系统中比较转移类指令单片机的指令系统中比较转移类指
19、令cjne a,direct,rel指令中的数据类型w字节类型:有符号整数用补码表示,在masm汇编语言中使用db、byte伪指令定义字节数据。如:data1 db 254w字类型:在ia-32计算机中,一个字由二个字节组成,其低位字节放在低地址单元,高位字节放在高地址单元。称为小尾方式。如:data1 dw 2544w双字类型:在ia-32计算机中,一个字由四个字节组成,其低位字节放在低地址单元,高位字节放在高地址单元。例如乘法后的乘积或除法前的被除数都是以双字出现的。如 :data1 dd 254400内存访问的实模式w:(即实地址访问模式)它是intel公司80286及以后的x86(80
20、386,80486和80586等)兼容处理器(cpu)的操作模式之一。实模式被特殊定义为在32位地址中使用20位地址的内存可访问空间,这就意味着它可访问的最大内存空间为1mb(物理内存和bios-rom),软件可通过这些地址直接访问bios程序和外围硬件。实模式下处理器多道任务的工作模式。但是为了向下兼容,所以80286及以后的x86系列兼容处理器仍然是开机启动时工作在实模式下。80186和早期的处理器仅有一种操作模式,就是后来我们所定义的实模式。实模式虽然能访问到1m的地址空间,但是由于bios的映射作用(即bios占用了部分空间地址资源),所以真正能使用的物理内存空间(内存条),也就是在6
21、40k到924k之间。1m地址空间组成是由16位的段地址和16位的段内偏移地址组成的。用公式表示为:物理地址=左移4位的段地址+偏移地址。内存访问的保护模式w保护模式:保护模式:经常缩写为p-mode,在intel iapx 286程序员参考手册中(iapx286是intel 80286的另一种叫法)它又被称作为虚拟地址保护模式。尽管在intel 80286手册中已经提出了虚地址保护模式,但实际上它只是一个指引,真正的32位地址出现在intel 80386上。保护模式本身是80286及以后兼容处理器序列之后产成的一种操作模式,它具有许多特性设计为提高系统的多道任务和系统的稳定性。例如内存的保护
22、(限长寄存器),分页机制(页表寄存器)和硬件虚拟存储(mmu)的支持。现代多数的x86处理器操作系统都运行在保护模式下。 内存的组织结构 (以奔腾cpu芯片为例)w在16位模式下的系统中,cpu的寄存器和数据总线的位数都是16位长,但是地址总线却为20根,因此对内存的寻址可以达到1mb。w在16位模式的系统中,如何把20位地址集合影射到16位的地址集合上面呢?方法就是把内存分段:把连续的20位的地址空间按照低四位为0000b的原则分割成段,因此最多可以被分割成216个段,由此“段的寻址”就可以通过16位寄存器实现了,而16位模式下的内存段最大空间也不超过216 b,由此”段内的寻址也可以通过1
23、6位寄存器实现了。w在16位模式的系统中,一方面为了规范管理内存的使用,一个程序最多由四段组成,分别是代码段、数据段、堆栈段和附加段。每个段的起始地址低四位为0,所以分别把它们的高16位存储在cs、ds、ss、es ,叫做段基址(寄存器)。而每个段内的地址只能保存在非段基址寄存器中。 内存的组织结构 (以奔腾cpu芯片为例)w1、逻辑地址:在程序设计中通常使用逻辑地址,逻辑地址包含段基址和段内偏移量,它们都是无符号的16位二进制数据。其中段基址由cs、ds、ss、es分别提供,而偏移量由ip或者eu(按照不同的寻址方式根据指令中给出有效地址计算得到)的提供。w2、物理地址:把段基址的值左移4位
24、变成20位后,加上eu有效地址得到。w3、寻址方式:指令中有效地址的提供方式。数据的存储结构决定着数据的寻址方式,数据的寻址方式依赖着cpu中相应的寄存器(基址、变址等寄存器) 431 指令的寻址方式指令的寻址方式: 顺序寻址方式、跳跃寻址方式顺序寻址方式、跳跃寻址方式 顺序寻址方式顺序寻址方式: : 由于指令地址在内存中按顺序安排,当执行由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序进行,这种程一段程序时,通常是一条指令接一条指令的顺序进行,这种程序顺序执行的过程,我们称为指令的序顺序执行的过程,我们称为指令的顺序寻址方式顺序寻址方式。 跳跃寻址方式跳跃寻址
25、方式:当程序改变执行的顺序时,指令的寻址就采取跳:当程序改变执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。(教材给出,而是由本条指令给出。(教材69页的相对寻址)页的相对寻址)(1) 立即寻址方式立即寻址方式* 操作数在指令中给出操作数在指令中给出 mov al, 5 mov ax, 3064h mov al, a* 只能用于只能用于 src 字段字段* src 和和 dst 的字长一致的字长一致 mov ah, 3064h 汇汇 编编 语语 句句操作数操作数长度长度
26、操操 作作mov blmov bl,44448位把十进制数44(2ch)传送到bl中mov axmov ax,44h44h16位把十六进制数44h传送到ax中mov almov al,aa8位把a 的ascii码41h传送到al中mov ebxmov ebx,12340000h12340000h32位把十六进制数12340000h传送到ebx中mov esimov esi,121232位把十进制数12(0ch)传送到esi中表4.4 使用立即数寻址的使用立即数寻址的movmov指令例子指令例子w在应用上,通常利用立即寻址方式给在应用上,通常利用立即寻址方式给寄存器或内存单元赋初值;寄存器或内存
27、单元赋初值;ww注意:立即数只能作为注意:立即数只能作为源操作数源操作数,不,不能作为目的操作数,并且只能是常数值。能作为目的操作数,并且只能是常数值。4.4.2 寄存器寻址方式w此寻址方式下,操作数存放在此寻址方式下,操作数存放在cpucpu的某个的某个通用寄存器中通用寄存器中,而指令中指出了该寄存器。,而指令中指出了该寄存器。w(注:寄存器寻址方式可以引用(注:寄存器寻址方式可以引用8 8个个8 8位的通用寄位的通用寄存器存器alal、ahah、blbl、bhbh、clcl、chch、dldl、dhdh,也可以,也可以引用引用8 8个个1616位的通用寄存器位的通用寄存器axax、bxbx
28、、cxcx、dxdx、bpbp、spsp、sisi、didi,还可以引用,还可以引用8 8个个3232位的通用寄存器位的通用寄存器eaxeax、ebxebx、ecxecx、edxedx、ebpebp、espesp、esiesi、ediedi。)。) (2) 寄存器寻址方式寄存器寻址方式* 操作数在指定的寄存器中操作数在指定的寄存器中 mov ax, bx mov al, bh mov ax, 3064h* 字节寄存器只有字节寄存器只有 ah al bh bl ch cl dh dl* src 和和 dst 的字长一致的字长一致 mov ah, bx * cs 不能用不能用 mov 指令改变指令
29、改变 mov cs, ax (3) 直接寻址方式直接寻址方式* 有效地址有效地址ea由指令直接给出由指令直接给出 例例:mov ax, 2000h ea=2000h, 假设假设(ds)=3000h, 那么那么pa=32000h* 隐含的段为数据段隐含的段为数据段 ds* 可使用可使用段跨越前缀段跨越前缀 mov ax, es: 2000h* 操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示value db 10mov ah, value mov ax, value mov ax, word ptr value 5030 32000ah al3050(ax) = 3050h汇
30、 编 语 句操作数长度操 作mov dh,1000h8位把ds段中偏移地址1000h单元的内容装入dh中 mov cx,data116位把ds段中偏移地址为data1和data1+1的两单元的内容装入cx mov es,data216位把ds段中偏移地址为data2和data2+1的两单元内容装入es mov value,eax32位eax内容传到ds段中偏移地址为value至value+3 的4个单元 mov edi,sum132位把ds段中偏移地址为sum1至sum1+3的4个单元内容装入edi表表4.6 4.6 使用直接寻址的使用直接寻址的movmov指令例子指令例子 (4) 寄存器间接
31、寻址寄存器间接寻址* ea 在在基址寄存器基址寄存器(bx/bp) 或或 变址寄存器变址寄存器(si/di) 中中 mov ax, bx pa = 16d (ds) + (bx) mov ax, es:bx pa = 16d (es) + (bx) mov ax, bp pa = 16d (ss) + (bp) * 不允许使用不允许使用ax、cx、dx 存放存放 ea mov ax, cx * src 和和 dst 的字长一致的字长一致 mov dl, bx ; bx指示一个字节单元指示一个字节单元 mov dx, bx ; bx指示一个字单元指示一个字单元 * 适于数组、字符串、表格的处理适
32、于数组、字符串、表格的处理汇 编 语 句操作数长度操 作mov bp,dl8位寄存器dl的内容传到ss段由bp寻址的存储单元mov di,bh8位寄存器bh的内容传到ds段由di寻址的存储单元mov al,edx8位ds段由edx寻址的存储单元的内容传送到almov cx,bx16位ds段中用bx寻址的存储单元的字内容传到cx中mov ecx,ebx32位ds段由ebx寻址的存储单元的双字传送到ecx表表4.7 4.7 使用寄存器间接寻址的使用寄存器间接寻址的movmov指令例子指令例子 有效地址有效地址 =(bx)(bp) 8位位(si) 16位位(di)+位移量位移量(5) 寄存器相对寻址
33、方式寄存器相对寻址方式* 例例: mov ax, countsi 或或 mov ax, count+si 假设假设(ds)=3000h, (si)=2000h, count=3000h, 那么那么 pa = 35000h 假设假设(35000h)=1234h, 那么那么 (ax)=1234h* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理汇 编 语 句操 作 数 长度操 作mov arraysi,bl 8位bl的内容送入由array+si寻址的ds段存储单元mov listsi+2,cl 8位cl的内容送入由list+si+2之和寻址的ds段存储单元mov ax,di+100h 1
34、6位由di+100h寻址的ds段存储单元的字字装入axmov di,set itbx 16位由set it+bx寻址的ds段存储单元的内容送入dimov dl,eax+10h16位由eax+10h寻址的ds段存储单元的内容装入dimov arrayebx,eax32位eax内容送入由array+ebx寻址的ds段存储单元中表4.8 使用寄存器相对寻址的使用寄存器相对寻址的movmov指令例子指令例子(6) 基址变址寻址方式基址变址寻址方式* mov ax, bxdi 或或 mov ax, bx+di mov ax, es:bxsi* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理*
35、必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合 mov ax, bxbp mov ax, sidi 有效地址有效地址 =(bx) (si)(bp) (di)+汇 编 语 句操 作 数 长度操 作mov dh,bx+di+20h8位由由bxbx、didi和和20h20h之和寻址的之和寻址的dsds段段存储单元的内容装入存储单元的内容装入dhdhmov listbp+di,cl8位cl送到由list、bp及di之和寻址的ss段存储单元中mov listbp+si+4mov listbp+si+4,dhdh8位dhdh送到由送到由listlist、bpbp、si
36、si及及4 4之和之和寻址的寻址的ssss段存储单元中段存储单元中mov ax,filebx+di16位由由filefile、bxbx及及didi之和寻址的之和寻址的dsds段存储单元的内容送入段存储单元的内容送入 axaxmovmov eaxeax,fileebx+ecx+2fileebx+ecx+232位由file、ebx、ecx及2之和寻址的ds段存储单元的内容装入 eax表表4.9 4.9 使用基址变址寻址的使用基址变址寻址的movmov指令指令 (7) 相对基址变址寻址方式相对基址变址寻址方式 mov ax, maskbxsi 或或 mov ax, maskbx+si 或或 mov
37、ax, mask+bx+si 有效地址有效地址 =(bx) (si) 8位位(bp) (di) 16位位+位移量位移量例例:编写一段显示字符串编写一段显示字符串string的程序的程序 data segmentdata segment string db happy new year!, 0dh , 0ah , $ string db happy new year!, 0dh , 0ah , $ count dw 17 count dw 17 data endsdata ends (1) 直接寻址直接寻址 movmov dl, string dl, string mov mov ah, 2 a
38、h, 2 int int 21h 21h ; ; 显示字符显示字符hh movmov dl, string+1 dl, string+1 mov mov ah, 2 ah, 2 int int 21h 21h ; ; 显示字符显示字符aa . .(2) 寄存器间接寻址寄存器间接寻址 mov cxmov cx, count , count ; mov cx; mov cx, 17, 17 mov bx mov bx, offset string , offset string ; string; string的偏址的偏址 bxbxnext: next: mov dl, bxmov dl, bx
39、mov mov ah, 2 ah, 2 int int 21h 21h ; ; 显示一个字符显示一个字符 inc bxinc bx loop next loop next ; ; 循环指令循环指令(3) 寄存器相对寻址寄存器相对寻址 mov cxmov cx, count , count ; mov cx; mov cx, 17, 17 mov si mov si, 0 , 0 next: next: mov dl, stringsimov dl, stringsi ; mov dl, string+si; mov dl, string+si mov mov ah, 2 ah, 2 int i
40、nt 21h 21h ; ; 显示一个字符显示一个字符 inc siinc si loop next loop next ; ; 循环指令循环指令(4) 基址变址寻址基址变址寻址 mov cxmov cx, count , count ; mov cx; mov cx, 17, 17 mov bx mov bx, offset string , offset string ; string; string的偏址的偏址 bxbx mov si mov si, 0, 0next: next: mov dl, bxsimov dl, bxsi ; mov dl, bx+si; mov dl, bx+
41、si mov mov ah, 2 ah, 2 int int 21h 21h ; ; 显示一个字符显示一个字符 inc siinc si loop next loop next ; ; 循环指令循环指令(5) dos 显示字符串功能显示字符串功能 mov dxmov dx, offset string , offset string ; string; string的偏址的偏址 dxdx ; lea dx; lea dx, string, string mov mov ah, 9 ah, 9 int int 21h 21h ; ; 显示一串字符显示一串字符典型的寻址方式有:典型的寻址方式有:
42、l l 立即寻址:立即寻址:指令的地址字段指出的不是操作数的地址,而指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。教材是操作数本身,这种寻址方式称为立即寻址。教材101101页图页图4-6.4-6.这种寻址方式经常出现在双地址指令中的源操作数的位置,用于这种寻址方式经常出现在双地址指令中的源操作数的位置,用于给寄存器赋值如在以下指令中的给寄存器赋值如在以下指令中的mov almov al,25; mov bx25; mov bx,“ab”ab”;mov dxmov dx,5ch5ch源操作数的寻址方式源操作数的寻址方式 l l 直接寻址:直接寻址:在指令格式的
43、地址字段中直接指出操作数在内在指令格式的地址字段中直接指出操作数在内存中的有效地址,即操作数地址在指令中:存中的有效地址,即操作数地址在指令中:ea=d ea=d 教材教材102102页。例页。例如:如:mov bxmov bx,dsds:1000h1000h;mov bxmov bx,var var (符号地址隐含为(符号地址隐含为dsds,其它段必须明显指出),其它段必须明显指出) 见下图见下图;l l寄存器寄存器( (直接直接) )寻址:寻址:操作数在指令中所给出的寄存器中(通用操作数在指令中所给出的寄存器中(通用寄存器和段寄存器)的寻址方式,比如在以下程序段中寄存器和段寄存器)的寻址方
44、式,比如在以下程序段中 mov axmov ax,23 mov bx23 mov bx,15 add ax15 add ax,bxbx的的addadd中的源操作数和目的操作中的源操作数和目的操作数的寻址方式。数的寻址方式。w 间接寻址:间接寻址:是相对于直接寻址而言的,在间接寻址是相对于直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址的情况下,指令地址字段中的形式地址d不是操作不是操作数的真正地址,而是操作数地址的指示器,或者说数的真正地址,而是操作数地址的指示器,或者说d单元的内容才是操作数的有效地址。即操作数地单元的内容才是操作数的有效地址。即操作数地址在内存中:址在内存中:e
45、a=(d),),w 比如:比如:mov ax, 045ch w寄存器间接寻址寄存器间接寻址:操作数的有效地址:操作数的有效地址ea直接从基址直接从基址寄存器(寄存器(bp、bx)或变址寄存器()或变址寄存器(si、di)中获)中获得,若以得,若以bx、si、di间接寻址时候,隐含的段寄存间接寻址时候,隐含的段寄存器为器为ds,若以,若以bp间接寻址,则隐含使用的段寄存间接寻址,则隐含使用的段寄存器为器为ss。比如:。比如:mov ch,si 见下图见下图 l l 寄存器相对寻址(寄存器相对寻址(变址相对寻址、变址相对寻址、基址相对寻址基址相对寻址):):把把cpucpu中中某个变址寄存器某个变
46、址寄存器sisi、didi(基址寄存器:(基址寄存器:bxbx、bpbp)寄存器的内容与)寄存器的内容与偏移量偏移量d d相加来形成操作数的有效地址,即操作数地址为变址寄相加来形成操作数的有效地址,即操作数地址为变址寄存器的内容与偏移量存器的内容与偏移量d d之和,即之和,即 ea=(r)ea=(r)变址变址+d+d若以若以bxbx、sisi、didi间间接寻址时候,隐含的段寄存器为接寻址时候,隐含的段寄存器为dsds,若以,若以bpbp间接寻址,则隐含使间接寻址,则隐含使用的段寄存器为用的段寄存器为ssss例如指令:例如指令:见下图见下图基址变址寻址方式基址变址寻址方式:操作数的有效地址:操
47、作数的有效地址eaea由基址寄存器和变址寄由基址寄存器和变址寄存器和位移量相加得到。若以存器和位移量相加得到。若以bxbx为基地址寄存器,隐含的段寄存为基地址寄存器,隐含的段寄存器为器为dsds,若以,若以bpbp为基地址寄存器,则隐含使用的段寄存器为为基地址寄存器,则隐含使用的段寄存器为ssss例如:如:例如:如:axax,200hbxsi200hbxsi复习题复习题(补充补充)w例例b:某微机的指令格式如下所示:某微机的指令格式如下所示:w 15 10 9 8 7 0wd:位移量:位移量wx:寻址特征位:寻址特征位w x=00:直接寻址;:直接寻址;w x=01:用变址寄存器:用变址寄存器
48、x1进行变址;进行变址;w x=02:用变址寄存器:用变址寄存器x2进行变址;进行变址;w x=11:相对寻址:相对寻址w 设(设(pc)=1234h,(,(x1)=0037h,(,(x2)=1122h(h代表十六进制数),请确定下列指令的有效地址。代表十六进制数),请确定下列指令的有效地址。w (1)4420h (2)2244h (3)1322h w (4)3521h (5)6723h操作码xd解解:(:(1)x=00,d=20h,有效地址,有效地址ea=20h; (2)x=10,d=44h,有效地址,有效地址ea=1122h+44h=1166h; (3)x=11,d=22h,有效地址,有效
49、地址ea=1234h+22h=1256h; (4)x=01,d=21h,有效地址,有效地址ea=0037h+21h=0058h; (5)x=11,d=23h,有效地址,有效地址ea=1234h+23h=1257h;复习题复习题(补充补充)复习题复习题(补充补充)w10、分别指出下列各8086/8088指令中源操作数和目的操作数的寻址方式w(1)寄存器(直接)寻址 立即数寻址w(2)寄存器(直接)寻址 直接寻址w(3)寄存器(间接)寻址 寄存器(直接)寻址 w(4)寄存器(直接)寻址 相对(间接)基址变址寻址w(5)寄存器(直接)寻址 基址变址寻址w(6)寄存器(间接)寻址 立即数寻址w(7)寄
50、存器(直接)寻址 w(8)寄存器(直接)寻址 相对基址寻址w(9)寄存器(直接)寻址 寄存器(间接)寻址 w(10)寄存器(直接)寻址 寄存器(直接)寻址 w12、判断对错w(1)对w(2)错:ds作为代码段基址寄存器,只能接收ax传来的数据w(3)对w(4)错:lea为把源操作数的有效地址传送给目的操作数,所以源操作数不应该是立即数等非存储器的寻址方式。w(5)错,add指令不能在一个指令周期中完成来自存储器的两个操作数的相加运算w(6)错,mul指令为隐含目的操作数的指令,默认的目的操作数为寄存器al(ax)w(7)错,shl为逻辑左移指令,当移位次数超过1时,次数要使用cl寄存器提供,不
51、能用立即数等其它方式。w(8)对w(9)错:mov指令在一个指令周期中不能完成两个内存单元之间的数据传送w(10) 对传送类指令w1、数据传送指令movmov al,01fmov ax,2345hmov da_byte,ofehmov arybx,1234h注意:不影响如下状态标志位:进位(cf)、溢出(of)、奇偶(pf)、符号标志位(sf)、辅助进位标志位(af)、零标志位(zf)传送类指令w2、交换指令xchgxchg al,blxchg ax,bxxchg ax,arybx注意:不影响如下状态标志位:进位(cf)、溢出(of)、奇偶(pf)、符号标志位(sf)、辅助进位标志位(af)、
52、零标志位(zf)传送类指令w3、取标志位指令lahfw 指令功能:ah (fr)70sfzfafpfcfahfr低8位01234567传送类指令w4、存标志位指令sahfw 指令功能:ah (fr)70注意:影响如下状态标志位:fr中的标志位分布(由低到高):第零位为进位(cf)、第二位为奇偶(pf)、第四位为辅助进位标志位(af)、第六位为零标志位(zf) 、第七位为符号标志位(sf)mov ah,11000000bsahf传送类指令w5、标志压栈指令pushfw指令功能: sp (sp)-2 栈顶字单元 (fr)注意:不影响如下状态标志位w5、标志出栈指令popfw 指令功能:栈顶字单元
53、(fr) sp (sp)+2注意:影响所有标志位传送类指令w6、装入有效地址指令lea指令格式:lea dest,src指令功能:将src的有效地址传送到目的16位通用寄存器中。注意:不影响标志位w7、装入地址指针指令lds(les)指令格式:lds dest,src指令功能:dest (src) ds (es) (src+2)算术运算类指令w加法指令w1)不带进位加法指令addw格式: add opd,opsw执行的操作:opd + ops opdw例如:add bx,siw add da_word,0f8chw add dl,tabbxw注意:对标志寄存器af、cf、sf、zf、of、pf
54、有影响标志寄存器wof overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1. sf sign flag 符号标志 记录运算结果的符号,结果负时为1. zf zero flag 零标志 运算结果等于0时为1,否则为0. cf carry flag 进位标志 最高有效位产生进位时为1,否则为0. af auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0. pf parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0. 标志寄存器wnv:没有溢出,这是overflow位(of)的值,分
55、别为nv(没溢出)和ov(溢出了)。这个标志位是反映上一个指令运算的结果是否溢出。 pl:符号标志位(sf)的值,分别是ng(负)/pl(正) nz:零标志位(zf)的值,分别是zr(零)/nz(非零),表示上一指令的结果。如:xor ax,ax后,这一位就会变为zr。 na:辅助进位标志位(af)的值,分别为ac(有进位)/na(没有进位)。 po:奇偶标志位(pf)的值,分别是pe(偶)/po(奇) nc:进位标志位(cf)的值,分别是cy(进位)/nc(没有进位) add dl,0a4h的结果对标志位的影响w 1 1 1 0 0 1 0 1w +) 1 0 1 0 0 1 0 0w 1
56、1 0 0 0 1 0 0 1 符号位有进位 cf=1符号位为1,sf=1无进位, af=0结果不为0,则zf=0;结果无溢出,则of=0;结果中有奇数个1,则pf=0。算术运算类指令w2)带进位加法指令adcw格式:adc opd,opsw执行的操作:opd十opscfopdw其中cf为进位位的值。w例如:adc ax,dx;axdxaxw注意:对标志位的影响同一般加法指令。w3)增量指令inc(加1指令)w格式: inc opd w执行的操作:opd 1 opdw例如: inc dx;dx1dxw注意:操作数可以是字和字节,且为无符号数。只能早寄存器和内存单元中。w 影响除cf外的5个标志
57、位。4.4 8086指令简介w2. 减法指令w1)不带借位减法指令subw格式: sub opd, opsw执行的操作: opdops opdw例如:sub ax,dx;axdxaxw同加法指令一样影响标志位(af:有借位,cf:有借位)w2)带借位减法指令sbbw格式:sbb opd, opsw执行的操作:opd ops-cf opdw其中cf为进位位的值。w例如:sbb ax,dxw对标志位的影响同不带借位减法指令。4.4 8086指令简介w3)减量指令dec(减1指令)w格式:dec opdw执行的操作: opd 一1 opdw例如:dec cx ; (cx)1cxw影响除cf的其它标志
58、位 w4)求负数指令negw格式:neg opdw指令功能:opd 0-(opd)w注意:操作数可以是字节和字,且是补码表示的无有符号数。只能在通用寄存器和内存单元中。注意溢出of和cf的变化w5)算术比较指令cmpw格式:cmp opd ,opsw执行的操作:opd opsw该指令与sub指令一样执行减法操作,但它并不保存结果,只是根据结果设置条件标志位。cmp指令后往往跟一条条件转移指令,根据比较结果产生不同的程序分支。w例如:cmp ax,bx; axbxw若指令执行前cf=1,ax=1000h,bx=0100h。w则指令执行后cf=0,zf=0,of=0,sf=0,pf=1。4.4 8
59、086指令简介w3乘法指令wmul无符号数乘法imul带符号数乘法w1)mul无符号数乘法指令w格式:mulopsw执行的操作:w字节操作数:al* opsaxw字操作数:ax* opsdx:axw双字操作数:eax* opsedx:eaxw例如:mul clw若指令执行前al=0b4h,cl=11h。w则指令执行后ax=0bf4h。wmul指令只影响cf、of:如果是ah(字节乘法)或者dx(字乘法)为全0,则cf和of=0,否则cf=of=1。4.4 8086指令简介w2)imul带符号数乘法指令w格式:imul opsw执行的操作与mul相同,但两个操作数均是带符号的补码数。w例如:im
60、ul clw对标志位的影响同mul指令。4.4 8086指令简介w4除法指令wdiv无符号数除法指令widiv带符号数除法指令w1)div无符号数除法指令w格式:div opsw若ops为字节类型,则:wax/ops的商alwax/ops的余数ahw若ops为字类型,则:wdx:ax/ops的商ax dx:ax/ops的余数dxw对标志位无有效影响。4.4 8086指令简介w以上几种形式商和余数均为无符号数。w2)idiv带符号数除法指令w格式:idiv opsw执行的操作:与div相同,但操作数必须是带符号补码数,商和余数也都是带符号数,且余数的符号和被除数的符号相同。w例如:idiv bl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《金字塔原理》读书笔记个人所感
- 2022年“安全生产月”宣传活动方案【4篇】
- 2021公司年终个人总结五篇
- 幼儿园教育实习调查报告汇编4篇
- 骄傲的初中满分作文素材700字
- 科学发展观提出的背景及形成与发展
- 生物学院食品安全-课件
- 全面保洁服务协议书(2篇)
- 儿童图书销售代理合同(2篇)
- 山西吕梁2025届高三上学期11月期中考试化学试卷试题及答案解析
- 教师节表彰大会动态PPT模板(推荐)课件
- DB36T 773-2021 导游星级划分与评定(高清版)
- (1-6年级)小学数学常用单位换算公式
- 中建安全标准化图册图集(上下全集)(全电子版)
- 高一物理必修一思维导图
- 锚索张拉和锁定记录表
- 2016年校本课程--------合唱教案1
- 【原创】《圆柱与圆锥》复习课教教学设计
- 《中国药典》规定中药饮片用量
- 国网合肥供电公司城市新建住宅小区电力建设实施细则
- 中小学生备战期末迎接期末考试动员班会PPT
评论
0/150
提交评论