. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  P289 【屏幕向上滚动一行】子程序有疑问  [已解决] 回复[ 7次 ]   点击[ 537次 ]  
aler
[帖 主]   [ 发表时间:2008-06-21 13:41 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
书上的程序是:
sub4s: push cx
       mov cx,160
       rep movsb
       pop cx
       loop sub4s
程序的目的是将第n+1行的数据或指令复制到第n行,但是【我认为】这个程序执行的内容实际上是【始终】将屏幕第二行的数据复制到第一行,我认为程序应该这样写:
sub4s: push cx
       mov cx,160
       rep movsb
       add di,160
       add si,160
       pop cx
       loop sub4s

我错到哪了?
younggay
[第1楼]   [ 回复时间:2008-06-21 15:29 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
rep movsb 的执行过程中已经有了给di和si相加的操作了。你可以运行你的代码试试看,观察一下现象,应该会出现内容差行的吧。
aler
[第2楼]   [ 回复时间:2008-06-21 21:55 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
rep movsb 的执行过程中已经有了给di和si相加的操作了。你可以运行你的代码试试看,观察一下现象,应该会出现内容差行的吧。
------------------
回复:"rep movsb 的执行过程中已经有了给di和si相加的操作了",这个是在哪里体现的?
mouse
[第3楼]   [ 回复时间:2008-06-22 15:53 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
:"rep movsb 的执行过程中已经有了给di和si相加的操作了",这个是在哪里体现的?
--------------
查rep movsb指令的操作步骤就有了。就如同loop指令,知道了操作的步骤,指令也就明晰了~
aler
[第4楼]   [ 回复时间:2008-06-22 20:41 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
可以讲透彻一点吗,还是很迷糊.....
duckgaga
[第5楼]   [ 回复时间:2008-06-23 00:29 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
呵呵,我明白楼主的疑惑所在,因为我以前像楼主一样迷惑过。
movsb的功能是从ds:si复制一个字节到es:di所指向的地方。rep是重复前缀,加上这个重复以后,rep movsb就会根据CX中的值,决定进行多少次movsb的操作,并且会自动调整si,di的值,如果设置方向为正的话(即用CLD设定),那么每次复制完一个字节之后,si,di的值都会自动加1,即相当于inc si;inc di,然后继续执行movsb操作,直到cx的值为0停止。
好,现在回来看这个题目,执行160次movsb后(rep决定了要执行movsb重复操作,CX的值决定了执行重复的次数),因为每次movsb之后,si,di都会自动加1,那么160次之后,si,di值就已经加了160了。现在应该明白了吧?如果不明白的话,可以自己上机调试一下,debug查看一下si,di的值。
aler
[第6楼]   [ 回复时间:2008-06-23 05:16 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
谢谢duckgaga
aler
[第7楼]   [ 回复时间:2008-06-23 05:16 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:18
注册日期:2008-03-14 14:07
此贴由 贴主 于 [ 2008-06-23 05:16 ] 结贴。 结贴原因:问题已解决
得分情况: 5楼(duckgaga):12分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved