汇编学习(五)——表处理程序

(一)串操作指令及重复前缀

一、串操作指令:

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要初始化成相同的数值。

 

(二)无符号数和带符号数条件跳转指令

一、无符号数条件跳转指令

image

 

二、有符号数跳转指令

image

image

 

(三)沉底排序

一、程序流图

image

二、程序如下:(从小到大排序)

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

 

(四)对分搜索

一、程序流图:

image

二、程序如下:

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
原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/5072161.html