第一范文网 - 专业文章范例文档资料分享平台

汇编语言复习资料天津大学王建荣

来源:用户分享 时间:2025/5/20 23:01:54 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第九章 字符串与数组

9.2 基本字符串操作指令(B:字节,W:字,D:双字) ? MOVSB, MOVSW, MOVSD ? CMPSB, CMPSW, CMPSD ? SCASB, SCASW, SCASD ? STOSB, STOSW, STOSD ? LODSB, LODSW, LODSD 方向标志 方向标志值 对ESI和EDI的影响 寻址顺序 CLD(清零) 增加 低-高 STD(置位) 减少 高-低 重复前缀:指令使用ECX作为计数器进行重复 REP 当ECX>0重复 REPZ,REPE 零标志置位并且ECX>0重复 REPNZ,REPNE 零标志清零并且ECX>0重复

9.2.1 MOVSB, MOVSW, MOVSD

MOVSB, MOVSW, and MOVSD 指令从ESI指向的内存位置复制数据到EDI指向的内存位置。

同时ESI和EDI寄存器自动增加或减少(依据方向标志的值而定)。 指令 ESI和EDI自动增加或减少的值 MOVSB 1 MOVSW 2 MOVSD 4

9.2.2 CMPSB, CMPSW, CMPSD CMPSB, CMPSW, CMPSD 指令可以将ESI指向的内存操作数同EDI指向的内存操作数相比较

注:只有在两个字符串长度相等的条件下,使用CMPS指令比较两个字符串才是可行的,此限制将由Str_compare解决。

9.2.3 SCASB, SCASW, SCASD

SCASB, SCASW, SCASD指令把AL/AX/EAX中的值同由EDI寻址的目标内存中的字节,字或双字相比较。

若使用REPE,当ECX>0并且AL/AX/EAX匹配内存中的值,继续扫描;若使用REPNE,当AL/AX/EAX匹配内存中的值或ECX=0停止。

41

9.2.4 STOSB, STOSW, STOSD

STOSB, STOSW, STOSD指令把AL/AX/EAX的内容存储在EDI指向的内存单元中,同时EDI的值根据方向标志的值增加或减少。

9.2.5 LODSB, LODSW, LODSD

LODSB, LODSW, LODSD 从ESI指向的内存位置向AL/AX/EAX中装入一个值,同时ESI的值根据方向标志值增加或减少、

9.3 精选的字符串过程 9.3.1 Str_compare 过程

;比较string1和string2,设置零标志和进位标志方式同CMP指令 Str_compare PROTO, string1: PTR BYTE, string2: PTR BYTE

关系 进位标志 零标志 若为真则转移的指令 string1string2 0 0 JA

9.3.2 Str_length 过程 ;在EAX中返回字符串的长度 Str_length PROTO, pString: PTR BYTE

9.3.3 Str_copy 过程

;复制源字符串到目的串中 Str_copy PROTO,

source: PTR BYTE, target: PTR BYTE

9.3.4 Str_trim 过程

;从字符串中删除指定的字符,第二个参数是要删除的字符 Str_trim PROTO,

pString: PTR BYTE, char: BYTE

9.3.5 Str_ucase 过程 ;把字符串转换成大写

42

Str_ucase PROTO, pString: PTR BYTE

9.4 二维数组

基址编址操作数:基址变址操作数把两个寄存器的值相加,得到一个偏移地址。两个寄存器分别称为基址(base)和变址(index)。 格式如下:[base + index]

32位模式下,基址和变址的部分均可使用任意32位通用寄存器。

二维数组:以行主序访问二维数组时,通常使用基址寄存器存放行偏移,变址寄存器存放行偏移。 例:

row_index = 1 ;1行 column_index = 2 ;2列

mov ebx,OFFSET tableB ;表的偏移地址 add ebx,Rowsize * row_index ;行的偏移地址 mov esi,column_index ;列的偏移地址 mov al,[ebx + esi]

相对基址变址操作数:相对基址变址操作数吧把偏移、基址寄存器、变址寄存器以及可选的比例因子组合起来产生一个有效地址,下面是该操作数最常见的两种格式:

[base + index + displacement] Displacement[base + index]

偏移可以是常量的名字或是常量表达式。 例:

mov ebx,Rowsize ;行索引

mov esi,2 ; 列索引 mov eax,tableD[ebx + esi *TYPE tableD]

第十章 结构和宏

结构:

name STRUCT

field-declarations name ENDS 例:

COORD STRUCT

X WORD ? ; offset 00 Y WORD ? ; offset 02 COORD ENDS

43

联合:

unionname UNION union-fields unionname ENDS 例:

Integer UNION D DWORD 0 W WORD 0 B BYTE 0 Integer ENDS 宏:

macroname MACRO [parameter-1, parameter-2,...] statement-list ENDM 例:

mNewLine MACRO ; define the macro call Crlf ENDM .data

.code

mNewLine ; invoke the macro

44

搜索更多关于: 汇编语言复习资料天津大学王建荣 的文档
汇编语言复习资料天津大学王建荣.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5dx3w4yluw2xzhu2l5b6_11.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top