(3)串传送指令

串处理指令—串传送指令举例 例: 在数据段datarea中有一个字符串,其长度为17,要求把它们转送到附加段extra中的一个缓冲区。 程序如下: ;先完成数据段和附加段定义,其中源串放在数据段,目的串放在附加段。 datarea   segment                     ;定义数据段 mess1      db   ‘personal computer $’ datarea   ends extra       segment                      ;定义附加段 mess2       db    17  dup(?) ;在存储器中分配17个字节单元的空间 extra       ends code  segment assume  cs:code, ds:datarea, es:extra ? mov    ax,datarea mov    ds,ax        ;数据段地址送ds mov    ax,extra mov    es,ax        ;附加段地址送es ? lea     si,mess1   ;mess1首地址送si lea     di,mess2   ;mess2首地址送di mov    cx,17        ;字符串大小 cld                          ;地址自动增量方式 rep     movsb         ;重复实现串复制 ? code  ends 可以把数据段和附加段重叠使用。程序可改写为: datarea   segment mess1       db   ‘personal computer $’ mess2       db    17  dup(?) datarea   ends code  segment assume  cs:code, ds:datarea, es:datarea mov    ax,datarea mov    ds,ax        ;数据段地址送ds mov    es,ax        ;附加段地址送es lea     si,mess1    ;mess1首地址送si lea     di,mess2    ;mess2首地址送di mov    cx,17        ;字符串大小 cld                  ;地址自动增量方式 rep     movsb        ;重复实现串复制 code  ends 【例】设DS=3000H,ES=4000H,源串首址=1500H,目的串首址=2000H,比较两个都具有100个字节的字符串,找出它们第一次不相匹配的位置,找到不相等处的偏移地址仍放在SI和DI中。 【说明】: ① 在REPE  CMPSB指令前面的指令序列中,必须为它设置好6个条件; ② REPE CMPSB指令执行前、后两个字符串的存储情况,如教材图5-10所示,了解它对理解程序的执行情况是大有益处的。 主要程序段如下: MOV  AX,3000H MOV  DS,AX         ;条件1 MOV  AX,4000H MOV  ES,AX         ;条件2 MOV  SI,1500H       ;条件3 MOV  DI,2000H       ;条件4 MOV  CX,100         ;条件5 CLD                   ;条件6 REPE  CMPSB JZ     DONE           ;全匹配转DONE DEC   SI                 ;指向不匹配单元 DEC   DI 【例】 在附加段内首地址为STRING的100个字符的字符串中,寻找第一个 “&”号,找到后将其地址仍保留在DI中(偏移地址),并在屏幕上显示字符 ‘Y’;若在字符串中找不到 “&”号,则在屏幕上显示字符‘N’,设ES=4000H,根据要求编写主要程序段如下: MOV  AX,4000H MOV  ES,AX             ;条件1,ES赋值, MOV  AL,‘&’          ;条件2,关键字送入AL MOV  CX,100            ;条件3,字符长度 LEA   DI,STRING        ;条件4,取字符串首地址 CLD                     ;条件5,增址方向 REPNE  SCASB            ;不等扫描 JZ    L1                ;找到‘&’号转L1 MOV  DL,‘N’          ;字符串无‘&’号,准备在屏幕上显示N JMP   DISPY             ;转显示功能调用 L1:  DEC  DI                 ;保存找到‘&’号的偏移地址 MOV  DL,‘Y’          ;找到‘&’号要显示Y DISPY: MOV  AH,2 INT 21H
posted @ 2011-06-28 23:41  gxldan  阅读(799)  评论(0编辑  收藏  举报