汇编语言复习资料天津大学王建荣 联系客服

发布时间 : 星期一 文章汇编语言复习资料天津大学王建荣更新完毕开始阅读8a0ddc7f27284b73f2425022

第九章 字符串与数组

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