鱼C论坛

 找回密码
 立即注册
查看: 2550|回复: 5

[技术交流] 小甲鱼老师DF标志位和串传送指令的问题解析

[复制链接]
发表于 2013-1-28 10:41:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jeset 于 2013-1-28 10:45 编辑

这个是题目:
1.jpg
这个代码非常简单,我也知道很多朋友想到,但是献丑一下,拿出来给不知道的朋友一个思路,给大家一个建议,学东西要学思路,不是去按部就班的学习。那么等于白学
我的解答思路为:有些时候我们在用传送指令拷贝字节或者字单元数据的时候我们,如果数据多了,我们挨着挨着的用眼睛去数,是非常麻烦的,而且稍微不注意就会少数一个。那么我就想了一个思路,是否可以用cmp指令来检查数据呢?但是这个代码的问题所在是:我们必须知道或者要在我们传送的数据段中的数据后面是否有零,或者定义几个零用来构造这个自动copy,大家可以讨论一下如何来解决这个问题呢
这个就是构造的代码:
  1. xh:        cmp byte ptr [bx],0       ;标识xh符号,方便跳回,指令意思为 ,比较ds:bx为字节单元的数据是否为零,因为我们都知道,所有的字符串的ascii码均有对应的10进制数字,那么也就是说明所有的字符均不等于零,包括空格感叹号。所有的字符串均等于一个字节的单位。这样就可以简单的实现了我们的字符串自动检查长度。

  2. ja go                                    ;ja的意思为“高于(不包括等于)比较的数值的时候跳转至go”

  3. jz over                                 ;jz的意思为“如果ZF标志位为零,那么跳转至over,结束这个无条件循环”

  4. go:        inc ax                            ;如果ja指令检查到我们比较的ds:bx大于0的话,那么ax加1,来记录有多少个字节,并且bx加1指向下一个内存单元

  5. inc bx

  6. jmp short xh                       ;跳回至xh,直到jz指令成立就结束循环

  7. over: mov cx,ax
复制代码
那么我结合题目,做出了下面代码,能够实现自动传送数据:
  1. assume cs:code

  2. data segment
  3.                 db 'Welcome to masm!'
  4.                 db 16 dup (0)
  5. data ends

  6. code segment

  7. start:        mov ax,data
  8.                 mov ds,ax
  9.                 mov es,ax
  10.                 mov si,0
  11.                 mov di,16
  12.                 mov bx,0
  13.                 mov ax,0
  14.                 ;检查字节开始
  15.         xh:        cmp byte ptr [bx],0
  16.                 ja go
  17.                 jz over
  18.         go:        inc ax
  19.                 inc bx
  20.                 jmp short xh
  21.         over: mov cx,ax
  22.         
  23.                 cld
  24.                 rep movsb ;rep为循环指令,循环次数为CX,movsb为copy指令,并每次拷贝[ds:si]到[es:di]的内存字节单元数据
  25.         
  26.         mov ax,4c00h
  27.         int 21h
  28.         
  29. code ends
  30. end start
  31.                
复制代码



评分

参与人数 1鱼币 +10 收起 理由
小布丁 + 10 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-28 11:07:16 | 显示全部楼层
LZ学到多少章了??
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-28 11:10:47 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-28 14:02:15 | 显示全部楼层
jeset 发表于 2013-1-28 11:10
刚好12章才开始呢,请问朋友您呢?

才刚学第八章。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-28 15:49:48 | 显示全部楼层
次指令好像可以解决实验七的内容,可以试试
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-29 16:41:32 | 显示全部楼层
多谢楼主分享
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表