array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 汇编学习笔记36 - 爱码网

本节开始学习第六单。

第六单内容主要有两点:

1.字符串的各种操作

2.掌握BCD码的调整

一、字符串操作指令

8086,8088中共有5种基本串操作指令。在串操作指令中,由变址寄存器SI指令源操作数,由变址寄存器DI指向目的操作数。规定源操作数存放在当前数据段,目的操作数存放在当前附加段内。字符串操作方向由标志寄存器中的方向标志位来确定。

当DF=0,按递增方向处理。

当DF=1,按递减方向处理。

 

五种串操作指令分别为: MOVS , CMPS, LODS, STOS, SCAS

1. 字符串装入指令 (Load String) LODS

LODSB     ; 装入字节

LODSW     ; 装入字

本指令的操作为:

字节操作:  (AL) <—((SI)), (SI) <—(SI)+/-1

字操作:    (AX) <—((SI)), (SI) <—(SI)+/-2

相当于 MOV AL, [SI]

INC SI 或 DEC SI

字符串装入指令只是把字符串中的一个字符装入累加器中,该指令不影响标志位

例:

MESS DB 'HELLO','0'

TAB DW 123, 342

……

MOV SI, OFFSET MESS

LODS   ;LODSB

MOV SI, OFFSET TAB

LODS   ;LODSW

例2:

; 子程序名: STRLWR

; 功能:    把字符串中的大写字母转化为小写字母,字符串以0结尾

; 入口参数: DS: SI 字符串首地址的段值:偏移

; 出口参数: 无

STRLWR PROC

PUSH SI

CLD

JMP SHORT STRLWR2

STRLWR1: SUB AL, ‘A’

CMP AL, 'Z' – 'A'

JA STRLWR2

ADD AL, ‘a’

MOV [SI+1], AL

STRLWR2: LODSB

AND AL, AL

JNZ STRLWR1

POP SI

RET STRLWR ENDP

2.字符串存储指令: (Save String) STOS

STOSB    ; 存储字节

STOSW    ; 存储字

该指令仅是把累加器的值存到字符串,即替换字符串中的一个字符

执行的操作:

字节: ((DI)) <—(AL), (DI)<—(DI)+/-1

字 :  ((DI)) <—(AX), (DI)<—(DI)+/-2

等效于 MOV ES: [DI], AL

INC DI 或 DEC DI

本指令不影响标志位

例3:

如下程序片断把当前数据段中的偏移1000H开始的100字节的数据传送到从偏移2000H开始的单元中

CLD

PUSH DS

POP ES

MOV SI, 1000H

MOV DI, 2000H

MOV CX, 100D

NEXT: LODSB

STOSB

LOOP NEXT

3.字符串传送指令(Move String)MOVS

MOVSB   ;字节传送

MOVSW   ;字传送

执行操作:

字节传送: ((DI))<—((SI)),  (DI)<—(DI)+/-1, (SI)<—(SI)+/-1

字传送:   ((DI))<—((SI)),  (DI)<—(DI)+/-2, (SI)<—(SI)+/-2

字符串传送指令不影响标志位

例4:

CLD

MOV CX, 100

NEXT: MOVSB

LOOPNEXT

CLD

MOV CX, 100

NEXT: MOVSW

LOOP NEXT

例5:

例3的题目使用传送指令

CLD

PUSH DS

POP ES

MOV SI, 1000H

MOV DI, 2000H

MOV CX, 100

NEXT: MOVSB

LOOP NEXT

4. 字符串扫描指令(Scan String) SCAS

SCASB    ; 字节扫描

SCASW    ; 字扫描

执行操作为:

字节操作: (AL)-((DI), (DI)<—(DI)+/-1

字操作:   (AL)-((DI)), (DI)<—(DI)+/-2

相减的结果反映到标志位,指令不影响两个操作数

AF, CF, OF, PF, SF, ZF

下面例子判断AL中的字符是否为16进制数

STRING DB '0123456789ABCDEFabcdef'

STRINGL EQU $-STRING

CLD

MOV DX, SEG STRING

MOV ES, DX

MOV CX, STRINGL

MOV DI, OFFSET STRING

NEXT: SCASB

LOOPNZ NEXT

JNZ NOT_FOUND

FOUND:……

NOT_FOUND: ……

5.字符串比较指令:(Compare String) CMPS

CMPSB    ;字节比较指令

CMPSW    ;字比较指令

操作:

字节操作: ((SI))-((DI)), (SI)<—(SI)+/-1, (DI)<—(DI)+/-1

字操作  : ((SI))-((DI)), (SI)<—(SI)+/-2, (DI)<—(DI)+/-2

结果反映在各标志位,指令不影响两个操作数。

相关文章: