博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(3)串传送指令
阅读量:5305 次
发布时间:2019-06-14

本文共 1660 字,大约阅读时间需要 5 分钟。

串处理指令—串传送指令举例 例: 在数据段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

转载于:https://www.cnblogs.com/gxldan/archive/2011/06/28/4066670.html

你可能感兴趣的文章
实用Android开发工具和资源精选
查看>>
TileMap
查看>>
JS属性大全
查看>>
java复制文件
查看>>
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>