2019/9/29 5)串送存指令sTos(STOre String) LEA S,BUFFER:(S区首址 MOV CX,10 1(CX字符事长度 指令格式: CLD ,裤状本标这位DF MOV AH,02H 1(AH功能号 IREPSTOS [ES:ldst_string GET:LODSB ,敢一个BCD哥到L REPI STOSB OR AL,30H ,BCD网转换为:ASC网 MOV DL,AL :(DL字特 REPI STOSW INT 21H ,显示 STOS将AL酸AX的值送存到内存缓冲区的某个位置上。 DEC c ,(CX-CX-1 指令的基本操作为: Z GET :未亮成10个字特则重复 HLT 22 6四:Dw山字节有 例一个数籍块由大写或小写的英文字母、数字和各种其 或ES):DD)AX)(宇操作) 他符号组成,其第束符是回车符CR(ASCI码为0D,数振 块的首地址为BLOCK1。将数据块传送到以BLOCK2为首地 ②DIDD土1字节操作 址的内存区,并将其中所用的英文小写字母一一)转换成相 或DD-DD士2(字操作) 应的大写字每A一公,其余不变。 其中,当标志DF-0时用·+”,DF-1时用“、 分折:只需将小写字母的ASCⅡ码减20H,即可得到相应 STOS对状态标志位投有影响。指◆若加上复前银REP,则操饰 大写字母的ASCIR码。程序如下 直量复进折下去,直到(C-0。 23 24 6
2019/9/29 6 编程如下: LEA SI,BUFFER ;(SI)←缓冲区首址 MOV CX,10 ;(CX)←字符串长度 CLD ;清状态标志位DF MOV AH,02H ;(AH)←功能号 GET: LODSB ;取一个BCD码到AL OR AL,30H ;BCD码转换为ASCII码 MOV DL,AL ;(DL)←字符 INT 21H ;显示 DEC CX ;(CX)←(CX) −1 JNZ GET ;未完成10个字符则重复 HLT 指令格式: [REP] STOS [ES:]dst_string [REP] STOSB [REP] STOSW STOS将AL或AX的值送存到内存缓冲区的某个位置上。 指令的基本操作为: 5) 串送存指令STOS (STOre String) ① ((ES):(DI))←(AL) (字节操作) 或((ES):(DI))←(AX) (字操作) ② (DI)←(DI)±1 (字节操作) 或(DI)←(DI)±2 (字操作) 其中,当标志DF=0时用“+”,DF=1时用“−”。 STOS对状态标志位没有影响。指令若加上重复前缀REP,则操作将一 直重复进行下去,直到(CX)=0。 例 一个数据块由大写或小写的英文字母、数字和各种其 他符号组成,其结束符是回车符CR(ASCII码为0DH),数据 块的首地址为BLOCK1。将数据块传送到以BLOCK2为首地 址的内存区,并将其中所用的英文小写字母(a~z)转换成相 应的大写字母(A~Z),其余不变。 分析:只需将小写字母的ASCII码减20H,即可得到相应 大写字母的ASCII码。程序如下: 21 22 23 24
2019/9/29 LEA S,BLOCK1(S)地址指 串操作指令的共同点: LEA DL,BLOCK2:(Dl-目标地址指时 CLD 清方向标志DF 的定以DS:SI学址源率,以ES:DI寻址目标率,其中源 NEXT:LODSB ,取一个字符到人L 串中的段寄存悬DS可通过加段超越前驱而放变,但目标串 CMP AL,ODH 是吾回车特 不可以。 IZ DONE ,是,则装DONE CMP AL,61H 用方向标志DF规定串处强方向, :否则,是否小于a JC OK 1是,特OK SI和DI根据DF自动增/减1或2。 CMP AL,7BH :是百大于红 要处理的字符串长度放在CX寄存都中。 JNC OK :是,特OK SUB AL,20H 1百则,AL被2阳 为了加快串运算指令的执行速度,通常在串操作指令前 加置复前藏,以对一个以上的串数据进行操作 OK: STOSB :迷存 JMP NEXT I转移到NEXT 置复的数据串处理过程可被中断 DONE HLT 五、控制转移类指令 段内转移:转移的目标地址在当前代码段内, 则目标离性为NEAR,这时指令只修政IP。 一、转移指令 ◇控制转移类指◆用于实现分支、 中码段 段间转移:转移的目标地址在其他代码段内, 二、循环控制指令 循环、过程等程序结构 则目标属性为FAR,这时指令同时修政IP与 三、过程调用指令 直接转移:转移的目标地址直接出现在指令 四、中断指令 中。 代码段 间接转移:转移的目标地址间接存贮在某一 控制转移类指令通过改变P(和CS)值, 寄存器或内存量中。 实现程序执行顺序的改变 28 1
2019/9/29 7 LEA SI,BLOCK1 ;(SI)←源地址指针 LEA DI,BLOCK2 ;(DI)←目标地址指针 CLD ;清方向标志DF NEXT:LODSB ;取一个字符到AL CMP AL,0DH ;是否回车符 JZ DONE ;是,则转DONE CMP AL,61H ;否则,是否小于'a' JC OK ;是,则转OK CMP AL,7BH ;是否大于'z' JNC OK ;是,则转OK SUB AL,20H ;否则,AL减20H OK: STOSB ;送存 JMP NEXT ;转移到NEXT DONE:HLT ;停止 约定以DS:SI寻址源串,以ES:DI寻址目标串,其中源 串中的段寄存器DS可通过加段超越前缀而改变,但目标串 不可以。 用方向标志DF规定串处理方向。 SI和DI根据DF自动增/减1或2。 要处理的字符串长度放在CX寄存器中。 为了加快串运算指令的执行速度,通常在串操作指令前 加重复前缀,以对一个以上的串数据进行操作 重复的数据串处理过程可被中断 串操作指令的共同点: 五、控制转移类指令 一、转移指令 二、循环控制指令 三、过程调用指令 四、中断指令 控制转移类指令用于实现分支、 循环、过程等程序结构. 控制转移类指令通过改变IP(和CS)值, 实现程序执行顺序的改变 段内转移:转移的目标地址在当前代码段内, 则目标属性为NEAR,这时指令只修改IP。 段间转移:转移的目标地址在其他代码段内, 则目标属性为FAR,这时指令同时修改IP与 CS。 直接转移:转移的目标地址直接出现在指令 中。间接转移:转移的目标地址间接存贮在某一 寄存器或内存量中。 • 代 码 段• 代 码 段 25 26 27 28