(2)串指令的传送

存入串指令STOS可以与REP联用,数据串的长度送到CX寄存器中,以控制重复执行的次数。它可使规定长度的字节单元或字单元设置相同的数值。 LODS (Load form string)从串取指令 STOS  (Store into string) 存入串指令        这两个源操作数隐含在AL(字节操作)或AX(字操作)中 【例】在ES=1000H的附加段中,将从BUF为首地址的100个字节单元内容清零,可编写主要程序段如下: MOV  AX,1000H MOV  ES,AX        ;条件1 LEA   DI,BUF       ;条件2 MOV  AL,0           ;条件3 MOV  CX,100       ;条件4 CLD                        ;条件5,必须设以上五个条件 REP   STOSB         ;可重复100次操作 【例】  将数据段中首地址为BUF1的200个字节数据传送到附加段中首地址为BUF2开始的内存区中,设DS=1000H,ES=2000H,试用以下三种要求来编制 程序: ?    ?(1)  用一般的MOV指令; ?(2)  用串操作指令MOVSB; (3)  用LODSB与STOSB指令。 要求一的程序段:使用MOV指令的程序段: MOV  AX,1000H       ; MOV  DS,AX            ;数据段赋值 MOV  AX,2000H       ; MOV  ES,AX            ;附加段赋值 LEA  BX,BUF1         ;取源数据区首址 LEA  SI,BUF2          ;取目标数据区首址 MOV  CX,200          ;传送的字节数 LOP: MOV  AL,[BX]          ;取源数据 MOV  ES:[SI],AL   ;存数 INC  BX                      ; INC  SI                        ;调整地址指针 DEC  CX                     ;调节循环次数 JNZ  LOP                     ;CX≠0继续循环 要求二的程序段:使用MOVSB指令的程序段: MOV  AX,1000H MOV  DS,AX         ;设置DS MOV  AX,2000H MOV  ES,AX          ;设置ES LEA   SI,BUF1       ;设置SI(源串) LEA   DI,BUF2       ;设置DI(目的串) MOV   CX,200       ;重复次数 CLD                          ;增量  DF=0 REP  MOVSB          ;重复200次传送操作 注意:为使指令REP  MOVSB的执行,必须准备好六个条件,方能达到预期结果。 要求三的程序段:使用LODSB和STOSB指令的程序段: MOV  AX,1000H MOV  DX,AX          ;LODSB 指令条件1 MOV  AX,2000H MOV  ES,AX          ;STOSB指令条件1 LEA  SI,BUF1        ;LODSB指令条件2 LEA  DI,BUF2        ;STOSB指令条件2 CLD                          ;两指令共同条件3 MOV  CX,200         ;置循环数 LOP:   LODSB                ;从串数组中取出数据到AX中 STOSB                ;从串数组中取出数据存到AX中 DEC  CX JNZ  LOP 标准的ASCII码共128个字符,分为二类:非打印的和可打印的ASCII码。 非打印ASCII码:这类编码用于控制性代码,共33个。如: BEL(响铃,07H), DEL(删除,7FH), CR  (回车,0DH), LF   (换行,0AH)等。 可打印ASCII码:共有95个。其中有: 数字0~9的编码                 30H~39H 大写字母A~Z的编码             41H~5AH 小写字母a~z 的编码            61H~7AH 空格(Space)的编码           20H 【例】 在数据段中以BLOCK1为首地址的数据块中,存放有大写或小写的英文字母、数字和其它符号组成,其结束符为回车符CR(ASCII码为0DH),把该数据块传送到附加段内以BLOCK2为首地址的内存区,并将其中小写英文字母转换成相应的大写字母ASCII码,其余符号的ASCII码不变。设数据段与附加段的段基值分别为DATA与EXTRA。 英文小写字母ASCII码(a~z):61H~7AH 大写字母ASCII码(A~Z):41H~5AH 即将小写字母的ASCII码减20H,即可得到相应大写字母的ASCII码,程序段如下: MOV  AX,DATA MOV  DS,AX MOV  AX,EXTRA MOV  ES,AX LEA   SI,BLOCK1 LEA   DI,BLOCK2 CLD LOP:  LODSB                    ;取一个字符到AL中 CMP  AL,0DH                   ;是否回车符 JZ    DONE                          ;是,转DONE CMP  AL,‘a’ JB    OK                              ;是小于‘a’,转OK CMP  AL,‘z’ JA   OK                               ;是大于‘z’,转OK SUB  AL,20H                    ;是小写字母,AL减20H OK:    STOSB                   ;送存 JMP  LOP                           ;转到LOP DONE: ┉
posted @ 2011-06-28 19:06  gxldan  阅读(504)  评论(0编辑  收藏  举报