中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
汇编(十四)——串操作类指令练习
作者:未知 时间:2005-09-13 23:36 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:汇编(十四)——串操作类指令练习
个串操作类指令的例子

例14-1:用REP MOVSB指令把字节串S1从一个数据段传送至辅助数据段的串S2中去。
NAME      LI14-1.ASM
DATA1    SEGMENT
S1          DB 'ABCDEFGHIJKLMNOPQISTUVWXYZ'
CPUNT    EQU $-OFFSET S1
DATA1    ENDS
DATA2    SEGMENT
S2          DB 27 DUP (?)
DATA2    ENDS
CODE     SEGMENT
              ASSUME CS:CODE,DS:DATA1,ES:DATA2
START:   MOV AX,DATA1
              MOV DS,AX
              MOV AX,DATA2
              MOV ES,AX
              MOV SI,OFFSET S1
              MOV DI,OFFSET S2
              MOV CX,COUNT
              CLD
              REP MOVSB
              MOV BYTE PTR ES:[DI],'$'
              MOV DX,OFFSET S2
              MOV AX,ES
              MOV DS,AX
              MOV AH,9H
              INT 21H
              MOV AH,4CH
              INT 21H
CODE      ENDS
               END START

例14-2:利用REP MOVSW指令把字串A传送到同一数据段的串B中去。
NAME     LI14-2.ASM
DATA     SEGMENT
A           DW 1,3,5,7,9,11,13,15,17,19
             DW 21,23,25,27,29,31,33,35,37
             DW 41,43,45,47,49
COUNT   DW $-OFFSET A
B           DW 100 DUP(?)
DATA     ENDS
CODE    SEGMENT
             ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
             MOV DS,AX
             MOV ES,AX
             MOV CX,COUNT
             LEA SI,A
             LEA DI,B
             REP MOVSW
             MOV AH,4CH
             INT 21H
CODE     ENDS
             END START

例14-3:若在一片内存区域中有一数据块,起始地址为BLOCK。数据块中的数有正数有负数,要求把其中的正负数分开,分别放在同一段的两个缓冲区存放正数的缓冲区起始地址为PLUS_BUF,存放负数的缓冲区起始地址为MINUS_BUF。
可设置SI为源数据块指针,设DI和BX分别为放正负数的目的区指针,使用LODS指令把源数据取至AL,然后测试其符号位,若为正数,则用STOS指令送到正数的缓冲区,若为负数,交换DI和BX,然后用STOS指令送至负数的缓冲区。
NAME     LI14-3.ASM
DATA     SEGMENT
BLOCK   DB 03H,46H,0F4H,0AFH,0AH,90H
             DB 87H,50H,99H,0FFH,40H,77H,88H,0B3H,9EH
COUNT   DW $-OFFSET BLOCK
PLUS_BUF DB 20 DUP(?)
MINUS_BUF DB 20 DUP(?)
DATA    ENDS
CODE     SEGMENT
              ASSUME  CS:CODE,DS:DATA,ES:DATA
START:   MOV AX,DATA
              MOV DS,AX
              MOV ES,AX
              MOV SI,OFFSET BLOCK
              MOV DI,OFFSET PLUS_BUF
              MOV BX,OFFSET MINUS_BUF
              MOV CX,COUNT
              CLD
GOON:    LODSB
              TEST AL,80H
              JNZ  MINUS
              STOSB
              JMP AGAIN
MINUS:   XCHG BX,DI
             STOSB
              XCHG BX,DI
AGAIN:   LOOP GOON
              MOV AH,4CH
              INT 21H
CODE     ENDS
              END START

例14-4:利用REPE CMPS指令比较两个字符串是否相等。若相等,显示字符E,否则显示N。
NAME      LI14-4.ASM
DATA      SEGMENT
STRING1 DB 'THIS IS A STRING1'
STRING2 DB 'THIS IS A STRING2'
COUNT    EQU $-OFFSET STRING2
DATA       ENDS
CODE      SEGMENT
               ASSUME CS:CODE,DS:DATA,ES:DATA
START:    MOV AX,DATA
               MOV DS,AX
               MOV ES,AX
               LEA SI,STRING1
               LEA DI,STRING2
               MOV CX,COUNT
               CLD
               REPE CMPSB
               JNZ NO
               MOV DL,'E'
               MOV AH,02H
               INT 21H
               JMP PEND
NO:          MOV DL,'N'
                MOV AH,02H
                INT 21H
PEND:       MOV AH,4CH
                INT 21H
CODE        ENDS
                END START

例14-5:在一个字符串中搜索特定字符‘S’,如果找到,则显示出这个字符在串中的位置(距离串的起始地址的相对位移量字节数),否则显示字符N。

NAME      LI14-5.ASM
DATA       SEGMENT
STRING    DB 'THIS IS A STRING'
COUNT     EQU $-STRING
CHAR       EQU 'S'
DATA       ENDS
CODE       SEGMENT
               ASSUME CS:CODE,DS:DATA,ES:DATA
GO:         MOV AX,DATA
               MOV DS,AX
               MOV ES,AX
               MOV DI,OFFSET STRING
               MOV CX,COUNT
               CLD
               MOV AL,CHAR
               REPNE SCASB
               JZ FOUNT
               MOV DL,'N'
               MOV AH,02H
               JMP DISPLAY
FOUND:    DEC DI
               MOV DX,DI
               OR DL,30h
DISPLAY: MOV AH,02H
               INT 21H
               MOV AH,4CH
               INT 21H
CODE      ENDS
               END  GO

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有