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

一、串操作指令:

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

汇编学习(五)——表处理程序的更多相关文章

  1. arm汇编学习(五)

    新增个手写GNU语法arm的方法,以后可以狂逆狂写 hello.S文件 .data msg: .ascii "Hello, ARM!\n" len = . - msg .text ...

  2. MIPS汇编学习

    MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...

  3. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. 汇编学习笔记(11)int指令和端口

    格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...

  5. Win32汇编学习(4):绘制文本

    这次,我们将学习如何在窗口的客户区"绘制"字符串.我们还将学习关于"设备环境"的概念. 理论: "绘制"字符串 Windows 中的文本是一 ...

  6. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  7. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  8. android ARM 汇编学习 —— hello world

    android ARM 汇编学习—— 在 android 设备上编译c/cpp代码并用objdump/readelf等工具分析 adb putty 连上手机,用busybox vi 写一个 hello ...

  9. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...

  10. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

随机推荐

  1. 基于 REST 的 Web 服务:基础

    代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services D ...

  2. Unity3d 制作物品平滑运动

    直接贴代码了 using UnityEngine; using System; using System.Collections; using System; using DataTable; pub ...

  3. ios Coredata 的 rollback undo 等事物处理函数

    首先说明 ios 中 NSManagedObjectContext 默认的 undoManager是nil的,就是说 undo 和 redo 都是没用的. 但是 rollback函数和reset函数是 ...

  4. ios 使用xib时,在UIScrollView中添建内容view时,使用约束的注意

    请参与一下链接:http://segmentfault.com/a/1190000002462033 简单的说下,就是必须写满一个view的6个约束,就是上下左右高宽,让scrollview 能够根据 ...

  5. 15. javacript高级程序设计-Canvas绘图

    1. Canvas绘图 HTML5的<canvas>元素提供了一组JavaScript API,让我们可以动态的创建图形和图像.图形是在一个特定的上下文中创建的,而上下文对象目前有两种. ...

  6. mybatis延迟加载

    配置完成后可能会报错Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath 是由于 ...

  7. bootstrap添加时间控件

    $('#startTime').daterangepicker({ singleDatePicker: true,format:"YYYY-MM-DD HH:mm:ss",time ...

  8. OSG osgDB FileUtils FileNameUtil操作文件名相关函数

    /** Gets the parent path from full name (Ex: /a/b/c.Ext => /a/b). */extern OSGDB_EXPORT std::stri ...

  9. 使用autolayout,设置子控件的宽度 与父视图的宽度成比例大小(这样类似可以设置多个按钮平均横屏排列)

    橙色是父视图,假设约束如上图. 绿色是子视图.重点宽度比例设置: 1. control-drag 选择 equal width2. 选中上面那个约束 注意 first item 和 second it ...

  10. October 8th 2016 Week 41st Saturday

    When ambition ends, happiness begins. 野心消亡之日,正是快乐破茧之时. If I don't have the wish to be a useful man, ...