Intel汇编_Chapter_09_字符串和数组.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Intel汇编_Chapter_09_字符串和数组

* 计算机科学系-汇编课件 第9章 字符串和数组 要点: 基本字符串操作指令 精选的字符串过程 二维数组 整数数组的查找和排序 1. 基本字符串操作指令 并不局限于字符串 REP、REPZ/REPE、REPNZ/REPNE MOVSB、MOVSW、MOVSD CMPSB、CMPSW、CMPSD /CMPS SCASB、SCASW、SCASD LODSB、LODSW、LODSD STOSB、STOSW、STOSD .data string1 byte “this is a example”,0 count = lengthof string1 string2 byte count dup(?) .code cld mov esi,offset string1 mov edi,offset string2 mov ecx,count rep movsb cld/std是每次执行movsb指令时,edi/esi变化的方向; rep:首先检测ecx0?,如=0则执行下一条指令,否则ecx--,执行movsb movsb:会自动处理edi/esi值的增加/减小 拷贝 比较 .data source dword 1234h target dword 5678h .code mov esi,offset source mov edi,offset target cmpsd ja L1 jmp L2 mov ecx,count cld repe cmpsd cmps dword ptr [esi],[edi] mov eax,offset source mov ebx,offset target cmps dword ptr [eax],[ebx] 扫描 将AL/AX/EAX的值同内存中的字节、字或双字比较,目标内存由edi寻址 .data alpha byte “ABCDEFGH”,0 .code mov edi,offset alpha mov al,’F’ mov ecx,lengthof alpha cld repna scasb jnz quit ;一直到最后都没有找到 dec edi ;找到了,edi倒退一位 保存和导出 STOSB、STOSW、STOSD指令 将AL/AX/EAX的值存储到【edi】中 LODSB、LOCSW、LOCSD指令 将【esi】的值传送到AL/AX/EAX中 例子:数组乘法 2. 精选的字符串过程 Str_compare过程 Str_length过程 Str_copy过程 Str_trim过程 Str_ucase过程 Str_compare Str_compare过程 比较两个字符串 invoke Str_compare, addr string1,addr string2 两个字符串按照8位的ASCII码逐字节比较 大小写敏感 没有返回值 关系 CF ZF 转移指令 string1string2 1 0 jb string1=string2 0 1 je string1string2 0 0 ja Str_length Str_length过程 在EAX寄存器中返回字符串的长度 invoke Str_length, addr string Str_copy Str_copy过程 将以空字符结尾的字符串从源位置拷贝到目的位置 必须确保目的操作数足够大以容纳被拷贝的字符串 invoke Str_copy,addr source,addr target Str_trim Str_trim过程 从以空字符结尾的字符串中删除特定字符之后的所有字符 必须检查可能出现的各种情况 字符串为空 字符串在末尾包含一个或多个特定字符,“Hello##” 字符串中不包含特定字符 字符串中包含一个或多个特定字符,其后又有一些其他字符 invoke Str_trim,addr source,expchar Str_ucase Str_ucase过程 将以空字符结尾的字符串中所有的字符转换成大写字符 invoke Str_ucase, addr string 基址变址操作数 将两个寄存器的值相加(称为基址和变址)来产生偏移地址; 操作数可以任意两个32位通用寄存器 Loc(i, j) = Loc(0,0) + ( b2 * i + j) * L 表格的例子 3. 二维数组 3. 二维数组 相对基址变址操作数 偏移 + 基址 + 变址 [base + index + displacement] displacement [base + index] 偏移displacement可以是变量的名字或常量表达式 举例说明 4. 整数数组的查找和排序 冒泡排序法 对小数组工作得很好,但对大

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档