NEW03第三章80 x86指令系统.ppt

上传人:sh****n 文档编号:6386802 上传时间:2020-02-24 格式:PPT 页数:73 大小:820.81KB
返回 下载 相关 举报
NEW03第三章80 x86指令系统.ppt_第1页
第1页 / 共73页
NEW03第三章80 x86指令系统.ppt_第2页
第2页 / 共73页
NEW03第三章80 x86指令系统.ppt_第3页
第3页 / 共73页
点击查看更多>>
资源描述
第3章8086 8088指令系统 3 18086 8088指令格式与寻址方式3 2数据传送类指令3 3算数运算类指令3 4逻辑运算与移位指令3 5串操作类指令3 6控制转移类指令3 7标志处理和处理器控制类指令 3 18086 8088指令格式与寻址方式 机器指令 操作码 地址码 操作数或操作数的地址 表示该指令所要完成的操作 都是二进制代码 3 1 1指令的基本格式 汇编语言 符号化了的机器语言 用助记符代替机器语言的二进制代码 2 8086 8088汇编语言指令 例 MOVAL 80H 3 1 2指令的寻址方式 指令的寻址方式 顺序寻址方式 跳转寻址方式 3 1 38086 8088操作数的寻址方式 立即数可以是8位 16位立即数只能是整数 不能是小数 变量或其它类型的数据立即数只能作为源操作数 2 寄存器寻址 操作数在8位 16位 或32位 通用寄存器中 寄存器可以是AX BX CX DX SI DI SP BPAH AL BH BL CH CL DH DL 在一条指令中 可以对源操作数采用寄存器寻址 也可以对目标操作数采用寄存器寻址 还可以两者都采用寄存器寻址方式 386以上 3 存储器寻址 存储器寻址 直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址 操作数的逻辑地址包含在指令中 1 直接寻址 假设DS 5000H 地址为51070H字存储单元的内容是6789H 注意 立即数寻址和直接寻址的书写格式 直接寻址的地址要放在方括号中 例 MOVAX VALUE或MOVAX VALUE 符号地址 2 寄存器间接寻址 操作数在存储器中 操作数的逻辑地址由寄存器提供寄存器的内容是段内的偏移地址 BX BP SI DI之一 注 如果没有特殊说明 用寄存器SI DI和BX间接寻址时 对应的段寄存器是DS 如果用寄存器BP间接寻址时 对应的段寄存器是SS 再假设51234H字单元的内容是6789H 执行该条指令后 AX 6789H 例2 MOV BP CX假设 SS 4000H BP 1234H CX 6789H 则 目的操作数的物理地址为41234H SS 16 BP 41234H 执行该条指令后 41234 89H 41235 67H 8位位移量16位位移量 3 寄存器相对寻址 带位移量的寄存器间接寻址 逻辑地址 BX BP SI DI 再假设548ACH字存储单元的内容是55AAH那么 执行该指令后 AX 55AAH BX BP和SI DI寄存器组合起来进行间接寻址 有效地址EA 逻辑地址 BX BP SI DI 一个基址寄存器的内容加上一个变址寄存器的内容 4 基址变址寻址 例 MOVAX BX SI 假设 DS 1000H BX 5000H SI 2000H则 有效地址为 7000H BX SI 物理地址为 17000H DS 16 有效地址 语句执行后 17000H 和 17001H AX 5 相对基址变址寻址 MOVAX MASK BX SI MOVBH 4 DI BP MOVBH BP DI 4 例 基址变址寻址加上一个相对位移量 综合练习 假设 BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令没有使用前缀 直接寻址 有效地址 物理地址 1B57H21000H 1B57H 22B57H 寄存器间接寻址 寄存器为BX 有效地址 物理地址 0158H21000H 0158H 21158H BX寄存器相对间接寻址 有效地址 物理地址 0158H 1B57H 1CAFH21000H 1CAFH 22CAFH 综合练习 假设 BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令没有使用前缀 10A5H21000H 10A5H 220A5H 10A5H 1B57H 2BFCH21000H 2BFCH 23BFCH 0158H 10A5H 11FDH21000H 11FDH 221FDH 相对基址加变址的寻址 BX为基址寄存器 DI为变址寄存器 0158H 10A5H 1B57H 2D54H21000H 2D54H 23D54H 综合练习 有效地址 物理地址 假设 BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令没有使用前缀 3 2数据传送类指令 3 2 1通用数据传送指令 格式 MOVOPRD1 OPRD2 目的 源 功能 把一个字节或一个字从源操作数PORD2送至目的操作数OPRD1 源操作数不改变 注意 1 源和目的操作数的类型要一致 即同时为字节或同时为字2 不允许对IP CS进行操作3 两个存储器操作数之间不允许直接进行信息传输4 两个段寄存器之间不能直接传送信息 也不允许用立即寻址方式为段寄存器赋值5 目的操作数不能为立即寻址方式 例 MOVAX 1000H MOVAL E MOVAX 2 BP SI 立即数送到AX 立即数送到AL E的ASCII码 如果BP换成BX 判断对错 MOV5 ALMOV BX SI MOVDS 1000HMOVCS AXMOVAX DX MOVSI SI MOV SI AX 3 2 2交换传送指令 XCHG 格式 XCHGOPRD1 OPRD2功能 操作数OPRD1的内容与操作数OPRD2的内容交换 例 XCHGAL AHXCHGSI BXXCHGAL SI 3 XCHG DI BX 3 DX 注意 1 两个存储器操作数不能互相交换2 段寄存器和立即数都不能作为操作数 假设 SS 5000H SP 2000H 00000H 52000H FFFFFH 格式 PUSHOPRD 功能 SP 2 把源操作数OPRD的16位数据压入堆栈 SP自动减2将AX的内容传送到SP指向的单元 1 入栈指令PUSH 50000H 3 2 3堆栈指令 格式 POPOPRD功能 从堆栈中弹出16位数据到目的操作数OPRD SP自动加2 2 出栈指令POP 可以是通用寄存器 段寄存器 CS除外 和字存储单元 执行指令POPBX 3 2 4有效地址传送指令 格式 LEAREG OPRD 16位的通用寄存器 功能 把操作数的有效地址传送到操作数REG寄存器 例 LEAAX 2728H 执行后 AX 2728HLEABX BP SI 指令执行后 BX的内容为BP SI的值 注意 LEA和MOV的区别 3 2 5换码指令XLAT 格式 XLAT功能 完成一个字节的查表转换 把累加器AL中的值 转换成以BX为表基址的表中值 七段数码管 判断对错 PUSHALPOPCSXCHGDS BXXCHG BX SI POPBHXCHGAX 1234H 3 2 6标志寄存器传送指令 1 读取标志指令LAHF LoadAHwithFlags 格式 LAHF功能 把标志寄存器的低8位对应的传送到寄存器AH AH MOVAH 0C1H 例 AH SFZFAFPFCF SAHF FR的低8位 3 2 6标志寄存器传送指令 3 2 7输入 输出数据传送指令 1 输入指令IN 格式 IN累加器 端口地址功能 从一个端口读取一个字节或一个字 传送到AL或AX 端口地址可以直接给出或由DX寄存器间接给出 例 INAL 50H 将50H端口的字节读入ALINAX 70H 将70H 71H两端口的值读入AXINAL DX 从DX所指的端口中读取一个字节INAX DX 从DX和DX 1所指的两个端口读取一个字 注意 外部设备最多可有65536个I O端口 0000 FFFFH 只有前256个端口可在指令中直接给出 00 FFH 2 输出指令OUT 格式 OUT端口地址 累加器功能 将AL中的一个字节或AX中的一个字输出到指定端口 例 OUT70H ALOUTDX AL 传送类指令不影响标志位 判断对错 OUT258 ALOUTDX BLINAL 1234HINAL BHOUT120 ALOUTDX ALINAL 80HINAL DX 3 3算术运算类指令 3 3 1加法指令 1 加法指令ADD 格式 ADDOPRD1 OPRD2功能 两个操作数相加 结果送至目的操作数OPRD1 例 ADDAL 50H AL的内容和50H相加 结果AL中ADDCX 1000H CX的内容和1000H相加 结果放在CX中ADDDI SI DI和SI的内容相加 结果放在DI中ADD BX DI AX BX DI和BX DI 1两个存储单元和AX相加 结果放在BX DI和BX DI 1所指的存储单元中ADDAX BX 2000H BX 2000H和BX 2001H所指的两个单元的内容和AX的内容相加 结果在AX中 注意 两个操作数不能同时为存储器寻址方式 2 带进位加法指令ADC 格式 ADCOPRD1 OPRD2功能 两个操作数相加再加上进位标志CF 结果送至目的操作数OPRD1 MOVSI 2000H 第一个数的首址MOVDI 3000H 第二个数的首址MOVAX SI 第一个数的低16位取到AXADDAX DI 两个数的低16位相加MOV SI AX 低16位相加的结果送到2000H字单元MOVAX SI 2 取第一个数的高16位到AX中ADCAX DI 2 两个高16位数相加 再加CFMOV SI 2 AX 高16位的结果送到2002H和2003H单元 例 将两个四字节的无符号数相加 两个数分别放在2000H 3000H开始的单元 要求结果放在2000H开始的单元 MOVDI 2000HMOVSI 3000HMOVAX SI ADD DI AXMOVAX SI 2 ADC DI 2 AX MOVDI 2000HMOVSI 3000HMOVAX SI ADD DI AXADDSI 2ADDDI 2MOVAX SI ADC DI AX 3 增量指令INC 格式 INCOPRD功能 操作数OPRD的内容加1 结果送回OPRD 该指令结果不影响进位标志CF 影响其它的五个状态标志 例 INCAL AL的内容加1INCCX CX的内容加1INC BX 存储单元的内容加1 通用寄存器 存储器 3 3 2减法指令 1 减法指令SUB 格式 SUBOPRD1 OPRD2功能 目的操作数减去源操作数 结果送到目的标操作数 源操作数不变 执行结果影响标志寄存器 3 减量指令DEC 格式 DECOPRD功能 操作数OPRD的内容减1 并把结果送回OPRD 执行结果不影响CF 但影响其它五个状态标志 5 比较指令CMP 格式 CMPOPRD1 OPRD2功能 操作数OPRD1减去OPRD2 运算结果不送到OPRD1但影响状态标志 注意 两个操作数本身都没有发生变化 3 3 3乘法和除法指令 格式 MULOPRD功能 字节 AX AL OPRD字 DXAX AX OPRD 有符号数乘法指令 乘法指令MUL和IMUL 例 假设 AL 0B4H BL 11H 求执行MULBL的乘积值 求执行IMULBL的乘积值 无符号数 AL 0B4H 190D BL 11H 17D 190D 17D 3060D 3060D 0BF4H 执行MULBL后 AX 0BF4HAH 0 CF OF 1 0B4H 10110100B取补码 4CH 76D 1292D 10100001100B FAF4H 补码 除法指令DIV IDIV 格式 DIVOPRD功能 字节 AX OPRD AL AH字 DXAX OPRD AX DX 除法指令对标志位的影响无定义 注意 如果除数为0 或者8位数除时商超过8位 或者16位除时商超过16位 则认为是溢出 引起0号中断 有符号数除法指令 5 符号扩展指令 字节扩展指令CBW 格式 CBW功能 寄存器AL中的符号扩展到寄存器AH 若AL的最高有效位为0 则AH 0 否则AH 0FFH 字扩展指令CWD 格式 CWD功能 寄存器AX中的符号扩展到寄存器DX 若AX的最高有效位为0 则DX 0 否则DX 0FFFFH 例 计算表达式的值 X Y Z 1024 75 假设其中的X Y Z均为16位带符号数 分别放在名为XXX YYY ZZZ的变量单元中 3 4逻辑运算和位移指令 1 逻辑 与 指令AND 格式 ANDOPRD1 OPRD2功能 两个操作数进行按位的逻辑 与 运算 结果送到目的操作数OPRD1 CF 0 OF 0 结果影响ZF SF PF 3 4 1逻辑运算指令 2 逻辑 或 指令OR 格式 OROPRD1 OPRD2功能 两个操作数进行按位的逻辑 或 运算 结果送到目的操作数OPRD1 CF 0 OF 0 结果影响ZF SF PF 4 逻辑 异或 指令XOR 格式 XOROPRD1 OPRD2功能 两个操作数进行按位的逻辑 异或 运算 结果送到目的操作数OPRD1 CF 0 OF 0 结果影响ZF SF PF 通常用于检测某位是否为1 但又不改变原来值的场合 1 检查AL中的D6位或D2位是否有一位为1 例 2 要求屏蔽AL寄存器中的第6位和第4位 ANDAL 0AFH 10101111B 3 要求AL寄存器中的第0位和第1位变反 XORAL 03H 00000011B 3 4 2移位指令 1 算数逻辑移位指令 格式 SALOPRD m 算术左移指令SHLOPRD m 逻辑左移指令SAROPRD m 算术右移指令SHROPRD m 逻辑右移指令 功能 操作数左或右移m位 ShiftArithmeticLeft SHiftlogicRight m为1或为CL当要移多位时 移位位数需存放在CL寄存器中 2 循环移位指令 ROLOPRD m 循环左移指令ROROPRD m 循环右移指令RCLOPRD m 带进位循环左移指令RCROPRD m 带进位循环右移指令 格式 功能 操作数左或右循环移m位 m是移位位数 为1或为CL 当要移多位时 移位位数需存放在CL寄存器中 只影响标志CF和OF RotateRight lift 例 不用乘法指令 用移位指令编程实现AL寄存器的内容乘以10 假设结果仍然是8位 SALAL 1 AL中的数左移1位 2 MOVBL ALMOVCL 2SALAL CL AL中的数再左移2位 8 ADDAL BL AL中的数 10 3 5串操作类指令 字符串 字符的一个序列 字符串操作的几点说明 由变址寄存器SI指向源操作数 串 由变址寄存器DI指向目的操作数 串 规定源串放在当前数据段中 目的串放在当前附加段中 即 DS SI指向源串ES DI指向目的串 3 5 1重复前缀 1 重复前缀REP 格式 REP串操作指令 功能 重复后面的串操作指令 CX 次 REP后面一般跟MOVS或STOS 即 CX 0并且ZF 1时 重复串操作指令 3 5 1重复前缀 3 重复前缀REPNZ REPNE 格式 REPNZ串操作指令或REPNE串操作指令 功能 重复后面的串操作指令 每重复一次CX 1 重复一直进行到CX为0或串操作指令使零标志ZF为1止 即 CX 0并且ZF 0时 重复串操作指令 3 5 2字符串指令 格式 MOVSB或MOVSW 功能 MOVSB DS SI ES DI 然后根据方向标志DF确定SI DI增1还是减1 若DF 1 SI DI自动减1 若DF 0 SI DI自动加1 在执行MOVS前 必须确定方向 即DF置位或复位 MOVSW DS SI ES DI 然后根据方向标志DF确定SI DI增2还是减2 若DF 1 SI DI自动减2 若DF 0 SI DI自动加2 1 字符串传送指令MOVS 2 字符串存指令STOS 格式 STOSB或STOSW 功能 把累加器的值存到内存中 如果使用了重复前缀REP 即对某个区域填充累加器的内容 STOSB 字节存 AL ES DI 并根据DF执行DI DI 1 注意 字符串存指令不影响标志 STOSW 字存 AX ES DI 并根据DF执行DI DI 1 3 字符串取指令LODS 格式 LODSB或LODSW 功能 把内存中的值取到累加器 LODSB 取字节 DS SI AL并根据DF执行DI DI 1 注意 字符串取指令不影响标志 LODSW 取字 DS SI AX并根据DF执行DI DI 2 4 字符串扫描指令SCAS 格式 SCASB或SCASW SCASB 字符串字节扫描 AL ES DI 影响有关标志位 并根据DF执行DI DI 1DF 0时DI DI 1DF 1时DI DI 1 功能 SCASW 字符串字扫描 AX ES DI 并根据DF执行DI DI 2 5 字符串比较指令CMPS 格式 CMPSB或CMPSW CMPSB 字符串字节比较 DS SI ES DI 影响有关标志位 并根据DF执行DI DI 1 功能 CMPSW 字符串字比较 DS SI ES DI 影响有关标志位 并根据DF执行DI DI 2 用串传送指令把1000H单元的3个字节的数据传送到2000H单元 CLDMOVSI 1000HMOVDI 2000HMOVSBMOVSBMOVSBHLT CLDMOVSI 1000HMOVDI 2000HMOVCX 03HREPMOVSBHLT 例1 3 5 3字符串指令举例 要求把当前数据段中偏移1000H开始的100个字节的数据传送到2000H开始的单元中 CLDPUSHDSPOPES ES等于DSMOVSI 1000H 置源串指针初值MOVDI 2000H 置目的串指针初值MOVCX 100 重复次数REPMOVSB 每次传送一字节数据 例2 在某字符串中查找是否存在 字符 该字符串的首地址为1000H 长度为32个字节 如果存在把所在地址送入BX寄存器中 否则BX寄存器清0 结果不为 0 没找到 否则 找到了 地址为DI 1 例3 CLD 清方向标志DFLEADI 1000H MOVCX 20H 传送32个数据XORAX AXREPSTOSW 将32个字清零HLT 将当前段1000H开始的64个单元清零 重复CX次 例4 3 6控制转移类指令 3 6 1无条件转移指令 程序的寻址 代码段寄存器CS 程序指针寄存器IP 直接转移 转移的地址信息直接出现在指令中间接转移 转移的目标地址信息间接存储于某寄存器或某一内存单元 相对转移 以当前的IP值增加或减少某一个值绝对转移 以一个新的值完全代替当前的IP值 JMPSHORTL1JMPNEARPTRL2JMPWORDPTRBXJMPWORDPTR BX JMPFARL2JMPDWORDPTR BX 段内直接短转移 段内直接近转移 段内间接近转移 段间直接远转移 段间间接远转移 3 6 2调用和返回指令 1 段内直接调用与返回 格式 CALL过程名 功能 调用当前段内的子程序操作 SP SP 2 SP IP IP IP disp 子程序入口地址与当前地址的差值 格式 RET操作 IP SP SP SP 2 2 段内间接调用与返回 格式 CALLOPRD操作 SP SP 2 SP IP IP OPRD 格式 RET操作 IP SP SP SP 2 16位通用寄存器或字存储器 3 段间直接调用与返回 格式 CALL过程名 功能 调用其它代码段中的子程序操作 SP SP 2 SP CS SP SP 2 SP IPIP 过程入口地址的偏移量CS 过程入口地址的段值 远过程 格式 RET操作 IP SP SP SP 2 CS SP SP SP 2 4 段间间接调用与返回 格式 CALLOPRD操作 SP SP 2 SP CS SP SP 2 SP IPIP OPRD低 CS OPRD高 格式 RET操作 IP SP SP SP 2 CS SP SP SP 2 双字存储器操作数 3 6 3条件转移指令 条件转移不影响标志 3 6 4循环控制指令 1 计数循环指令LOOP 格式 LOOP标号功能 寄存器CX的值减1 如果结果不等于0 则循环至标号 否则顺序执行 DECCXJNZ标号 3 不等于 结果不为0循环指令LOOPNE LOOPNZ 格式 LOOPNE标号或LOOPNZ标号功能 寄存器CX的值减1 且判断只有在CX 0 而且标志ZF 0的条件下 才循环至标号 否则顺序执行 3 7标志处理和处理器控制类指令 1 对标志位操作指令 2 处理器控制类指令 1 同步命令 2 处理器暂停指令HLT HLT CPU进入暂停状态 在暂停状态不进行任何操作 1 在RESET线上有复位信号2 在NMI线上有请求3 在中断允许情况下 在INTR线上有请求 脱离暂停的条件 所以 HLT指令常在程序中为了等待中断而使用 3 空操作指令NOP
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!