三逻辑指令内容摘要:
data2 EMDS code SEGMENT 、、 CLD MOV AX, data1 MOV DS, AX LEA SI, str1 MOV AX, data2 MOV ES, AX LEA DI, str2 MOV CX, 4 REP MOVSB 、、 code ENDS 假设程序经汇编 、 连接后 , 装入内存的情况如下 : 41 ‘D’‘C’ ‘B’‘A’00H00H00H00H1234:0000DS : SI1235:0000ES:DI(CX)=4执行 R E P 前各寄存器的设置执行一次 MOVSB 后‘D’‘C’ ‘B’‘A’‘A’00H00H00H1234:0001DS : SI1235:0001ES:DI(CX)=3执行完 R E P 后‘D’‘C’ ‘B’‘A’‘A’‘B’‘C’‘D’1234:0004DS : SI1235:0004ES:DI(CX)=0程序执行结果: 42 例 2 比较 string1和 string2的两串 , 长度为 8字节 string1 1121a2b3c4dstring21121a11223443 用 REPZ CMPS 进行串比较 编程: ① 设置比较方向 (STD或 CLD) ② 设置源串 、 目的串地址 将源串首地址 (DF=0时 ), 或末地址 ( DF=1时 ) 放入 DS、 SI 将目的串首地址 (DF=0时 ), 或末地址 ( DF=1时 ) 放入 ES、 DI ③ 设置串长度 将串的长度放入 CX中 ④ 按 字节比较 用 REPZ CMPSB 按 字比较 用 REPZ CMPSW 44 执行完 REPZ CMPS后 , 根据 ZF判断两串比较结果。 ▲ 若 ZF=1, 两串相等 , 此时: CX=0, 表明串中所有元素已比较完毕 SI、 DI指向串尾的下一单元。 ▲ 若 ZF=0, 两串不等 , 此时: CX的值为剩下的未比较的元素个数。 SI、 DI指向不相等元素的下一元素。 45 code SEGMENT 、、 CLD。 DF=0,正向比较 MOV AX, SEG string1。 源串首地址 → DS:SI MOV DS, AX LEA SI, string1 MOV AX, SEG string2。 目的串首地址 → ES:DI MOV ES, AX LEA DI, string2 MOV CX, 8。 串长度 → CX REPZ CMPSB。 串比较 JZ equal。 利用 ZF判断比较结果 不相等处理 JMP exit equal: 相等处理 exit: 、 code ENDS 46 code SEGMENT 、、 CLD。 DF=0,正向比较 MOV AX, SEG string1。 源串首地址 → DS:SI MOV DS, AX LEA SI, string1 MOV AX, SEG string2。 目的串首地址 → ES:DI MOV ES, AX LEA DI, string2 MOV CX, 8。 串长度 → CX REPZ CMPSB JZ equal 不相等处理 JMP exit equal: 相等处理 exit: 、 code ENDS JNZ notequ 相等处理 JMP exit notequ: 不相等处理 exit: 、 47 、 、112233 441a2b3c4d112233441a2b3c4dstring1string2DS : SIES : DI (CX )= 0, ZF=1执行完 REPZ CMPSB后 , 此时: ZF=1, 两串相等 CX=0 , 两串所有元素已比较完 SI、 DI串尾的下一单元 例 48 、 、112233 441a4d112233442c4d2b3c3b3cstring1 string2DS : SI ES : DI(CX )=3 , Z F = 0执行完 REPZ CMPSB后 , 此时: ZF=0, 两串不等 CX=3, 剩下的未比较的元素个数 SI、 DI指向不相等元素的下一元素。 例 49 例 3 用 REPNZ SCAS 在串中找关键字。 编程步骤: ① 设置查找方向 ② 设置串地址 将串的首地址 (DF=0时 ), 或末地址 ( DF=1时 ) 放入 ES、 DI中。 ③ 设置关键字 将关键字放入 AL (关键字为字节 )或 放入 AX(关键字为字 )。 ④ 设置串长度 将串的长度放入 CX中。 ⑤ 查找字节 用 REPNZ SCASB 查找字 用 REPNZ SCASW 50 执行完 REPNZ SCAS后 , 根据 ZF判断查找结果。 ▲ 若 ZF=1, 则串中有关键字 , 此时: CX的值为剩下的未搜索的元素个数 , DI指向关键字元素的下一元素 , 而关键字 在 ( DI )1的位置 ▲ 若 ZF=0, 则串中无关键字 , 此时: CX=0, 表明串中所有元素以搜索完毕 DI指向串尾的下一单元。 51 例 、 REPNZ SCASB JZ found 未找到处理 JMP exit found: 找到处理 exit: 、 关键字元素( DI ) = 0003‘C’‘$’‘B’‘A’‘D’ ( CX) = 0002 ZF=1执行后( DI ) = 000 0(CX) = 000 5 (AL) = ‘$’执行前注意: $ 字符在 (D I ) 1=0002H 的位置52 ▲ 串指令可单独使用 MOV AL, [SI] MOV ES:[DI], AL 等价于 MOVSB INC SI INC DI (假设 DF=0) next: JCXZ exit DEC CX MOVSB 等价于 REP MOVSB JMP next exit: 、 说明: 53 下面程序段完成字传送 (8000:1000H) ← (4000:2020H) MOV AX, 4000H MOV DS, AX MOV SI, 2020H MOV AX, 8000H MOV ES, AX MOV DI, 1000H MOVSW 54 ▲ 可在有源操作数的串指令前使用段跨越前缀 , 此时:源串操作数的段值由段跨越前缀指定。 包括指令 MOVS、 LODS、 CMPS 例 ES : MOVSB 执行 ( ES:DI) ← (ES:SI) 而不是 ( ES:DI) ← (DS:SI) ES: SCASB 没有源串 ES: STOSW ▲ 目的串操作数不允许使用段跨越前缀 , 即串指令前的段跨越前缀必指源串操作数。 55 ▲ 重复前缀中 CX 减 1操作 , 不影响标志。 REPNZ 执行流程(CX)=(CX)1REPNZ 后的串 指 令YNYNCX=0 ?ZF =0 ?REP 执行流程(CX)=(CX)1REP 后的串 指 令YNCX=0 ?(CX)=(CX)1REPZ 后的串 指 令YNYNCX=0?ZF = 1 ?REPZ 执行流程56 操作类型默 认段寄存器是否允许段 跨 越有效地址取指令 CS 否 IP以 BP 做基址的 操 作 数SS C S 、 DS 、 ES EA直接寻址、以 B X 做基址的 操 作 数DS CS 、 SS 、 ES EA堆栈操作 SS 否 SP源 串 DS CS 、 S S 、 ES SI串操作目的串 ES 否 DI几种操作复习 57 DS ES SS CS IP 数据暂存器 PSW标志 寄存器 执行部件控制电路 指令译码器 AX BX CX DX AH BH CH DH SI DI BP SP AL BL CL DL 寄存器组 指 令 队 列 总线 接口控制电路 运 算 器 地址加法器 、 指令 1 指令 2 指令 3 指令 4 、 数据 1 数据 2 数据 3 、 地址总线 AB 数据总线 DB 控制总线 CB 地 址 译 码 器 58 五 . 控制转移指令 在 8086/8088中 , 指令的地址 固定由 CS和 IP两个寄存器决定。 DS ES SS CS IP 数据暂存器 PSW标志 寄存器 执行部件控制电路 指令译码器 AX BX CX DX AH BH CH DH SI DI BP SP AL BL CL DL 寄存器组 指 令 队 列 总线 接口控制电路 运 算 器 地址加法器 、 指令 1 指令 2 指令 3 指令 4 、。三逻辑指令
本资源仅提供20页预览,下载后可查看全文
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。
相关推荐
三、tms320c54x的指令系统
右向左。 间接寻址中 *Arn+0B/0B表示位倒序寻址。 8点的 FFT蝶型结运算 W0W0W2W0W2W0W1W2W3x(0)x(4)x(2)x(6)x(1)x(5)x(3)x(7) X(7)X(6)X(5)X(4)X(3)X(2)X(1)X(0)W0W0W00000 0100 0010 0110 0001 0101 0011 0111 FFT中混序就是位倒序 FFT运算时输出
三、内存管理应用程序设计
进行显示。 使用完成后,需要清除位图对象 m_Bitmap和内存显示设备 MemDC。 下一页 上一页 停止放映 第 39/76 页 程序步骤 ① 建立单文档 /视图框架程序,工程名为“ Example3_9”; ② 在文件“ ”的 OnDraw(CDC* pDC) 函数中添加如下代码: CDC MemDC。 //首先定义一个显示设备对象 CBitmap m_Bitmap。
万里长城在我国古代社会主要起什么作用?想一想,到了近代
武器研制成功。 原子弹被装在导弹上: 导弹弹头为原子弹 氢弹爆炸成功: 1967年 6月 17日 继原子弹之后,我国科学家邓稼先(两弹元勋)等人艰苦奋斗,又以最快的速度,研制出了爆炸威力远远高于原子弹的氢弹 现在我们能造什么。 能造桌子椅子,能造茶碗茶壶,能种粮食,还能磨成面粉,还能造纸,但是,一辆汽车、一架飞机、一辆拖拉机都不能造。 我国为什么要下决心研制核武器。 我们取得的成就有什么意义呢。