2019/9/11 微机技术与仪器系统设计 计算机通过执行指令来完成用户的特定任 务,要使计算机完成一个完整的任务,就 需要执行一组指令,这一组指令通常也称 第二章 撒型计算机指令系统 为程序。 计算机能够执行的各种指令类型的全体称 为该处理器的指令系统。 概念 指令的基本构成 指令 控制计算机亮成指定操作的命令 目的 源 机器指令 指令的二进制代码形式。例如:CD21H 汇编指令 助记符形式的指令。例如:NT21H 操作码 [操作数],[操作数] 指令系统 CPU所有指冷及其使用规则的集合 0 ·汇铺语言寝序写入计算机后,必须由汇铺程序将其咖评成 说明计算机要执行哪种操作, ·是指个执行的参与者,即种 由机器指◆(指个码》触成的机器语言准序,才能由计算 加传道、近算、衫位、酰转 操作的对象。 机议别执行。 它是湘今中不可 有业湘个不需要操作数,通常 少的忽成部分。 的指个都有一个或两个绿作数, 也有个别指令有3个甚至4个操 作
2019/9/11 1 微机技术与仪器系统设计 第二章 微型计算机指令系统 • 计算机通过执行指令来完成用户的特定任 务,要使计算机完成一个完整的任务,就 需要执行一组指令,这一组指令通常也称 为程序。 • 计算机能够执行的各种指令类型的全体称 为该处理器的指令系统。 概念 指令——控制计算机完成指定操作的命令 机器指令——指令的二进制代码形式。例如:CD21H 汇编指令——助记符形式的指令。例如:INT 21H 指令系统——CPU所有指令及其使用规则的集合 • 汇编语言程序写入计算机后,必须由汇编程序将其翻译成 由机器指令(指令码)组成的机器语言程序,才能由计算 机识别执行。 指令的基本构成 说明计算机要执行哪种操作, 如传送、运算、移位、跳转 等操作,它是指令中不可缺 少的组成部分。 •是指令执行的参与者,即各种 操作的对象。 •有些指令不需要操作数,通常 的指令都有一个或两个操作数, 也有个别指令有3个甚至4个操 作数。 目的 源 1 2 3 4
2019/9/11 寻址方式 ·每种指令的操作码: ·指令系统设计了多种操作数的来源; ·用一个唯一的助记符表示(指令功能的英文缩写), 寻找操作数的过程就是操作数的寻址: ·对应着机器指令的一个二进制编码。 指令中的绿作数 寻找操作数的方式叫做(操作数)寻址方式 可以是一个具体的数值, 理解操作数的寻址方式是理解指令功能的前提 可以是存放数据的寄存器, 操作数采取哪一种寻址方式,会形响机器运行的 ·或指明数据在主存位置的存储器地址。 速度和效率。如何寻址一个操作数对程序的设计 来讲也很重要。 操作数在何处? 纳存 存储器操作数MOV AX,1000间 -直接包含在指令中 存储器寻址 立即数 MOV AX,0 立即数寻址 操作最在内存数排区,排作最字度包舍着此绿作敏地址。 在8086中,任何内待地址是由两部分血成: -包含在某个寄存暑中 段的地址: 无所在段的基地址 寄存器操作数 MOV AX,BX (大部分情况是数据段膏存器DS中); 寄存器寻址 叠内偏碧量:此单元与段基地址的矩高。 有藏地址EA(B乐Add): 段内偏形量为道应各升数据些构的需要,可以有几 成,所以也它称为有地址BA。 2
2019/9/11 2 • 每种指令的操作码: • 用一个唯一的助记符表示(指令功能的英文缩写), • 对应着机器指令的一个二进制编码。 • 指令中的操作数: • 可以是一个具体的数值, • 可以是存放数据的寄存器, • 或指明数据在主存位置的存储器地址。 寻址方式 • 指令系统设计了多种操作数的来源; • 寻找操作数的过程就是操作数的寻址; • 寻找操作数的方式叫做(操作数)寻址方式 • 理解操作数的寻址方式是理解指令功能的前提 • 操作数采取哪一种寻址方式,会影响机器运行的 速度和效率。如何寻址一个操作数对程序的设计 来讲也很重要。 操作数在何处? – 直接包含在指令中 立即数 MOV AX,0 立即数寻址 – 包含在某个寄存器中 寄存器操作数 MOV AX,BX 寄存器寻址 •在内存中 存储器操作数 MOV AX,[1000H] 存储器寻址 操作数在内存数据区,操作数字段包含着此操作数地址。 在8086中,任何内存地址是由两部分组成: 段的基地址:单元所在段的基地址 (大部分情况是数据段寄存器DS中); 段内偏移量:此单元与段基地址的距离。 有效地址EA(Effective Address) : 段内偏移量为适应各种数据结构的需要,可以有几个部分组 成,所以也把它称为有效地址EA。 5 6 7 8
2019/9/11 米-、 8086、8088寻址方式 的立即好县 (Immediate addresaing) 在外设中 (二)青存器寻址方式 Register addresaing 1/o操作数 IN AL,12H (三)直接得址 (Direct addre8ing) 1/0寻址 (四)青卉号间楼手址方式(Regserindiectaddeing) (五)寄存号桶时号址方式(Register rel山ative addressing) (六)基址寻址方式(Based indered addressing) (七)盖址加变址哥址方式(Re山ivebaed indered 作)立即寻t址(mmediate addressing) MOV AL,05H 作 操作数直接存放在霜令中,紧在操作马之后,作为指令 指令执行后:(AL)=05H 的一部分,存放在代码段里,这种操作戴赫为立即戴。 立即教可以是8位或16位的。 16位的立即数是高位字节放在高地址,低位字节放在低地址。 例: MOV AX.3064H 指令执行后:(AX)=3064 操作两 使用桶合:经常用于给青存露成存储单元航初值。 代康 注喜:凡能用子源操作数字及,不能用于目的操作数字及。 源操作数与用的操作字长频一致, 立即寻址方
2019/9/11 3 •在外设中 I/O操作数 IN AL,12H I/O寻址 一、8086、8088寻址方式 (一)立即寻址 (Immediate addressing) (二)寄存器寻址方式 (Register addressing) (三)直接寻址 (Direct addressing) (四)寄存器间接寻址方式(Register indirect addressing) (五)寄存器相对寻址方式(Register relative addressing) 或变址寻址(Index Addressing) (六)基址寻址方式(Based indexed addressing) (七)基址加变址寻址方式(Relative based indexed addressing) (一)立即寻址(Immediate addressing) 操作数直接存放在指令中,紧跟在操作码之后,作为指令 的一部分,存放在代码段里,这种操作数称为立即数。 立即数可以是8位或16位的。 16位的立即数是高位字节放在高地址,低位字节放在低地址。 使用场合:经常用于给寄存器或存储单元赋初值。 注意:只能用于源操作数字段,不能用于目的操作数字段。 源操作数与目的操作数字长须一致。 例: MOV AL,05H 指令执行后: (AL)=05H 例: MOV AX,3064H 指令执行后: (AX)=3064H 立即寻址方式 . 操作码 64H 30H 代 码 段 64H . 30H AH AL 指 令 . 操作码 05H 代 码 段 05H . AL 指 令 9 10 11 12
2019/9/11 章(二、寄#悬每址方式(Register addressing) 操作数在寄存器中,潮◆棉定寄存器青。 对于16位操作数,普存器可以是 ·MOV AX,BX MOV AX,BL; AX,BX,CX,DX,SI,DI,SP,BP. MOV AL,BH 以及投青存器。 MOV AX,3064H 对于8位操作数,寄存喜可以是 AL,AH,BL,BH,CL,CE,DL,DE. 注:cs代码段寄存器不能当做目标操作数 站种寻址方式固为禄作戴在寄存厚中 不能使用MOV推令直按赋值 源操作数与目的操作数字长要相同 不需要访同存储喜的运算地度较高。 膏存器寻址与度地址无关 13 14 例: ,(三)直接寻址(Direct addressing) 指令执行前:(AX)=3064H (SS)-1234H 绿作数地址的16位偏夢量,直接包含在牌令中, MOV SS,AX 存放在代码薇中相◆操作码之后, ·[2000H] 指令执行后 但操作数一表存放在数据段中, (SS)=3064H 必须先求出操作数的物理地址, (AX)保持不变 指令执行前: 1234 格后再诗问存情器才能取得操作数 物理地址:PA=16d×(DS+EA 指令执行后: 3064组 3064 寄存器寻址方式 或(10H) 15 16 4
2019/9/11 4 操作数在寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是: AX,BX,CX,DX,SI,DI,SP,BP。 以及段寄存器。 对于8位操作数,寄存器可以是: AL,AH,BL,BH,CL,CH,DL,DH。 这种寻址方式因为操作数在寄存器中 不需要访问存储器的运算速度较高。 (二)、 寄存器寻址方式 (Register addressing) • MOV AX, BX • MOV AL, BH • MOV AX, 3064H •MOV AX, BL ; • 注:cs代码段寄存器不能当做目标操作数 • 不能使用MOV指令直接赋值 • 源操作数与目的操作数字长要相同 • 寄存器寻址与段地址无关 例: 指令执行前:(AX)=3064H (SS)=1234H MOV SS,AX 指令执行后: (SS)=3064H (AX)保持不变。 指令执行前: 指令执行后: 寄存器寻址方式 SS AX 3064H 3064H 1234H 3064H 操作数地址的16位偏移量,直接包含在指令中, 存放在代码段中指令操作码之后, 但操作数一般存放在数据段中, 必须先求出操作数的物理地址, 然后再访问存储器才能取得操作数。 物理地址 : PA=16d×(DS)+EA 或(10H) • (三)直接寻址(Direct addressing) 13 14 15 16
2019/9/11 例:MOV AX,3100可 (DS)=6000H,(63100H=3050H 注意: (1)直接平址方武造用于处理单个变量。 则:(AX)=3050H (②)直址方式隐含的段专存是D8 又如:用符号地址代替数值地址, 6000g 8086/8088光许段奇地甲光许使用C3888作为段寄存善, 这时,必须在霜◆中转别拆明。如:MOV AX,ES:2000田 MOV AX,VALUE 60000 00 3100 代康 (3)应用符号地址代普数值地址时,应注意变量奏型。 或MOVAX,VALUE 3 VALUE DB 10 变量的属性 VALUE一有效操作数单元的 8100 MOV AH,VALUE 符号地址。 ·1MOVA区VALUE× MOVA区WORD PTR VALUR√ 如:VALUE在附加段中, 308 ·(4)BMPC机中规定双操作数指个必频有一个操作数使用寄 则应指定段跨越, 存馨方式。 MOVAX,ES:VALUE 5 要处理莱存放在存暗器里的变量,可以用直楼导址方式北变量 或MOVAX,ES:[VALUE到 直接 个等存中再作处理。 17 ·(四膏存赛间接寻址方式 (Register indirect addressing) 希数在存储器中 操作数地址的16位偏移量包含在:BP、BX、SL、DI寄存器中。 只有SI、DI、BX和BP可作间址寄存暑 ·注 ·若选择S1、D1、BX作为间楼导址 例:MOV AX,B为 (BX) 操作敢一般在现行数据段区域中,用DS作为段 MOV CL,CS:[DI] (BP) 地址 EA= (S) 若选海BP膏存器作为间接寻址 幢误例, X MOV AX,[DX] (DI) 操作薰在堆找段区域中,用$寄存器的内容作为 段地址 X MOV CL,[A刈 19 20 5
2019/9/11 5 例:MOV AX,[3100H] (DS)=6000H , (63100H)=3050H 则:(AX)=3050H 又如:用符号地址代替数值地址。 MOV AX,VALUE 或 MOV AX,[VALUE] VALUE——有效操作数单元的 符号地址。 如:VALUE在附加段中, 则应指定段跨越。 MOV AX,ES:VALUE 或MOV AX,ES:[VALUE] 直接寻址方式 6000H . 操作码 00 31 . 50H 30H . 6 0 0 0 0 + 3 1 0 0 6 3 1 0 0 63100H 30H 50H AH AL 代 码 段 数 据 段 DS 注意: (1)直接寻址方式适用于处理单个变量。 (2)直接寻址方式隐含的段寄存器是 DS, 8086/8088允许段跨越,即允许使用 CS SS ES作为段寄存器, 这时,必须在指令中特别标明。如:MOV AX, ES: [2000H] (3)应用符号地址代替数值地址时,应注意变量类型。 VALUE DB 10 变量的属性 •MOV AH, VALUE • MOV AX, VALUE •MOV AX, WORD PTR VALUE •(4) IBM PC机中规定双操作数指令必须有一个操作数使用寄 存器方式。 要处理某存放在存储器里的变量,可以用直接寻址方式把变量 先取到一个寄存器中再作处理。 操作数在存储器中, 操作数地址的16位偏移量包含在:BP、BX、SI、DI寄存器中。 • 只有SI、DI、BX和BP可作间址寄存器 • • 例: MOV AX, [BX] • MOV CL, CS:[DI] • 错误例 : • × MOV AX, [DX] • × MOV CL, [AX] • (四) 寄存器间接寻址方式 (Register indirect addressing) EA = (BX) (BP) (SI) (DI) • 注: • 若选择SI、DI、BX作为间接寻址 • 操作数一般在现行数据段区域中,用(DS)作为段 地址 • 若选择BP寄存器作为间接寻址 • 操作数在堆栈段区域中,用SS寄存器的内容作为 段地址 17 18 19 20