鱼C论坛

 找回密码
 立即注册
查看: 3135|回复: 11

实验4(2)有点不明白,请高手指教,谢谢

[复制链接]
发表于 2011-12-22 20:35:50 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 电壶胆 于 2011-12-22 21:33 编辑

assume cs:codesg
codesg segment
     mov ax,0020h
     mov ds,ax
     mov bl,0
     mov cx,40h
s:   mov [bx],bl
     inc bl
     loop s

     mov ax,4c00h
     int 21h

codesg ends
end
请问
s: mov [bx],bl  
inc bl
这个循环中bl 每次自加也就是BX的低位也自加了,但是他的高位是不是0啊,数据传送是不是能送到20:0啊
所以是不是应该在mov ds,ax下面加一条mov bx,0

急啊。鱼友们,其实就是那个偏移地址BX不为零啊,我纳闷



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-22 22:23:42 | 显示全部楼层

回帖奖励 +1 鱼币

如果bx没用过可以不用这条指令,初始值很多都是零的,建议楼主重新去看下苍老师的汇编视频。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-22 23:01:45 | 显示全部楼层
mov [bx],bl
bx 高位是不是0 不用管 建议你用debug 跟下 就知道怎么回事了 上面那句的意思是把bl的值 放入地址bx中
然后bl 加1 bx的值也就变了 地址bx 也就变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 02:16:02 | 显示全部楼层
第一 只要bx运行时候它的值为0的话 运行完这些代码BX的高位都是0




增加BX值原因:

mov cx,40h
s:   mov [bx],bl
     inc bl
     loop s

数据传送可以说是0020:0000 因为他没有执行这条代码

mov cx,40h
s:   mov [bx],bl
     inc bl
     loop s


所以可以说之前代码是0020:0000

我建议你调试,自己运行看吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-23 11:51:02 | 显示全部楼层

那假如运行前BX的高位不为0那不是不能把数据送到0020;0000--0020:40hl了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 17:55:25 | 显示全部楼层
假设 BX高位 11 低位 老样子吧!

BX=1120  那么数据传输0020:1100h  --- 0020:1140h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-23 18:46:53 | 显示全部楼层
小熊猫party 发表于 2011-12-23 17:55
假设 BX高位 11 低位 老样子吧!

BX=1120  那么数据传输0020:1100h  --- 0020:1140h

题目要求把0-40H 送到地址0020:0--0020:40如果把BX 高位改为11那么最后数据送到的地址是0020:1100H-0020:1140H请DEBUG调试。我已经调试过了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 22:00:27 | 显示全部楼层
请问你想了解什么问题我不太明白,没错你运行刚才那些是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-23 22:03:19 | 显示全部楼层
小熊猫party 发表于 2011-12-23 22:00
请问你想了解什么问题我不太明白,没错你运行刚才那些是正确的。

第(2)题要求用9条指令完成“向内存 0:200-0:23f 依次传送数据 0-63(3EFH)”,答案给出如下:
     assume cs:code
    code segment
         mov ax,0020h
         mov ds,ax
         mov bl,0
         mov cx,40h
      s: mov [bx],bl
         inc bl
         
         loop s

         mov ax,4c00h
         int 21h

    code ends
    end
    为什么第三行指令中是mov bl,0,而不是mov bx,0?如果是前者的话,岂不是bx的高八位没有被定义为0?那么进入循环后mov [bx],bl中的bx岂不是有可能不为0,从而导致传送的数据不是从0:200(0200:0)开始保存?
     比如:假设初始状态给bx的值为1111,经过mov bl,0指令后,bx变为1100,再执行s: mov [bx],bl指令,此时的意思应该为把bl中的值存到0200:1100单元的内存中去,而不是按题意说的存到0200:0000单元的内存中去!因此鄙人觉得第三条指令应为:mov bx,0。求大虾指点!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-24 20:28:16 | 显示全部楼层
没错你的逻辑是正确的,但是你的学习思想是“错误”的。你先看看目录,目录里面有章节这些章节说明了一个大概内容,作者希望我们学习的是这章关于 BX寄存器是什么 如何用,而举一反三内容是留给大家自己思考。

以下是个人猜想,因为我不知道多少页内容:

没错有了 mov bx,0 能更准确的保证接下来的数据传输从0020:0--0020:40 但是作者却没有说一定要数据传输0020:0--0020:40吧?   作者应该不希望我们读死书,小甲鱼也是一样他们都希望我们是快乐学习而不是枯燥乏味学习?当你真正强大时候你能帮助更多的人,请问你是快乐的吗?

假设那本书那页内容是一定的话(地址0020:0--0020:40),那好,程序加载进去的时候我们也不判断会不会初始化。(因为我能力有限我也不知道有没有,我只能说未知数),也有可能BH不是00而是其他,我只能说人无完人。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-25 22:21:07 | 显示全部楼层
本帖最后由 500年前 于 2011-12-25 22:21 编辑

assume cs:code
    code segment
         mov ax,0020h
         mov ds,ax
         mov bx,0
         mov cx,40h
      s: mov [bx],bx
         inc bx
         
         loop s

         mov ax,4c00h
         int 21h

    code ends
    end

改写成这样更容易理解一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-8 23:11:38 | 显示全部楼层
小熊猫party 发表于 2011-12-24 20:28
没错你的逻辑是正确的,但是你的学习思想是“错误”的。你先看看目录,目录里面有章节这些章节说明了一个大 ...

我明白,但是针对一个问题
2,问题是向内存0:200~0:23F中依次写入0~63
对于小甲鱼给出的答案2.
没有初始化bx的值
万一就如9楼说的一样bh不是00的话
那么答案的地址肯定就不一定在0:200~023F内了呀
就不符合题意了
所以对这段代码产生疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 16:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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