汇编语言系列课件第一章(考试重点在里面)第12讲_2 7.4

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1000:0000H 01H 02H 03H 04H . . . 2000:0100H 01H 02H . . .
CLD AG: CMPSB JNE EXIT1 LOOP AG . . EXIT1: .
22
条件重复前缀REPZ/REPE和REPNZ/REPNE
使用方法及格式:这两条条件重复前缀的使用方法和格 式与REP相同。 操作:使用这两条前缀的串操作指令,在循环时不仅检 查CX是否为0,还检查ZF标志位是否是1,以CX和ZF的 情况共同决定是否重复执行后面的基本串操作指令。 REPZ/REPE为CX≠0且ZF=1时重复执行基本操作, CX=0或ZF=0时停止重复。 REPNZ/REPNE为CX≠0且ZF=0时重复执行基本操作, CX=0或ZF=1时停止重复。 受影响状态标志位:由基本串操作指令的执行情况决定。
说明:1)此指令隐含指定AX或AL的值作为一个操作数,将 其与 ES:DI 指出的数据串元素相比较,用以实现在一个串 中对给定值的搜索或查找。当给定串为字节串时与AL中 的内容相比较;当给定串为字串时,AX中的内容相比较。 2)此指令只改变标志,不回送结果。
12
3. STOS/STOSB/STOSW 存数据串 指令汇编格式:STOS/STOSB/STOSW [dstr] 操作:将AL(目标串为字节串时)或AX(目标串为 字串时)的内容存储到ES段DI指出的地址单元中, 然后修改DI的地址指针。具体描述如下: (ES:DI)←AL(或AX) DI←DI± 1 2 受影响状态标志位:没有。 说明:借助STOS 指令使用重复前缀可以方便地用一 个常数对一块存储区初始化。
23
举例:比较两个数据块是否相同。
MOV MOV MOV MOV MOV MOV MOV CLD AG: CMPSB JNE LOOP . . EXIT1: . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H
1000:0000H 01H 02H 03H 04H . . . 2000:0100H 01H 02H . . . CMPSB
1000:0000H 01H 02H 03H 04H
2000:0100H
AG:
CLD MOVSB
5
举例
MOV MOV MOV MOV MOV MOV MOV MOV MOV ADD ADD LOOP . . . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0080H AX,[SI] ES:[DI],AX SI,2 DI,2 AG
01H 02H 03H 04H 05H . . .
1000:00FFH 1000:0100H
10
1000:0000H
举例: 将1000:0000H开始的100H个数据顺 序下移一个位置. MOV AX,1000H MOV DS,AX MOV ES,AX MOV SI,0000H MOV DI,0001H MOV SI,00FFH MOV CX,0100H MOV DI,0100H CLD MOV CX,0100H REP MOVSB STD REP MOVSB
MOV MOV MOV MOV MOV MOV MOV MOV CMP JB CMP JA SUB MOV INC INC LOOP . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] AL,’a’ OK AL,’z’ OK AL,20H ES:[DI],AL SI DI AG
1000:0000H ‘H’ ‘e’ ‘l’ ‘l’ ‘o’
AG:
2000:0100H
OK:
将1000:0000H开始的100H个字节的字符串移动到 2000H:0100H开始的单元,要求在移动的过程中将所有小写 字符改变为大写字符。
MOV MOV MOV MOV MOV MOV MOV MOV CMP JB CMP JA SUB MOV INC INC LOOP . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] AL,’a’ OK AL,’z’ OK AL,20H ES:[DI],AL SI DI AG
2
1. MOVS/MOVSB/MOVSW 数据串传送 指令汇编格式:MOVS/MOVSB/MOVSW [dstr,sstr] 操作:将DS段SI指出的字节(或字)数据传送到ES段 DI指出的单元,然后根据标志位DF的情况和操作数的 类型(字节或字)修改SI,DI的地址指针。具体描述如下: (ES:DI)←(DS:SI) 1 1 SI←SI± 2 DI←DI± 2 受影响的标志位:没有。
1000:0000H 01H 02H 03H 04H
2000:0100H
0080H
W
REP MOVSB
9
1000:0000H
举例: 将1000:0000H开始的100H个数据顺 序下移一个位置. MOV AX,1000H MOV DS,AX MOV ES,AX MOV SI,0000H MOV DI,0001H MOV CX,0100H CLD REP MOVSB
13
例:用0720H填满B800:0000开始的2000个字. MOV AX,0B800H MOV ES,AX MOV DI,0000H MOV CX,07D0H ;2000 MOV AX,0720H CLD AG: STOSW LOOP AG . .
14
例:用0720H填满B800:0000开始的2000个字. MOV AX,0B800H MOV ES,AX MOV DI,0000H MOV CX,07D0H ;2000 MOV AX,0720H CLD AG: STOSW LOOP AG . .
3
举例
MOV MOV MOV MOV MOV MOV MOV MOV MOV INC INC LOOP . . . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] ES:[DI],AL SI DI AG
1000:0000H 01H 02H 03H 04H
15
例:用0720H填满B800:0000开始的2000个字. MOV AX,0B800H MOV ES,AX MOV DI,0000H MOV CX,07D0H ;2000 MOV AX,0720H CLD AG: STOSW LOOP AG REP STOSW . .
16
将1000:0000H开始的100H个字节的字符串移动到 2000H:0100H开始的单元,要求在移动的过程中将所有小写 字符改变为大写字符。
AG:
1000:0000H 01H 02H 03H 04H
AG:
2000:0100H
CLD MOVSW
6
说明: 1)MOVSB,MOVSW明确指出串的类型是字节串还是 字串,因此不需要操作数。 2)使用MOVS指令时,必须指定操作数以便确定处理 的是字串还是字节串。 3)指令中的递增或者递减量在字节串时为1,在字串 时为2。DF为0时为增量,为1时为减量。 4)用此指令可完成存储器→存储器的数据传送。 5)此Baidu Nhomakorabea令用重复前缀可以实现数据块的传送。
1000:0000H ‘H’ ‘e’ ‘l’ ‘l’ ‘o’
AG:
AG:
OK:
OK:
CLD LODSB CMP JB CMP JA SUB STODB LOOP .
2000:0100H
AL,’a’ OK AL,’z’ OK AL,20H AG
4. CMPS/CMPSB/CMPSW 串比较 指令汇编格式:CMPS/CMPSB/CMPSW [dstr,sstr] 操作:将DS段SI指出的数据与ES段DI指出的数据相 减比较,产生标志位的变化,然后修改SI,DI的地址 指针。具体描述如下: (DS:SI)-(ES:DI) 1 1 SI←SI± 2 , DI←DI± 2 受影响的状态标志位:OF,SF,ZF,AF,PF,CF 说明:此指令只改变标志,并不回送结果, 因而不 改变数的原始值。
7.4 数据串操作指令
数据串:存储器中仅由字节或字组成的一组数据。 字节串:由字节组成的数据串。 字串:由字组成的数据串。 数据串元素:组成数据串的字节或字。 一个数据串最多可由64KB组成。
1
1. MOVS/MOVSB/MOVSW 2. LODS/LODSB/LODSW 数据串基本 3. STOS/STOSB/STOSW 操作指令 4. CMPS/CMPSB/CMPSW 5. SCAS/SCASB/SCASW 6. 重复前缀 REP 7. 条件重复前缀REPZ/REPE 重复前缀 8. 条件重复前缀REPNZ/REPNE
01H 02H 03H 04H 05H . . .
1000:00FFH 1000:0100H
11
2. LODS/LODSB/LODSW 取数据串 指令汇编格式:LODS/LODSB/LODSW [sstr] 操作:将DS段SI指出的字节(或字)数据加载到累加 器AL(或AX)中,然后修改SI的地址指针。具体描述 如下: AL(或AX)←(DS:SI) 1 SI←SI±2 受影响的状态标志位: 没有。 说明:此条指令一般不加重复前缀,因为加入重复前缀 之后累加器中新加载的内容不断取代原来的结果,将只 留下最后一个加载的元素。
7
REP 重复前缀 使用方法及格式:REP 基本串操作指令 操作:基本串操作指令使用REP前缀时,根据CX 值 的情况重复执行后面的基本串操作指令,每执行一次 CX减1,直到CX=0为止, 意思是“当CX≠0时重复”。 受影响的状态标志位:由串操作基本指令的执行情况 决定。
8
AG:
MOV AX,1000H MOV DS,AX MOV SI,0000H MOV AX,2000H MOV ES,AX MOV DI,0100H MOV CX,0100H CLD MOVSB LOOP AG . . .
EXIT1 AG
REPE JNE . EXIT1: .
EXIT1
24
5. SCAS/SCASB/SCASW 串搜索
指令汇编格式:SCAS/SCASB/SCASW [dstr] 操作: 将累加器AL(或AX)的值与ES段DI指出的元 素相减比较,然后修改DI 的地址指针。 AL(或AX)-(ES:DI) DI←DI± 1 2 受影响的状态标志位:OF,SF,ZF,AF,PF,CF
2000:0100H
AG:
4
举例
MOV MOV MOV MOV MOV MOV MOV MOV MOV INC INC LOOP . . . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] ES:[DI],AL SI DI AG AG:
1000:0000H 01H 02H 03H 04H . . . 2000:0100H 01H 02H . . .
21
举例:比较两个数据块是否相同。
MOV MOV MOV MOV MOV MOV MOV AG: MOV CMP JNE INC INC LOOP . . EXIT1: . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] AL,ES:[DI] EXIT1 SI DI AG
19
举例:比较两个数据块是否相同。
1000:0000H 01H 02H 03H 04H . . . 2000:0100H 01H 02H . . .
20
举例:比较两个数据块是否相同。
MOV MOV MOV MOV MOV MOV MOV AG: MOV CMP JNE INC INC LOOP . . EXIT1: . AX,1000H DS,AX SI,0000H AX,2000H ES,AX DI,0100H CX,0100H AL,[SI] AL,ES:[DI] EXIT1 SI DI AG
相关文档
最新文档