汇编语言+第05章+顺序结构程序.ppt_第1页
汇编语言+第05章+顺序结构程序.ppt_第2页
汇编语言+第05章+顺序结构程序.ppt_第3页
汇编语言+第05章+顺序结构程序.ppt_第4页
汇编语言+第05章+顺序结构程序.ppt_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

第五章顺序结构程序 5 1程序设计的步骤5 2流程图的应用5 3程序的基本控制结构5 4数据传送指令5 5算术运算指令5 6逻辑操作指令5 7移位操作指令5 8状态标志位操作指令5 9简单的I O功能调用5 10顺序结构程序举例 5 1程序设计的步骤 1 分析问题2 建立数学模型3 设计算法4 编制程序5 上机调试 5 2流程图的应用 1 流程线 2 端点框 3 判断框 4 处理框 5 连接框 5 3程序的基本控制结构 1 顺序结构 2 分支 选择 结构 3 循环 迭代 结构 5 4数据传送指令 数据传送指令共有12条 MOVPUSHPOPXCHGXLATLEALDSLESLAHFSAHFPUSHFPOPF 指令汇编格式 MOVdest src操作 将一个源操作数 字节或字 传送到目标操作数中 dest src 受影响的状态标志位 没有说明 指令中dest和src不能同时为存储器操作数 CS不能做为目标操作数使用 段寄存器之间不能互相传送 立即数不能送入段寄存器 1 MOV move 传送 1 1 MOV move 传送指令 举例 MOVALPHA W AXMOVBETA B ALMOVAL ES BX SI 1000H MOVBX 1000HMOVDS BXMOV BX 10 ALMOV BX 10HMOVDS 10HMOVCS AX 2 1 MOV move 传送指令 举例 MOVALPHA W AXMOVBETA B ALMOVAL ES BX SI 1000H MOVBX 1000HMOVDS BXMOV BX 10 ALMOVBYTEPTR BX 10HMOVWORDPTR BX 10H 3 2 PUSH pushwordontostack 进栈 指令汇编格式 PUSHsrc操作 堆栈指示器减2SP SP 2将给定的操作数存放到由SP指出的栈顶中 SP 1 SP src 受影响的状态标志位 没有说明 PUSH指令的目标地址一定在当前堆栈中 SS内容为段基址 偏移量由堆栈指针SP指出 操作数一定是16位的寄存器或存储器操作数 1 2 PUSH指令举例 假定AX 1234H BX 5678H SS 2000H SP 0100H 则执行下列指令后堆栈的状态是 PUSHAXPUSHBX 2 2 PUSH指令举例 PUSHAXPUSHBX 3 假定AX 1234H BX 5678H SS 2000H SP 0100H 则执行下列指令后堆栈的状态是 3 POP popwordoffstackintodestination 出栈 指令汇编格式 POPdest操作 1 将堆栈栈顶中存放的字传送到操作数中 dest SP 1 SP 2 堆栈指针加2 SP SP 2受影响的状态标志位 没有说明 目标操作数只能是16位的存储器或寄存器操作数 CS除外 1 3 POP指令举例 假定在执行指令 POPCXPOPDX之前 堆栈的状态如图所示 指令执行后CX DX的内容及堆栈的状态 2 3 3 POP指令举例 假定SI 1234H DI 5678H 则执行下列指令后DS ES的内容是 PUSHSIPUSHDIPOPDSPOPES 4 XCHG eXCHanGe 交换 指令汇编格式 XCHGdest src操作 dest的内容与src的内容互换 dest src 受影响的状态标志位 没有说明 dest和src不能同时为存储器操作数 段寄存器 立即数不能作为操作数 4 XCHG指令举例 XCHGAL BLXCHGCL BX XCHGBL BX SI 10 XCHGAX AXXCHGAL SIXCHG SI BX 10 XCHGDX DSXCHGAL 10 2 5 XLAT translate 转换表 指令汇编格式 XLAT操作 BX和AL内容之和指出的内存字节单元的内容送到AL中 AL BX AL 受影响的状态标志位 没有说明 XLAT指令用于查表 表的开始地址即表头地址由BX寄存器给出 AL中的原始值是要寻址的表中元素地址的位移量 规定表中第一个字节的位移量为0 这是一种特殊的基址变址寻址方式 基址寄存器为BX 变址寄存器为AL 看如下的一种加密方式 替代加密 ABCDEFGHIJKLMNOPQYZDMRNHXJLIOQUWACRSTUVWXYZBEGFKPTSV明文 THISISACOMPUTER密文 GXJEJEYDWQAFGRB 5 XLAT应用举例 2 5 XLAT应用举例 JMTABDB YZDMRNHXJLIOQ DB UWACBEGFKPTSV MOVAX SEGJMTABMOVDS AXMOVBX OFFSETJMTABMOVAL T SUBAL A MOVAH 0ADDBX AXMOVAL BX 3 5 XLAT应用举例 JMTABDB YZDMRNHXJLIOQ DB UWACBEGFKPTSV MOVAX SEGJMTABMOVDS AXMOVBX OFFSETJMTABMOVAL T SUBAL A XLAT 5 6 LEA loadeffectiveaddress 取有效地址 指令汇编格式 LEAdest src操作 将指令中给出的存储器操作数的有效地址 即地址的偏移量 送到指定的寄存器中 dest EA受影响的状态标志位 没有说明 LEA指令是将源操作数地址的偏移量 即有效地址传送到目标操作数中 源操作数必须是一个存储器操作数 标操作数可以是任一16位通用寄存器 指针寄存器或变址寄存器 1 6 LEA指令举例 DATA1DB10HLEABX DATA1MOVBX OFFSETDATA1MOVBX 1000HMOVDI 2000HLEAAX BX 1243H LEADX BX SI 1234H 2 7 LDS loaddatasegmentregister 加载数据段寄存器 指令汇编格式 LDSdest src操作 1 将双字长存储器操作数中的低地址字传送到指定的寄存器中 dest EA 2 将双字长存储器操作数中的高地址字传送到DS寄存器中 DS EA 2 受影响的状态标志位 没有说明 LDS是将src指出的连续两个字的内容 即一个32位的指针变量传送到一对16位的目标寄存器中 高位字为段基地址 LDS指令将其传送到数据段寄存器DS中 低位字为偏移量 传送到由dest指出的一个通用寄存器 指针寄存器或变址寄存器中 但不能是段寄存器 8 LES loaddatasegmentregister 加载附加段寄存器 指令汇编格式 LESdest src操作 1 将双字长存储器操作数中的低地址字传送到指定的寄存器中 dest EA 2 将双字长存储器操作数中的高地址字传送到ES寄存器中 ES EA 2 受影响的状态标志位 没有说明 LDS是将src指出的连续两个字的内容 即一个32位的指针变量传送到一对16位的目标寄存器中 高位字为段基地址 LDS指令将其传送到附加段寄存器ES中 低位字为偏移量 传送到由dest指出的一个通用寄存器 指针寄存器或变址寄存器中 但不能是段寄存器 9 LAHF loadAHfromflags 取标志 指令汇编格式 LAHF操作 标志寄存器低8位的状态标志填写在AH寄存器相应位中 AH SF ZF AF PF CF受影响的状态标志位 没有说明 此指令在80 x86中几乎无用 主要是为了保证与8080 8085向下兼容 才保留了该指令 10 SAHF storeAHintoflags 存标志 指令汇编格式 SAHF操作 将AH寄存器中的相应位传送到状态标志寄存器相应位中 SF ZF AF PF CF AH受影响的状态标志位 SF ZF AF PF CF说明 此指令在80 x86中几乎无用 主要是为了保证与8080 8085向下兼容 才保留了该指令 11 PUSHF pushflagsontostack 标志进栈 指令汇编格式 PUSHF操作 将堆栈指针减2 然后将标志寄存器F中的值存储到栈顶字的对应位中 SP SP 2 SP 1 SP F受影响的状态标志位 没有 12 POPF popflagsoffstack 标志出栈 指令汇编格式 POPF操作 将位于堆栈栈顶字中的对应位写入标志寄存器F中 然后将堆栈指针加2 F SP 1 SP SP SP 2受影响的状态标志位 所有标志位 5 5算术运算指令 5 5 1加法运算指令5 5 2减法运算指令5 5 3乘法运算指令5 5 4除法运算指令 5 5 1加法运算指令 1 ADD addition 加法2 ADC additionwithcarry 带进位加3 INC incrementby1 增1 1 ADD addition 加法 指令汇编格式 ADDdest src操作 两个操作数求和 结果存目标操作数中 dest dest src 受影响的状态标志位 OF SF ZF AF PF CF说明 dest和src不能同时为存储器操作数和段寄存器 例 ADDAL 3ADDCX MEM WADDGAMA BP DI BLADD BP DI OFFSETGAMA BL 2 ADC additionwithcarry 带进位加法 指令汇编格式 ADCdest src操作 两个操作数相加的同时 再加上CF 结果存入目标操作数中 dest dest src CF受影响的状态标志位 OF SF ZF AF PF CF说明 ADC指令主要用于多精度数据相加 例 ADCAL 3ADCDX BX 10 2 ADC指令应用 3字节数据相减 123456H 789ABCH 8ACF12H MOVAL 56HMOVAH 34HMOVBL 12HADDAL 0BCHADCAH 9AHADCBL 78H 2 ADC指令应用 3字节数据相减 123456H 789ABCH 8ACF12H MOVAL 56HMOVAH 34HMOVBL 12HADDAL 0BCHADCAH 9AHADCBL 79H MOVAX 3456H ADDAX 9ABCH 3 INC incrementbyone 增1 指令汇编格式 INCdest操作 将指定的操作数加1 并将结果回送到目标操作数中 dest dest 1受影响的状态标志位 OF SF ZF AF PF说明 INC指令不影响CF 例 INCALINCBXINCDATA1INC BX 3 INC incrementbyone 增1 指令汇编格式 INCdest操作 将指定的操作数加1 并将结果回送到目标操作数中 dest dest 1受影响的状态标志位 OF SF ZF AF PF说明 INC指令不影响CF 例 INCALINCBXINCDATA1INC BX INCWORDPTR BX 5 5 2减法运算指令 1 SUB subtract 减法2 SBB subtractwithborrow 带借位加3 DEC decrementby1 减14 NEG negate 取补5 CMP compare 比较 1 SUB subtract 减法 指令汇编格式 SUBdest src操作 从目标操作数减去源操作数 结果存入目标操作数中 dest dest src 受影响的状态标志位 OF SF ZF AF PF CF例 SUBAL 10HSUBAL BX 10H SUBAL AL 2 SBB subtractwithborrow 带借位减法 指令汇编格式 SBBdest src操作 从目标操作数中减去源操作数和CF 结果存入目标操作数中 dest dest src CF受影响的状态标志位 OF SF ZF AF PF CF说明 SBB指令主要用于多精度数据减法 例 SBBAL 0SBBDL CL 3 DEC decrementbyone 减1 指令汇编格式 DECdest操作 将指定的操作数减1 并将结果送回到目标操作数中 dest dest 1受影响的状态标志位 OF SF ZF AF PF说明 DEC指令不影响CF 例 DECBXDECBYTEPTR BX SI 1000H DECSP 4 NEG negate 取补 取负 指令汇编格式 NEGdest操作 从0中减去指令中给定的操作数 最后将结果送回到给定的操作数中 dest 0 dest 受影响的状态标志位 OF SF ZF AF PF CF说明 NEG指令对于带符号的数来说是取负 即改变操作数的符号 例 NEGAXNEGBYTEPTR BX 10 5 CMP compare 比较 指令汇编格式 CMPdest src操作 从目标操作数中减去源操作数 dest src 受影响的状态标志位 OF SF ZF AF PF CF说明 CMP将两个操作数相减 两个操作数保持原值不变 但与SUB指令一样影响标志 例 CMPAL BLCMPDL 10H 5 5 3乘法运算指令 乘法指令共有两条 分别对应无符号整数的乘法和带符号整数的乘法 1 MUL multiply unsigned 无符号乘法2 IMUL integermultiply signed 带符号乘法 1 MUL无符号乘法 指令汇编格式 MULsrc操作 源操作数与累加器的内容相乘 如果源操作数是字节数据 就与AL中的数据相乘 乘积为字 存放在AX中 如果源操作数是字数据 就与AX中的数相乘 乘积为双字 存放在DX和AX中 两个字节数相乘 AX AL src 两个字数据相乘 DX AX AX src 受影响的状态标志位 OF CF说明 源操作数src不能是立即数 如果乘积的高半部不为零时 CF和OF被置位 否则将被清除 1 MUL无符号乘法 AX src AX DX 例 MULBLMULDXMULBYTEPTR SI BX 1000H 2 IMUL带符号乘法 指令汇编格式 IMULsrc操作 将源操作数与累加器的内容相乘 如果源操作数是字节数据 就与AL中的数相乘 乘积为字 存放在AX中 如果源操作数是字数据 那么就与AX数相乘 乘积为双字 存放在DX和AX中 两个字节数相乘 AX AL src 两个字数据相乘 DX AX AX src 受影响的状态标志位 OF CF 说明 src不能是立即数 IMUL指令视操作数为带符号的数 如果乘积的高半部不是符号位的扩展时 CF和OF被置位 否则将被清除 5 5 4除法运算指令 1 DIV division unsigned 无符号除法2 IDIV division signed 带符号除法3 CBW convertbytetoword 将字节转换为字4 CWD convertwordtodoubleword 将字转换为双字 1 DIV division unsigned 无符号除法 指令汇编格式 DIVsrc操作 AX 或DX AX 的内容除以src的内容 商存放在AL 字节时 或AX 字时 并将余数存放在AH 字节时 或DX 字时 中 字除以字节 AX src AL 商 AH 余数 双字除以字 DX AX src AX 商 DX 余数受影响的状态标志位 不产生有效的状态标志 说明 src不能是立即数 如果商数超过了允许的最大值 字节时为0FFH 字时为0FFFFH 时就产生一个方式0的中断 并且商和余数都不确定 1 DIV division unsigned 无符号除法 1 DIV division unsigned 无符号除法举例 DIVBLDIVWORDPTR BX DI 1000H MOVAX 1000HMOVCL 08HDIVCL 2 IDIV division signed 带符号除法 指令汇编格式 IDIVsrc操作 AX 或DX AX 的内容除以src的内容 商存放在AL 字节时 或AX 字时 并将余数存放在AH 字节时 或DX 字时 中 字除以字节 AX src AL 商 AH 余数双字除以字 DX AX src AX 商 DX 余数受影响的状态标志位 不产生有效的状态标志 说明 src不能是立即数 如果商数超过了允许的最大值 字节时为 128 127 字时为 32768 32767 时就产生一个方式0的中断 并且商和余数都不确定 乘除法指令的应用扩充 乘法指令能实现 BYTE BYTE WORDWORD WORD DORD除法指令能实现 WORD BYTE BYTEDWORD WORD WORD如何实现 WORD BYTEBYTE BYTEWORD WORD 乘除法指令的应用扩充 乘法指令能实现 BYTE BYTE WORDWORD WORD DORD除法指令能实现 WORD BYTE BYTEDWORD WORD WORD如何实现 WORD BYTEBYTE BYTEWORD WORD WORD DWORD 字节 字转换为字 双字 无符号数 无符号 字节转换为字 AL AX MOVAH 0字转换为双字 AX DX AX MOVDX 0带符号 字节转换为字 AL AX 正数 MOVAH 0负数 MOVAH 0FFH字转换为双字 AX DX AX 正数 MOVDX 0负数 MOVDX 0FFFFH 3 CBW convertbytetoword 字节转换为字 指令汇编格式 CBW操作 将AL中第7位的值扩展到整个AH中 如果AL为正 那么AH 00H 否则AH 0FFH受影响的状态标志位 没有说明 CBW是将AL寄存器中数的符号位扩展到整个AH寄存器中 4 CWD convertwordtodoubleword 字转换为双字 指令汇编格式 CWD操作 将AX中的最高位扩展到整个DX中 如果AX为正 那么DX 0000H 否则DX 0FFFFH受影响的状态标志位 没有说明 CWD将寄存器AX的符号位扩展到整个寄存器DX中 5 6逻辑操作指令 1 NOT not orform1 scomplement 取反2 AND and logicalconjunction 逻辑与3 OR or inclusive 逻辑或4 XOR exclusiveor 异或5 TEST test orlogicalcompare 测试 1 NOT取反 指令汇编格式 NOTdest操作 将操作数的每一位求反 然后将结果回送到对应位中 dest dest受影响的状态标志位 没有例 NOTAXNOTWORDPTR BX SI 1000H 2 AND逻辑与 指令汇编格式 ANDdest src操作 两个操作数进行逻辑 与 即如果两个操作数的对应位都为1时 结果的对应位才为1 否则结果的对应位为0 dest dest src CF 0 OF 0受影响的状态标志位 OF SF ZF AF PF CF说明 AND指令可借助某个给定的操作数将另一个操作数中的某些位清除 这种操作也称设置屏蔽 使某些位保持不变 这个数通常称为掩码 例如 将一个源操作数与00001111B相 与 可将这个源操作数的高尼伯变为0 而低尼伯保持不变 例 ANDAL 0FHANDAL BX ANDDX DX 3 OR逻辑或 指令汇编格式 ORdest src操作 两个操作数进行逻辑 或 操作 即当两个操作数的对应位都为0时结果的对应位为0 否则结果的对应位为1 结果存入目标操作数中 CF和OF位置0 dest dest src CF 0 OF 0受影响的状态标志位 OF SF ZF AF PF CF说明 OR指令可用来使操作数中的某些位为1 某些位保持不变 例如 用10000000B与一个字节操作数相 或 可使这个字节操作数的最高有效位为1 例 ORAL 0FHORAL ALORAL BX DI 10 4 XOR异或 指令汇编格式 XORdest src操作 两个操作数执行逻辑 异或 操作 即当两个操作数的对应位相同时 结果的对应位为0 否则结果的对应位为1 结果存入目标操作数中 CF和OF位置0 dest dest src CF 0 OF 0受影响的状态标志位 OF SF ZF AF PF CF说明 XOR指令可用来使操作数中的某些位取反 某些位不变 例 XORAL 0FHXORAX AX 5 TEST测试 指令汇编格式 TESTdest src操作 将两个操作数进行逻辑 与 根据结果设置状态标志位 但不改变两个操作数的原始值 并将CF和OF清除 dest src CF 0 OF 0受影响的状态标志位 OF SF ZF AF PF CF说明 TEST指令通过 与 的方式对两个源操作数进行比较 但不保留 与 的结果 5 7移位操作指令 移位指令共有7条 可以对字节或字操作数移位 分别为逻辑移位 SHL SHR 算术移位 SAL SAR 不带进位循环移位 ROL ROR 和带进位循环移位 RCL RCR 说明 dest可以是任一通用寄存器 也可以是各种寻址方式给出的内存单元 cnt为移位次数 移位操作是将给定的目标操作数移动cnt次 cnt可以为1 也可以是CL的内容 SHL SAL SHR SAR影响CF OF PF SF ZF ROL ROR RCL RCR仅影响CF和OF位 CF的值总是最后一次被移入的值 在移动1位的移位中 如果源操作数的最高位 符号位 改变了 那么OF就被置1 否则 OF就被置0 左移时 最高位送入CF 右移时 最低位送入CF 5 7移位操作指令 RotateShiftLeftRight SHRAX 1RORBYTEPTR BX CL 5 8状态标志位操作指令 8086 8088有7条状态标志位控制指令 它们可以直接和独立地对8086CPU中的某一状态标志位进行控制 用来设置或改变状态标志位的状态 清0置1取反CFCLCSTCCMCDFCLDSTDIFCLISTI 5 9简单的I O功能调用 1 键盘输入调用方法 MOVAH 01H INT21H 功能 从键盘上接收一个字符 并在屏幕上显示出来 入口条件 无 出口条件 键入字符的ASCII码在AL中 5 9简单的I O功能调用 2 显示器输出 调用方法 MOVAH 02H INT21H 功能 在屏幕上光标处显示一个字符 入口条件 要显示的字符的ASCII码在DL中 出口条件 字符显示在屏幕上 例 在屏幕上显示A 用下述程序段实现 MOVDL 41H 字符A的ASCII码 MOVAH 02H INT21H 注意 使用这个功能调用后 AL的内容将被改变 5 9简单的I O功能调用 3 程序结束退出 调用方法 MOVAH 4CH MOVAL 0 INT21H 功能 结束程序运行 返回操作系统 入口条件 AL 返回码 出口条件 无 欲使程序结束运行时 使用本功能 5 9简单的I O功能调用 4 设置断点 调用方法 INT3 功能 停止程序运行 返回DEBUG 入口条件 无 出口条件 无 欲使程序结束运行而想检查运行结果时 则不应退出DEBUG 这时使用本功能 在以后上机实验时 多数是使用本功能来结束程序运行 5 10顺序结构程序举例 例5 1 例5 1计算y x 设x为三个字节长的数据 存于DATA1开始的单元 结果存入DATA2开始的单元 计算 x 就是对x取补 5 10顺序结构程序举例 例5 1 取补的概念 一个数据取补 就是将这个数据包括符号位在内取反加1 或者用0减去这个数据 带符号数据在机内用补码形式表示时 若原数据为负数 经取补操作后变为其绝对值 若原数据为正数 经取补操作后变为绝对值与其相等的负数 取补与补码是两个不同的概念 一个数据的补码 是用补码形式表示这个数据 当数据为正时 它的补码就是数据本身 当数据为负时 把其原码表示形式除符号位外取反加1或者将其绝对值进行取补所得结果为其补码 例如 用一个字节 8位二进制位 表示数据 已知 N1 00000101 取补后N1 11111011 N2 11111011 取补后N2 00000101 5 10顺序结构程序举例 例5 1 分析 将数据分为三种情况 1 最低字节不为0时 将最低字节取补 高 中字节取反 NOT NOT NEG例如 010011000011110000010000按位取反后 101100111100001111101111再 1 101100111100001111110000 2 最低字节为0 中间字节非0 则中间节和低字节取补 高字节取反 NOT NEG NEG 3 中间字节与低字节均为0时 3个字节均取补 NEG NEG NEG 5 10顺序结构程序举例 例5 1 算法 1 最低字节取补 2 进位取反 3 中间字节取反 取反的结果加进位 4 高字节取反 取反结果加进位 5 10顺序结构程序举例 例5 1 1 最低字节取补 2 进位取反 3 中间字节取反 取反的结果加进位 4 高字节取反 取反结果加进位 低字节不为0 低字节为0 中字节不为0 中低字节为0 高字节不为0 NEG CF 1 CF 0 NOT 0CF 0 NOT 0 NEG CF 0 CF 1 NOT 1 NEGCF 0 NOT 0 NEG CF 0 CF 1 NOT 1 NEGCF 1 NOT 1 NEG 5 10顺序结构程序举例 例5 1 1 EXAM5 1 1 2 SSEGSEGMENTSTACK 堆栈段3 STKDB20DUP 0 4 SSEGENDS5 DSEGSEGMENT 数据段6 DATA1DB35H 26H 03H 032635H 7 DATA2DB3DUP 0 8 DSEGENDS9 CSEGSEGMENT 代码段10 ASSUMECS CSEG DS DSEG11 ASSUMESS SSEG12 MBNEG MOVAX DSEG 段寄存器初值13 MOVDS AX14 MOVAX SSEG15 MOVSS AX16 MOVSP SIZESTK 设置堆栈指 5 10顺序结构程序举例 例5 1 17 MOVAL DATA1 读入数据低字节18 MOVAH DATA1 1 读入数据中字节19 MOVBL DATA1 2 读入数据高字节20 NEGAL 取补低字节21 CMC 进位取反22 NOTAH 中字节取反23 ADCAH 0 加进位24 NOTBL 高字节取反25 ADCBL 0 加进位26 MOVDATA2 AL 保存结果27 MOVDATA2 1 AH28 MOVDATA2 2 BL29 MOVAX 4C00H30 INT21H31 CSEGENDS32 ENDMBNEG 5 10顺序结构程序举例 例5 1 17 MOVAL DATA1 读入数据低字节18 MOVAH DATA1 1 读入数据中字节19 MOVBL DATA1 2 读入数据高字节20 NEGAL 取补低字节21 CMC 进位取反22 NOTAH 中字节取反23 ADCAH 0 加进位24 NOTBL 高字节取反25 ADCBL 0 加进位26 MOVDATA2 AL 保存结果27 MOVDATA2 1 AH28 MOVDATA2 2 BL29 MOVAX 4C00H30 INT21H31 CSEGENDS32 ENDMBNEG MOVAX WORDPTRDATA1 MOVWORDPTRDATA2 AX 5 10顺序结构程序举例 例5 1 17 LEASI DATA1 取原数据首址18 LEADI DATA2 取存放结果首址19 MOVAX SI 读入数据中低字节20 NEGAX21 CMC22 INCSI 地址指针增量23 INCSI24 MOVBL SI 读入数据高字节25 NOTBL26 ADCBL 027 MOV DI AX 存放结果中低字节28 INCDI29 INCDI30 MOV DI BL 存放结果高字节31 MOVAX 4C00H33 INT21H33 CSEGENDS34 ENDMBNEG 使用寄存器间接寻址方式 ADDSI 2 ADDDI 2 5 10顺序结构程序举例 例5 1 17 LEASI DATA1 取原数据首址18 LEADI DATA2 取存放结果首址19 MOVAX SI 读入数据中低字节20 NEGAX21 CMC22 INCSI23 INCSI24 MOVBL SI 读入数据高字节25 NOTBL26 ADCBL 027 MOV DI AX 存放结果中低字节28 INCDI29 INCDI30 MOV DI BL 存放结果高字节31 MOVAX 4C00H33 INT21H33 CSEGENDS34 ENDMBNEG MOVBL SI 2 MOV DI 2 BL 使用变址寻址方式 5 10顺序结构程序举例 例5 1 17 LEASI DATA1 取原数据首址18 LEADI DATA2 取存放结果首址19 MOVAX SI 读入数据中低字节20 NEGAX21 CMC24 MOVBL SI 2 读入数据高字节25 NOTBL26 ADCBL 027 MOV DI AX 存放结果中低字节30 MOV DI 2 BL 存放结果高字节31 MOVAX 4C00H33 INT21H33 CSEGENDS34 ENDMBNEG 使用变址寻址方式 DI SI 3 MOV SI 3 AXMOV SI 5 BL 5 10顺序结构程序举例 例5 1 换个算法 0 X 17 LEASI DATA1 取原数据首址18 MOVAX 0 AX清019 SUBAX SI 20 MOV SI 3 AX21 MOVBL 0 读入数据高字节22 SBBBL SI 2 23 MOV SI 5 BL 存放结果高字节24 MOVAX 4C00H25 INT21H26 CSEGENDS27 ENDMBNEG XORAX AX XORBL BL 5 10顺序结构程序举例 例5 1 换个算法 0 X 17 LEASI DATA1 取原数据首址18 MOVAX 0 AX清019 SUBAX SI 20 MOV SI 3 AX21 MOVBL 0 读入数据高字节22 SBBBL SI 2 23 MOV SI 5 BL 存放结果高字节24 MOVAX 4C00H25 INT21H26 CSEGENDS27 ENDMBNEG XORAX AX XORBL BL 3BYTE 4T2BYTE 3T 2BYTE 4T2BYTE 3T 5 10顺序结构程序举例 例5 1 17 MOVAX WORDPTRDATA119 SUBWORDPTRDATA2 AX20 MOVAL DATA1 221 SBBDATA2 2 AL24 MOVAX 4C00H25 INT21H26 CSEGENDS27 ENDMBNEG 换个算法 0 X 利用结果单元已经是0 5 10顺序结构程序举例 例5 2 例5 2设内存DATA单元存放一个无符号字节数据 编制程序将其拆成两位十六进制数 并存入HEX和HEX 1单元的低4位 HEX存放高位十六进制数 HEX 1单元存放低位十六进制数 5 10顺序结构程序举例 例5 2 1 EXAM5 2 2 SSEGSEGMENTSTACK3 STKDB20DUP 0 4 SSEGENDS5 DSEGSEGMENT6 DATADB0B5H7 HEXDB0 08 DSEGENDS9 CSEGSEGMENT10 ASSUMECS CSEG DS DSEG11 ASSUMESS SSEG12 DISC MOVAX DSEG13 MOVDS AX14 MOVAX SSEG15 MOVSS AX16 MOVSP LENGTHSTK 17 MOVAL DATA 取数据 18 MOVAH AL 保存副本 19 ANDAL 0F0H 截取高4位 20 MOVCL 04 21 SHRAL CL 移至低4位 22 MOVHEX AL 23 ANDAH 0FH 截取低4位 24 MOVHEX 1 AH 25 MOVAX 4C00H 26 INT21H 27 CSEGENDS 28 ENDDISC 5 10顺序结构程序举例 例5 3 例5 3设HEX HEX 1单元的低4位分别存放一位十六进制数 编制程序将其装配在一个字节中并存入DATA单元 HEX单元中数据做为高位部分 5 10顺序结构程序举例 例5 3 1 EXAM5 3 2 SSEGSEGMENTSTACK3 STKDB20DUP 0 4 SSEGENDS5 DSEGSEGMENT6 HEXDB0AH 06H7 DATADB08 DSEGENDS9 CSEGSEGMENT10 ASSUMECS CSEG DS DESG11 ASSUMESS SSEG12 PACK MOVAX DSEG13 MOVDS AX14 MOVAX SSEG15 MOVSS AX16 MOVSP SIZESTK 17 MOVAL HEX 取数据高序位18 MOVCL 0419 SHLAL CL 左移4位20 ORAL HEX 1 与低4位或21 MOVDATA AL 保存结果22 MOVAX 4C00H23 INT21H24 CSEGENDS25 ENDPACK 5 10顺序结构程序举例 例5 4 例5 4计算 Y 5X 8 设X为无符号字节数据 且在ARGX单元存放 计算结果 存入RLTY单元 5 10顺序结构程序举例 例5 4 1 EXAM5 4 2 SSEGSEGMENTSTACK3 STKDB20DUP 0 4 SSEGENDS5 DSEGSEGMENT6 ARGXDB157

温馨提示

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

评论

0/150

提交评论