汇编学习(五)——表处理程序
(一)串操作指令及重复前缀
一、串操作指令:
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
汇编学习(五)——表处理程序的更多相关文章
- arm汇编学习(五)
新增个手写GNU语法arm的方法,以后可以狂逆狂写 hello.S文件 .data msg: .ascii "Hello, ARM!\n" len = . - msg .text ...
- MIPS汇编学习
MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- 汇编学习笔记(11)int指令和端口
格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...
- Win32汇编学习(4):绘制文本
这次,我们将学习如何在窗口的客户区"绘制"字符串.我们还将学习关于"设备环境"的概念. 理论: "绘制"字符串 Windows 中的文本是一 ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- android ARM 汇编学习 —— hello world
android ARM 汇编学习—— 在 android 设备上编译c/cpp代码并用objdump/readelf等工具分析 adb putty 连上手机,用busybox vi 写一个 hello ...
- ZigBee学习五 无线温度检测
ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
随机推荐
- android通过Canvas和Paint截取无锯齿圆形图片
一个通过Canvas和Paint截取无锯齿圆形图片. /** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ public st ...
- docker进入容器的方式
通过docker创建守护运行(在使用-d参数时)的容器时,容器启动后会进入后台.用户无法看到容器中的信息.某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令.dock ...
- spring3 的restful API RequestMapping介绍
原文链接:http://www.javaarch.net/jiagoushi/694.htm spring3 的restful API RequestMapping介绍 在spring mvc中 @R ...
- jira与mysql的配合搭建调整
jira与mysql数据的整合 第一步:电脑上安装mysql数据库,不做多得解释,自己搞定 第二步: 在mysql数据库中建一个名为 jiradb的数据库,账号 root 密码 root 编码格式 u ...
- WPF三大模板简介
WPF支持以下类型的模板: (1) 控件模板.控件模板可以将自定义模板应用到某一特定类型的所有控件,或是控件的某一实例.决定控件外观的是ControlTemplate,它决定了控件“长成什么样子”,因 ...
- VIM常用操作总结
VIM常用的模式网上说法不太一样,但是大同小异,这里大致分一下,便于后面总结 1.一般模式 默认打开文件后的模式,这个时候只能移动光标,不能编辑 2.输入模式 一般模式按下i,就可以进入输入模式,输入 ...
- 【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。
第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎 ...
- java Unicode、ISO-8859-1、GBK、UTF-8编码转换深入浅出
参考文献:搞懂ASCII, ISO8859-1, ANSI和Unicode Unicode百度文献 ISO-8859-1百度文献 注: 1.utf-8虽然是国际编码,对不同范围的字符使用不同长度的编码 ...
- Swift - 2.3的代码到3.0的转变
分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcode帮我们把Swift ...
- Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式
FPGA下载的三种方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式: AS由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EP ...