汇编学习(五)——表处理程序
(一)串操作指令及重复前缀
一、串操作指令:
1、串传送指令:
(1)指令格式:
MOVS dst,rsc MOVSB ;ES:[DI]<--DS:[SI],SI<—SI+/-1,DI<—DI+/-1 MOVSW ;ES:[DI]<--DS:[SI];SI<—SI+/-2,DI<—DI+/-2
(2)指令功能:
A、将源串的一个元素传送到目的串的相应位置。
B、后面两种主要是按字节或者按字传送
2、串装入指令
(1)指令格式:
LODS src LODSB ;AL<-DS:[SI],SI+/-1 LODSW ;AX<DS:[SI],SI+/-2
(2)指令功能:
将源串的一个元素传送给累加器
3、串储存指令
(1)指令格式:
STOS dst
STOSB ;ES:[DI]<—AL,DI<—DI+/-1
STOSW ;ES:[DI]<—AL,DI<—DI+/-2
(2)指令功能:
将累加器的值传送到目的串的一个元素位置
4、串比较指令
(1)指令格式:
CMPS src,dst CMPSB ;DS:[SI]-ES:[SI],SI<-SI+/-1,DI<--DI+/-1 CMPSW ;DS:[SI]-ES:[DI],SI<--SI+/-2,DI<--DI+/-2
(2)指令功能
A、将两个串对应位置上的元素进行比较,即进行减操作,结果不回送,但影响6个标志位
B、串比较指令的源操作数是被减数,目的操作数是件数。
5、串搜索指令
(1)指令格式:
SCAS src,dst
SCASB ;AL—ES: [DI],DI<—DI+/-1
SCASW ;AL—ES: [DI],DI<—DI+/-2
(2)指令功能:
用累加器AL或着AX作为被减数,与串的一个元素详见,不送回结果,单影响6个标志位
二、串重复前缀
1、指令格式:
REP ;若CX不等0,则执行串操作,CX<—CX-1
;若CX等于0,则结束串操作
PEPR或PREZ ;若CX不等于0且ZF=1,则执行串操作,CX<-CX-1
;若CX=0或者ZF=0,则结束串操作
REPNE或REPNZ ;若CX不等于0且ZF=0,则执行串操作,CX<—CX-1
;若CX=0或ZF=1,则结束串操作
2、注意点:
(1)使用任何一条串操作指令之前,必须根据对串地址修改的方向对方向标志DF进行修改
CLD 对方向标志DF清0,即串操作为加
STD 对方向标志DF置1,即串操作为减
(2)使用MOVS,LODS,CMOS之前,要对DS和SI初始化,使用MOVS,STOS,CMPS,SCAS前要对ES和DI初始化
(3)若源串和目的串在同一个段中,ES和DS要初始化成相同的数值。
(二)无符号数和带符号数条件跳转指令
一、无符号数条件跳转指令
二、有符号数跳转指令
(三)沉底排序
一、程序流图
二、程序如下:(从小到大排序)
DATA SEGMENT BUF DW 1234H,5678H,9ABCH,0DEF0H ;声明数组,但是在储存中,低字节在低位,高字节在高位 DW 2345H,6789H,0ABCDH,0EF01H COUNT EQU ($-BUF)/2 XF EQU DL DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;初始化 MOV DS,AX MOV BX,COUNT MOV XF,0FFH NEXT: CMP XF,0 ;没有交换就退出 JE EXIT MOV XF,0 ;如果BX为0,就退出 DEC BX JZ EXIT MOV CX,BX MOV SI,OFFSET BUF ;BX一直减 CLD NEXT1: LODSW CMP AX,[SI] ;如果大于就交换 JLE NEXT2 XCHG [SI],AX XCHG [SI-2],AX MOV XF,0FFH NEXT2: LOOP NEXT1 JMP NEXT EXIT: MOV AH,4CH INT 21H CODE ENDS END START
(四)对分搜索
一、程序流图:
二、程序如下:
DATA SEGMENT BUF DB 00,11,15,21,34,57,60,78,90,97 KEY DB 11 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV DI,KEY-BUF ADD DI,SI MOV AL,KEY
CONT1: MOV BX,SI ADD BX,DI SHR BX,1 ;取中值(右移)
CMP AL,[BX]
JZ FOUND
CMP BX,SI
JZ NOFID
CMP AL,[BX]
JC LESS
MOV SI,BX
JMP CONT1
LESS:
MOV DI,BX
JMP CONT1
NOFID: MOV BX,-1
FOUND:
MOV AH,4CH
INT 21H
CODE ENDS
END START