汇编语言程序设计第01章第03章.ppt_第1页
汇编语言程序设计第01章第03章.ppt_第2页
汇编语言程序设计第01章第03章.ppt_第3页
汇编语言程序设计第01章第03章.ppt_第4页
汇编语言程序设计第01章第03章.ppt_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

1 汇编语言程序设计 2 第3章8086 8088指令系统 3 18086 8088指令格式3 28086 8088寻址方式3 3指令的执行时间3 48086 8088指令系统 3 3 18086 8088指令格式 操作数可以为1个或2个 甚至可以无操作数 当有2个操作数时 右边为源操作数 左边为目的操作数 4 指令系统 一组指令的集合 指令格式 寻址方式 寻找操作数的方法与数据有关的寻址方式与转移地址有关的寻址方式 3 28086 8088寻址方式 5 1 与数据有关的寻址方式 以MOV指令为例立即寻址MOVAX 3069H寄存器寻址MOVAL BH直接寻址MOVAX 2000H 寄存器间接寻址MOVAX BX 寄存器相对寻址MOVAX COUNT SI 基址变址寻址MOVAX BP DI 相对基址变址寻址MOVAX MASK BX SI 存储器寻址 6 1 立即寻址方式 操作数在指令中直接给出指令格式 MOVAL 5MOVAX 3064HMOVAL A 只能用于SRC字段MOV40H AL SRC和DST的字长一致MOVAH 3064H 7 2 寄存器寻址方式 操作数在指定的寄存器中MOVAX BXMOVAL BHMOVAX 3064H 字节寄存器只有AHALBHBLCHCLDHDL SRC和DST的字长一致MOVAH BX CS不能用MOV指令改变MOVCS AX 8 存储器寻址 操作数一般位于数据段 堆栈段 附加数据段的存储单元 指令中给出的是存储单元的地址或产生存储单元地址的表达式信息 执行此类指令时 首先根据操作数字段提供的地址信息 计算出有效地址EA 一个不带符号的16位数据 代表操作数地址离段首地址的距离 即该地址到段首地址的字节数 再根据下式计算操作数的物理地址 PA 16 段地址 EA 9 3 直接寻址方式 有效地址EA由指令直接给出例 MOVAX 2000H EA 2000H 假设 DS 3000H 那么PA 32000H 隐含的段为数据段DS 可使用段跨越前缀MOVAX ES 2000H 操作数地址可由变量 符号地址 表示 但要注意VALUEDB10变量的属性MOVAH VALUEMOVAX VALUE MOVAX WORDPTRVALUE 50 30 32000 AHAL 30 50 AX 3050H 10 4 寄存器间接寻址 EA在基址寄存器 BX BP 或变址寄存器 SI DI 中MOVAX BX PA 16d DS BX MOVAX ES BX PA 16d ES BX MOVAX BP PA 16d SS BP 不允许使用AX CX DX存放EAMOVAX CX SRC和DST的字长一致MOVDL BX BX 指示一个字节单元MOVDX BX BX 指示一个字单元 适于数组 字符串 表格的处理 11 12 6 基址变址寻址方式 指令格式 MOVAX BX DI MOVAX BX DI MOVAX ES BX SI 适于数组 字符串 表格的处理 必须是一个基址寄存器和一个变址寄存器的组合MOVAX BX BP MOVAX SI DI 13 7 相对基址变址寻址方式MOVAX MASK BX SI 或MOVAX MASK BX SI 或MOVAX MASK BX SI P42例3 11 14 段寄存器的使用规定 15 DATASEGMENTSTRINGDB HAPPYNEWYEAR 0DH 0AH COUNTDW17DATAENDS 1 直接寻址movdl stringmovah 2int21h 显示字符 H movdl string 1movah 2int21h 显示字符 A 例 编写一段显示字符串STRING的程序 16 2 寄存器间接寻址movcx count movcx 17movbx offsetstring string的偏址 bxNext movdl bx movah 2int21h 显示一个字符incbxloopnext 循环指令 3 寄存器相对寻址movcx count movcx 17movsi 0Next movdl string si movdl string si movah 2int21h 显示一个字符incsiloopnext 循环指令 17 4 基址变址寻址movcx count movcx 17movbx offsetstring string的偏址 bxmovsi 0Next movdl bx si movdl bx si movah 2int21h 显示一个字符incsiloopnext 循环指令 5 DOS显示字符串功能movdx offsetstring string的偏址 dx leadx stringmovah 9int21h 显示一串字符 18 段内寻址段内直接寻址JMPNEARPTRPROGIA段内间接寻址JMPWORDPTRTABLE BX 段间寻址段间直接寻址JMPFARPTRNEXTROUNT段间间接寻址JMPDWORDPTR INTERS BX 用来确定转移指令的转向地址 转移指令 无 有条件转移 子程序调用 2 与转移地址有关的寻址方式 19 1 段内直接寻址 转向的有效地址 当前 IP 位移量 8bit 16bit 20 1 JMPSHORTQUEST其中QUEST表示转向的符号地址 操作符SHORT表示位移量为8位有符号数 转移地址的范围是80H 7FH 128 127 即 只能相对于当前IP 转移指令的下一条指令的首地址 所指的位置作 128 127范围内跳转 所以称为短跳转 2 JMPNEARPTRPROGIA其中PROGIA表示转移的符号地址 操作符NEARPRT表示位移量为16位有符号数 转移地址的范围是8000H 7FFFH 32768 32767 即 只能相对于当前IP所指的位置作 32768 32767范围内跳转 所以称为近跳转 21 2 段内间接寻址转向的有效地址是一个寄存器或存储单元的内容 可用除立即数以外的任何一种数据寻址方式得到 所得到的转向的有效地址取代IP寄存器的内容 22 例如 DS 2000H BX 1256H SI 528FH TABLE 20A1H 232F7H 3280H 264E5H 2450HJMPBX IP 1256HJMPTABLE BX JMPWORDPTRTABLE BX IP 3280HJMP BX SI JMPWORDPTR BX SI IP 2450H 23 3 段间直接寻址用指令中提供的转向段地址和偏移地址取代CS和IP 例如 24 4 段间间接寻址用存储器中两个相继字单元的内容取代CS和IP 存储单元的地址可用某些数据寻址方式得到 25 JMPDWORDPTR INTERS BX 如DS 3000H BX 1200H INTERS 0020H 则存储单元的物理地址PA 30000 0020 1200 31220H指令执行前 CS 0000H IP 1000H 31220H 40H 31221 01H 31222H 00H 31223 10H 指令执行后 CS 1000H IP 0140H 31220H 40H 31221 01H 31222H 00H 31223 10H 26 指令存储和执行情况 27 3 3指令的执行时间 指令执行时间 基本执行时间 存储器操作数读写时间指令的基本执行时间因指令的不同而异 而存储器操作数读写所需的计算有效地址EA的时间又随寻址方式的不同而异 28 例3 3 1 设8086的时钟频率为5MHz 即时钟周期 0 2 s 试求两个字节相加的ADD指令在各种寻址方式下指令的执行时间t 解 1 目的操作数和源操作数均为寄存器操作数 如 ADDAL BL 需要花3个时钟周期 即t 3 0 2 0 6 s 29 2 目的操作数为寄存器操作数 源操作数为相对基址变址寻址的存储器操作数 ADDAX 20H BX SI 需要的时钟数为t 9 EA 9 12 21T第一项的9为这种寻址方式下指令的基本执行时间 第二项为计算EA的时间 即t 21 0 2 s 4 2 s 30 数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制指令 3 48086的指令系统 31 重点关注 指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的特殊要求 32 数据传送指令 将数据 地址或立即数传送到寄存器 存储器或端口号寄存器 通用数据传送指令 MOV PUSH POP XCHG 累加器专用传送指令 IN OUT XLAT 地址传送指令 LEA LDS LES 标志寄存器传送指令 LAHF SAHF PUSHF POPF 类型转换指令 CBW CWD 33 指令格式 MOVDST SRC其中 DST可以是 reg segreg memSRC可以是 reg segreg mem data指令功能 把源操作数的值传送给目的操作数 不影响标志位 通用数据传送指令 34 9种MOV指令格式 1 通用寄存器之间的数据传送 MOVreg reg 2 通用寄存器和存储器之间传送 MOVreg mem或者MOVmem reg 3 通用寄存器和段寄存器之间的传送 MOVsegreg reg或者MOVreg segreg 4 立即数送存储器 MOVmem data 5 立即数送通用寄存器 MOVreg data 6 段寄存器和存储器之间传送 MOVsegreg mem或者MOVmem segreg 35 主要的数据传送方式 36 对MOV指令有如下具体规定 1 两个操作数的数据长度要相同 要同为8位 16位 如 MOVBL AX是不正确的 2 两个操作数不能同时为段寄存器 如 MOVES DS 3 代码段寄存器CS只能作为源操作数 如 指令MOVCS AX不正确 指令MOVAX CS正确 4 立即数不能直接传送给段寄存器 如 MOVDS 100H等 5 立即数不能作为目的操作数 如 MOV100H AX 6 指令指针IP 不能作为MOV指令的操作数 7 两个操作数不能同时为存储单元 如 MOVVARA VARB其中VARA和VARB表示存储单元的符号地址 37 例1 1 MOVreg regMOVAL BL 8位通用寄存器之间数据传送MOVAX BX 16位通用寄存器之间数据传送 38 2 MOVreg mem或MOVmem regMOVAX VAR2 VAR2表示符号地址 存储器到寄存器MOVSI ES BP 存储器到寄存器 例2 39 例3 3 MOVsegreg reg或MOVreg segregMOVDS AX 正确 通用寄存器送段寄存器 MOVAX CS 正确 段寄存器送通用寄存器MOVCS AX 错误 代码段寄存器CS只能作为源操作数 段地址的传递必须通过通用寄存器 MOV指令的目的操作数不允许用CS 40 例4 4 MOVmem dataMOVVAR1 3 VAR1表示符号地址MOVWORDPTR BX 3 目的操作数指示传送数据为字数据MOVBYTEPTR BX SI 0FFH 目的操作数指示传送数据为字节数据 41 例5 5 MOVreg dataMOVAL 3 正确 立即数3送8位寄存器AL中MOVAX 03ABH 正确 立即数03ABH送16位寄存器AX中MOV3 AL 错误 目的操作数为立即数MOVAL 03FFH 错误 目的操作数与源操作数数据长度不一致 42 例6 6 MOVsegreg mem或MOVmem segregMOVDS DATA BX SI 存储器送段寄存器MOVDATA BX DI ES 段寄存器送存储器 43 判断指令格式 MOVAX BUFMOVBH DI MOVDI ES 3 SI MOVBP 3 BX SI MOVBUFA DLMOV BP AXMOVDS BP DLMOVBUF DSMOVES BUF 44 进栈指令 PUSHSRC执行操作 SP SP 2 SP 1 SP SRC 出栈指令 POPDST执行操作 DST SP 1 SP SP SP 2堆栈 后进先出 的存储区 段地址存放在SS中 SP在任何时候都指向栈顶 进出栈后自动修改SP 注意 堆栈操作必须以字为单位 不影响标志位 不能用立即寻址方式PUSH1234H DST不能是CSPOPCS PUSH POP 45 46 47 例1 设 AX 1234H SP 0100H 执行PUSHAX指令后 SP AX 解 执行步骤 SP SP 2 SP 1 SP AX指令执行后 SP 00FEH AX 1234H 48 例2 设 AX 5348H SP 00FEH 执行POPAX指令后 SP AX 解 执行步骤 AX SP 1 SP SP SP 2指令执行后 SP 0100H AX 1234H 49 交换指令 XCHGOPR1 OPR2执行操作 OPR1 OPR2 注意 不影响标志位 操作数之一必须为寄存器 不允许使用段寄存器例 XCHGAL BHXCHGBX BP SI XCHG 50 输入指令IN I O CPU 长格式 INAL PORT 字节 INAX PORT 字 执行操作 AL PORT 字节 AX PORT 1 PORT 字 短格式 INAL DX 字节 INAX DX 字 执行操作 AL DX 字节 AX DX 1 DX 字 累加器专用传送指令 只限使用AX或AL 51 例1 INAL 60H 从端口60H读入一个字节到AL中INAX 20H 把端口20H 21H按 高高低低 组成的字读入AXMOVDX 2F8HINAL DX 从端口2F8H读入一个字节到AL中INAX DX 把端口2F8H 2F9H按 高高低低 组成的字读入AX 52 输出指令OUT CPU I O 长格式 OUTPORT AL 字节 OUTPORT AX 字 执行操作 PORT AL 字节 PORT 1 PORT AX 字 短格式 OUTDX AL 字节 OUTDX AX 字 执行操作 DX AL 字节 DX 1 DX AX 字 OUT 53 例2 OUT61H AL 把AL的内容输出到端口61H中OUT20H AX 把AX的内容输出到端口20H 21H中MOVDX 3C0HOUTDX AL 把AL的内容输出到端口3C0H中OUTDX AX 把AX的内容输出到端口3C0H 3C1H中 54 注意 不影响标志位 前256个端口号00H FFH可直接在指令中指定 长格式 如果端口号 256 端口号 DX 短格式 例 INAX 28HMOVDATA WORD AX例 MOVDX 3FCHINAX DX例 OUT5 AL例 测试某状态寄存器 端口号27H 的第2位是否为1INAL 27HTESTAL 00000100BJNZERROR 若第2位为1 转ERROR处理 55 BX 30HF0040 31HF0041 AL 332HF0042 33HF0043 TABLE DS F000H 换码指令 XLAT或XLATOPR执行操作 AL BX AL 例 MOVBX OFFSETTABLE BX 0040HMOVAL 3XLATTABLE指令执行后 AL 33H注意 不影响标志位 字节表格 长度不超过256 首地址 BX 需转换的代码位移量 AL XLAT 56 有效地址送寄存器指令 LEAREG SRC执行操作 REG SRC指针送寄存器和DS指令 LDSREG SRC执行操作 REG SRC DS SRC 2 相继二字 寄存器 DS指针送寄存器和ES指令 LESREG SRC执行操作 REG SRC ES SRC 2 相继二字 寄存器 ES 地址传送指令 57 例 LEABX BX SI 0F62H LDSSI 10H LESDI BX MOVBX TABLE BX 0040HMOVBX OFFSETTABLE BX 1000HLEABX TABLE BX 1000HLDSBX TABLE BX 0040H DS 3000HLESBX TABLE BX 0040H ES 3000H 注意 不影响标志位 REG不能是段寄存器 SRC必须为存储器寻址方式 58 标志送AH指令 LAHF执行操作 AH FLAGS的低字节 AH送标志寄存器指令 SAHF执行操作 FLAGS的低字节 AH 标志进栈指令 PUSHF执行操作 SP SP 2 SP 1 SP FLAGS 标志出栈指令 POPF执行操作 FLAGS SP 1 SP SP SP 2 影响标志位 标志寄存器传送指令 59 例1 标志寄存器传送执行前 FLAGS 0485H AX 0FFFEH执行指令 LAHF执行后 FLAGS 0485H AX 85FEH即 AH 85H AL 0FEH执行指令 SAHF执行后 FLAGS 04FFH AX 0FFFEH 60 例2 将标志寄存器的陷阱标志TF置位 PUSHF FLAGS 堆栈区POPAX 堆栈区 AXORAX 0100H 设置TF 1PUSHAX AX 堆栈区POPF 堆栈区 FLAGS 61 CBWAL AX执行操作 若 AL 的最高有效位为0 则 AH 00H若 AL 的最高有效位为1 则 AH FFHCWDAX DX AX 执行操作 若 AX 的最高有效位为0 则 DX 0000H若 AX 的最高有效位为1 则 DX FFFFH例 MOVAX 0BA45H AX 0BA45HCBW AX 0045HCWD DX 0FFFFH AX 0BA45H注意 无操作数指令 隐含对AL或AX进行符号扩展 不影响条件标志位 类型转换指令 62 算术指令 加法指令ADD ADC INC 减法指令SUB SBB DEC NEG CMP 乘法指令MUL IMUL 除法指令DIV IDIV 十进制调整指令DAA DAS AAA AAS AAM AAD 63 加法指令加法指令 ADDDST SRC执行操作 DST SRC DST 带进位加法指令 ADCDST SRC执行操作 DST SRC DST CF加1指令 INCOPR执行操作 OPR OPR 1 注意 除INC指令不影响CF标志外 均对条件标志位有影响 64 加法指令对条件标志位的影响 CF位表示无符号数相加的溢出 OF位表示有符号数相加的溢出 1结果为负0否则 SF 1结果为00否则 ZF 1和的最高有效位有向高位的进位0否则 CF 1两个操作数符号相同 而结果符号与之相反0否则 OF 65 举例 n 8bit带符号数 128 127 无符号数 0 255 00000100 0000101100001111有 4 11 15OF 0无 4 11 15CF 0 有符号数和无符号数都不溢出 00001001 0111110010000101有 9 124 133OF 1无 9 124 133CF 0 有符号数溢出 无符号数溢出 00000111 11111011100000010有 7 5 2OF 0无 7 251 258CF 1 有符号数和无符号数都溢出 10000111 11110101101111100有 121 11 132OF 1无 135 245 380CF 1 66 例 双字的加法 DX 0002H AX 0F365H BX 0005H CX 8100H指令序列ADDAX CX 1 ADCDX BX 2 1 执行后 AX 7465HCF 1 2 执行后 DX 0008HCF 0 67 减法指令 减法指令 SUBDST SRC功能 目的操作数 源操作数 结果存于目的地址 源地址的内容不变 执行操作 DST DST SRC 带借位减法指令 SBBDST SRC功能 目的操作数 源操作数 低位借位CF 结果送目的地址执行操作 DST DST SRC CF 减1指令 DECOPR功能 将目的操作数减1 结果送目的地址 执行操作 OPR OPR 1 68 减法指令对条件标志位 CF OF ZF SF 的影响 CF位表示无符号数减法的溢出 OF位表示带符号数减法的溢出 1被减数的最高有效位有向高位的借位0否则 CF 1两个操作数符号相反 而结果的符号与减数相同0否则 OF 69 求补指令 NEGOPR功能 将目的操作数的每一位求反 包括符号位 后加1 结果送目的地址 执行操作 OPR OPR 比较指令 CMPOPR1 OPR2功能 目的操作数 源操作数 结果只影响标志位 不送入目的地址 执行操作 OPR1 OPR2 注意 除DEC指令不影响CF标志外 均对条件标志位有影响 70 例1 求补运算 MOVDX 6780HNEGDX DX 9880H 例2 比较AL的内容数值大小 CMPAL 50 AL 50JBBellow AL 50 AL 50 ALINCAH AH 1 AHBellow 71 例 x y z均为双字数据 分别存放在地址为X X 2 Y Y 2 Z Z 2的存储单元中 用指令序列实现w x y 24 z 并用W W 2单元存放w MOVAX XMOVDX X 2ADDAX YADCDX Y 2 x yADDAX 24ADCDX 0 x y 24SUBAX ZSBBDX Z 2 x y 24 zMOVW AXMOVW 2 DX 结果存入W W 2单元 72 乘法指令无符号数乘法指令 MULSRC带符号数乘法指令 IMULSRC执行操作 字节操作数 AX AL SRC 字操作数 DX AX AX SRC 注意 AL AX 为隐含的乘数寄存器 AX DX AX 为隐含的乘积寄存器 SRC不能为立即数 除CF和OF外 对条件标志位无定义 73 乘法指令对CF OF的影响 例 AX 16A5H BX 0611H 1 IMULBL AX AL BL A5 11 5B 11 060B F9F5 AX 0F9F5HCF OF 1 2 MULBX DX AX AX BX 16A5 0611 00895EF5 DX 0089H AX 5EF5HCF OF 1 00乘积的高一半为零11否则 MUL指令 CF OF 00乘积的高一半是低一半的符号扩展11否则 IMUL指令 CF OF 1010010101011011 74 除法指令无符号数除法指令 DIVSRC带符号数除法指令 IDIVSRC执行操作 字节操作 AL AX SRC 的商 AH AX SRC 的余数字操作 AX DX AX SRC 的商 DX DX AX SRC 的余数注意 AX DX AX 为隐含的被除数寄存器 AL AX 为隐含的商寄存器 AH DX 为隐含的余数寄存器 SRC不能为立即数 对所有条件标志位均无定义 如何判别结果有效 75 当被除数远大于除数时 所得的商就有可能超出它所能表达的范围 如果存放商的寄存器AL AX不能表达 便产生溢出 8086CPU中就产生编号为0的内部中断 除法错中断 说明 1 对DIV指令 除数为0 或者在字节除时商超过8位 或者在字除时商超过16位 则发生除法溢出 2 对IDIV指令 除数为0 或者在字节除时商不在 128 127范围内 或者在字除时商不在 32768 32767范围内 则发生除法溢出 除法指令DIV和IDIV虽然对标志位的影响未定义 但可产生溢出 76 例 无符号除法 MOVAX 0400H AX 400H 1024MOVBL 0B4H BL B4H 180DIVBL 商AL 05H 5 余数AH 7CH 124有符号除法 MOVAX 0400H AX 400H 1024MOVBL 0B4H BL B4H 76IDIVBL 商AL F3H 13 余数AH 24H 36注 带符号除法的余数符号和被除数符号相同 77 例 x y z v均为16位带符号数 计算 v x y z 540 x MOVAX XIMULY x y DX AX MOVCX AXMOVBX DXMOVAX ZCWD Z DX AX ADDCX AXADCBX DX x y z BX CX SUBCX 540SBBBX 0 x y z 540MOVAX VCWD V DX AX SUBAX CXSBBDX BX v x y z 540 IDIVX v x y z 540 x AX 余数 DX 78 十进制调整指令BCD码 用二进制编码的十进制数 又称二 十进制数压缩的BCD码 用4位二进制数表示1位十进制数例 59 10 01011001 BCD非压缩的BCD码 用8位二进制数表示1位十进制数例 59 10 0000010100001001 BCD数字的ASCII码是一种非压缩的BCD码DIGITASCIIBCD030H00110000131H00110001232H00110010 939H00111001 79 例 写出 3590 10的压缩BCD码和非压缩BCD码 并分别把它们存入数据区PAKED和UNPAK压缩BCD 3590 10 0011010110010000 BCD非压缩BCD 3590 10 00000011000001010000100100000000 BCD PAKED90H35H UNPAK00H09H05H03H 80 81 1 压缩的BCD码调整指令 DAA加法的十进制调整指令 DAS减法的十进制调整指令 2 非压缩的BCD码调整指令 AAA加法的ASCII码调整指令 AAS减法的ASCII码调整指令 AAM乘法的ASCII码调整指令 AAD除法的ASCII码调整指令 82 压缩BCD运算举例 1 MOVAL BCD1 BCD1 34HADDAL BCD1 BCD2 59H AL 8DHDAA 8DH 06H 93HMOVBCD3 AL BCD3 93H 2 MOVAL BCD1 BCD1 34HSUBAL BCD2 BCD2 59H AL 0DBHDAS 0DBH 60H 06H 75HMOVBCD3 AL BCD3 75H 25H 10n补码 83 非压缩BCD运算举例 1 MULBL AX AL BL 08 09AAM AL 0AH 48H 0AH 0702 2 AAD AX AH 0AH AL 48HDIVBL AL AX BL 48H 4 12HAAM AL 0AH 12H 0AH 0108 84 第3章作业Page1093 14 3 17 85 逻辑指令 逻辑运算指令AND OR NOT XOR TEST 移位指令SHL SHR SAL SAR ROL ROR RCL RCR 86 逻辑非指令 NOTOPR OPR不能为立即数执行操作 OPR OPR 不影响标志位逻辑与指令 ANDDST SRC执行操作 DST DST SRC 逻辑或指令 ORDST SRC执行操作 DST DST SRC 异或指令 XORDST SRC执行操作 DST DST SRC 测试指令 TESTOPR1 OPR2执行操作 OPR1 OPR2 CFOFSFZFPFAF00 无定义 根据运算结果设置 逻辑运算指令 87 例 屏蔽AL的第0 1两位ANDAL 0FCH例 置AL的第5位为1ORAL 20H例 使AL的第0 1位变反XORAL 3例 测试某些位是0是1TESTAL 1JZEVEN OR00100000 1 01XOR00000011 10 AND11111100 00 AND000000010000000 88 逻辑左移SHLOPR CNT逻辑右移SHROPR CNT算术左移SALOPR CNT 同逻辑左移 算术右移SAROPR CNT CF0 0CF CF 移位指令 89 循环左移ROLOPR CNT循环右移ROROPR CNT带进位循环左移RCLOPR CNT带进位循环右移RCROPR CNT CF CF CF CF 90 91 例 AX 0012H BX 0034H 把它们装配成 AX 1234H 例 BX 84F0H 1 BX 为无符号数 求 BX 2SHRBX 1 BX 4278H 2 BX 为带符号数 求 BX 2SALBX 1 BX 09E0H OF 1 3 BX 为带符号数 求 BX 4MOVCL 2SARBX CL BX 0E13CH MOVCL 8ROLAX CLADDAX BX 92 MOVCH 4 循环次数MOVCL 4 移位次数NEXT ROLBX CLMOVAX BXANDAX 0FHPUSHAXDECCHJNZNEXT 0008 0004 000F 0000 SP 3 BX 84F0H 把 BX 中的16位数每4位压入堆栈 93 串处理指令 设置方向标志指令CLD STD 串处理指令 串重复前缀MOVSB MOVSWREPSTOSB STOSWREPE REPZLODSB LODSWREPNE REPNZCMPSB CMPSWSCASB SCASW 94 与REP配合工作的MOVS STOS LODSREP执行操作 1 如 CX 0则退出REP 否则转 2 2 CX CX 1 3 执行MOVS STOS LODS 4 重复 1 3 95 MOVS串传送指令 MOVSDST SRCMOVSB 字节 MOVSW 字 例 MOVSES BYTEPTR DI DS SI 执行操作 1 DI SI 2 字节操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2方向标志DF 0时用 DF 1时用 REPMOVS 将数据段中的整串数据传送到附加段中 源串 数据段 目的串 附加段 96 执行REPMOVS之前 应先做好 1 源串首地址 末地址 SI 2 目的串首地址 末地址 DI 3 串长度 CX 4 建立方向标志 CLD使DF 0 STD使DF 1 97 SI DI 数据段附加段 SI DI 98 datasegmentmess1db personal computer dataendsextrasegmentmess2db17dup extraendscodesegmentmovax datamovds axmovax extramoves axleasi mess1leadi mess2movcx 17cldrepmovsb codeends 99 datasegmentmess1db personal computer mess2db17dup dataendscodesegmentmovax datamovds axmoves axleasi mess1leadi mess2movcx 17cldrepmovsb codeends 100 101 LODS从串取指令 LODSSRCLODSB 字节 LODSW 字 执行操作 字节操作 AL SI SI SI 1字操作 AX SI SI SI 2 注意 LODS指令一般不与REP联用 源串一般在数据段中 允许使用段跨越前缀来修改 目的串必须在附加段中 不影响条件标志位 102 与REPE REPZ REPNE REPNZ 配合工作的CMPS和SCASREPE REPZREPNE REPNZ执行操作 1 如 CX 0或ZF 0 ZF 1 则退出串操作 否则转 2 2 CX CX 1 3 执行CMPS SCAS 4 重复 1 3 103 CMPS串比较指令 CMPSSRC DSTCMPSB 字节 CMPSW 字 执行操作 1 SI DI 根据比较结果置条件标志位 相等ZF 1不等ZF 0 2 字节操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2 104 SCAS串扫描指令 SCASDSTSCASB 字节 SCASW 字 执行操作 字节操作 AL DI DI DI 1字操作 AX DI DI DI 2 105 例 从一个字符串中查找一个指定的字符messdb COMPUTER leadi messmoval T movcx 8cldrepnescasb C O M P U T E R di CX 2 106 例 比较两个字符串 找出它们不相匹配的位置 例 反向传送 leasi mess1leadi mess2movcx 8cldrepecmpsb leasi mess1 7leadi mess2 7movcx 8stdrepemovsb 107 控制转移指令 无条件转移指令JMP 条件转移指令JZ JNZ JE JNE JS JNS JO JNO JP JNP JB JNB JL JNL JBE JNBE JLE JNLE JCXZ 循环指令LOOP LOOPZ LOOPE LOOPNZ LOOPNE 子程序调用和返回指令CALL RET 中断与中断返回指令INT INTO IRET 108 无条件转移指令JMP 段内直接短转移 JMPSHORTOPR执行操作 IP IP 8位位移量段内直接近转移 JMPNEARPTROPR执行操作 IP IP 16位位移量段内间接转移 JMPWORDPTROPR执行操作 IP EA 109 段间直接远转移 JMPFARPTROPR执行操作 IP OPR的段内偏移地址 CS OPR所在段的段地址段间间接转移 JMPDWORDPTROPR执行操作 IP EA CS EA 2 110 段内直接短转移 JMPSHORTOPR执行操作 IP IP 8位位移量段内直接近转移 JMPNEARPTROPR执行操作 IP IP 16位位移量位移量是紧接着JMP指令后的那条指令的偏移地址 到目标指令的偏移地址的地址位移 当向地址增大方向转移时 位移量为正 向地址减小方向转移时 位移量为负 例如 JMPAGAIN 转移到AGAIN处继续执行 AGAIN DECCX 标号AGAIN的指令 111 段内间接转移 JMPWORDPTROPR执行操作 IP EA 将一个寄存器或主存字单元内容送入IP寄存器 作为新的指令指针 但不修改CS寄存器的内容 JMPAX IP AXJMPWORDPTR 2000H IP 2000H 112 段间直接远转移 JMPFARPTROPR执行操作 IP OPR的段内偏移地址 CS OPR所在段的段地址将标号所在段的段地址作为新的CS值 标号在该段内的偏移地址作为新的IP值 这样 程序跳转到新的代码段执行 JMPFARPTROTHERSEG 远转移到代码段2的OTHERSEG 113 段间间接转移 JMPDWORDPTROPR执行操作 IP EA CS EA 2 用一个存储单元表示要跳转的目标地址 这个目标地址存放在主存中连续的字单元中的 低位字送IP寄存器 高位字送CS寄存器 MOVWORDPTR BX 1000HMOVWORDPTR BX 2 1500HJMPFAR BX 转移到1500H 1000H 114 条件转移指令 条件转移指令是一组极其重要的转移指令 它根据标志寄存器中的一个 或多个 标志位来决定是否需要转移 这就为实现多功能程序提供了必要的手段 基本格式 JXXLABEL 条件满足 发生转移 IP IP 位移量 条件不满足 顺序执行 指定的条件XX如果成立 程序转移到由标号LABEL指定的目标地址去执行指令 条件不成立 则程序将顺序执行下一条指令 操作数LABEL是采用短转移 称为相对寻址方式 JXX指令不影响标志 但要利用标志 根据利用的标志位不同分成以下几种情况 115 条件转移指令 注意 只能使用段内直接寻址的8位位移量 1 根据单个条件标志的设置情况转移格式测试条件JZ JE OPRZF 1JNZ JNE OPRZF 0JSOPRSF 1JNSOPRSF 0JOOPROF 1JNOOPROF 0JPOPRPF 1JNPOPRPF 0JCOPRCF 1JNCOPRCF 0 116 2 比较两个无符号数 并根据比较结果转移 格式测试条件 JB JNAE JC OPRCF 1 JNB JAE JNC OPRCF 0 JBE JNA OPRCF ZF 1 JNBE JA OPRCF ZF 0 适用于地址或双精度数低位字的比较 117 3 比较两个带符号数 并根据比较结果转移 格式测试条件 JL JNGE OPRSF OF 1 JNL JGE OPRSF OF 0 JLE JNG OPR SF OF ZF 1 JNLE JG OPR SF OF ZF 0 适用于带符号数的比较 4 测试CX的值为0则转移格式测试条件JCXZOPR CX 0 118 例 如果X 50 转到TOO HIGH 否则 X Y RESULT 如果溢出转到OVERFLOW JGJOJNS 119 循环指令 注意 CX中存放循环次数 只能使用段内直接寻址的8位位移量LOOPLOOPZ LOOPELOOPNZ LOOPNE执行步骤 1 CX CX 1 2 检查是否满足测试条件 如满足则 IP IP 8位位移量 实行循环 不满足则IP不变 退出循环 120 循环指令 LOOPOPR测试条件 CX 0为零或相等时循环指令 LOOPZ LOOPE OPR测试条件 ZF 1且 CX 0不为零或不相等时循环指令 LOOPNZ LOOPNE OPR测试条件 ZF 0且 CX 0 121 例 求首地址为ARRAY的M个字之和 结果存入TOTAL MOVCX MMOVAX 0MOVSI AXAGAIN ADDAX ARRAY SI ADDSI 2LOOPAGAINMOVTOTAL AX 122 例 记录字符串中的空格个数到RESULT单元 MOVCX COUNT 设置循环次数MOVSI OFFSETSTRINGXORBX BX BX清0 用于记录空格数MOVAL 20H 空格的ASC码为20HAGAIN CMPAL ES SI JNZNEXT ZF 0 非空格 转移INCBX ZF 1 是空格 个数加1NEXT INCSILOOPAGAIN 字符个数减1 不为0继续循环MOVRESULT BX 保存结果 123 例 在多重循环的程序结构中 CX计数器的保存和恢复 MOVCX MAGAIN PUSHCXMOVCX NNEXT LOOPNEXT POPCXLOOPAGAIN MOVDI MAGAIN MOVCX NNEXT LOOPNEXT DECDIJNZAGAIN 124 子程序 子程序是完成特定功能的一段程序 如果某程序段在源程序内反复出现 就可把该程序段定义为子程序 这样可以缩短源程序长度 节省目标程序的存储空间 也可提高程序的可维护性和共享性 当主程序 调用程序 需要执行这个功能时 采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后 采用RET返回指令回到主程序继续执行 125 子程序调用指令CALL 类似JMP指令 CALL指令分成4种类型 CALLlabel 段内调用 直接寻址 段内直接调用 CALLr16 m16 段内调用 间接寻址 段内间接调用 CALLfarptrlabel 段间调用 直接寻址 段间直接调用 CALLdwordptrmem 段间调用 间接寻址 段间间接调用 但不同于JMP指令 CALL指令需要保存返回地址 段内调用 偏移地址IP入栈SP SP 2 SS SP IP段间调用 偏移地址IP和段地址CS入栈SP SP 2 SS SP IP SP SP 2 SS SP CS 126 子程序调用和返回指令 code1segmentmainprocfar callfarptrsubp retmainendpcode1endscode2segmentsubpprocfar retsubpendpcode2ends 段间调用和返回 codesegmentmainprocfar callsubp retmainendpsubpprocnear retsubpendpcodeends 段内调用和返回 127 1 段内直接调用 格式 CALLDST执行步骤 将子程序的返回地址存入堆栈 以便子程序返回使用 即 SP SP 2 SP 1 SP IP 转移到子程序入口地址去继续执行子程序 指令中的DST为子程序入口地址的符号地址 标号 在机器语言中 它是一个16位的相对位移量 即 IP IP 16位相对位移量注 段内调用只改变IP 不改变CS的值 128 2 段内间接调用 格式 CALLDST此指令的执行步骤和段内直接调用大致相同 区别在于指示子程序入口地址的DST的寻址方式不同而已 DST可以是寄存器寻址方式和各种存储器寻址方式 不允许是立即寻址和段寄存器 例如 CALLBX BX的内容是子程序的相对位移量CALLwordptr BX BX所指内存字单元的值是子程序的相对位移量 129 3 段间直接调用 格式 CALLDST执行操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP 偏移地址 指令的第2 3字节 CS 段地址 指令的第4 5字节 SS 堆栈段 SP 1 SP CS高位字节 CS CS低位字节 IP高位字节 SP 2 IP低位字节 IP SP 3 SP 4 CS 代码段 CS高8位 CS低8位 IP高8位 IP低8位 OP 130 4 段间间接调用 格式 CALLDST执行操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP EA CS EA 2 此指令的执行步骤和段间直接调用大致相同 区别在于指示子程序入口地址的DST的寻址方式不同而已 DST可以是寄存器寻址方式和各种存储器寻址方式 即由各种寻址方式形成的有效地址EA和EA 1两个字节单元内容送入IP EA 2和EA 3两个字节单元内容送入CS 例如 CALLdwordptr BX BX所指内存双字单元的内容分别送往IP和CS中 作为形成子程序入口地址的偏移地址和段地址 131 RET返回指令段内近返回 RET执行操作 IP SP 1 SP SP SP 2段内带立即数近返回 RETEXPRET可以带有一个立即数 堆栈指针SP将增加 即SP SP EXP 这个特点使得程序可以方便地废除若干执行CALL指令以前入栈参数 段间远返回 RET执行操作 IP SP 1 SP SP SP 2 CS SP 1 SP SP SP 2段间带立即数远返回 RETEXP 同段内带立即数返回 132 例 带立即数返回 SP 堆栈段 codesegmentmainprocfar pushaxpushbxpushcxcallsub retmainendpsubprocnear ret6subendpcodeends SP 133 中断 中断就是CPU暂停当前程序的执行 转而执行处理紧急事务的程序 并在该事务处理完后能自动恢复执行原先程序的过程 在此 称引起紧急事务的事件为中断源 称处理紧急事务的程序为中断服务程序或中断处理程序 中断处理程序基本上是系统程序员编写好的 是为操作系统或用户程序服务的 为了在应用程序中使用中断服务程序 程序员必须能够在程序中有目的地安排中断的发生 为此 指令系统提供了各种引起中断的指令 134 中断向量表和中断服务程序中断向量表是一个特殊的线性表 它保存着系统所有中断服务程序的入口地址 偏移量和段地址 在微

温馨提示

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

评论

0/150

提交评论