电壶胆 发表于 2011-12-22 20:35:50

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

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

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

   mov ax,4c00h
   int 21h

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

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



api 发表于 2011-12-22 22:23:42

如果bx没用过可以不用这条指令,初始值很多都是零的,建议楼主重新去看下苍老师的汇编视频。

wexczz 发表于 2011-12-22 23:01:45

mov ,bl
bx 高位是不是0 不用管 建议你用debug 跟下 就知道怎么回事了 上面那句的意思是把bl的值 放入地址bx中
然后bl 加1 bx的值也就变了 地址bx 也就变了

小熊猫party 发表于 2011-12-23 02:16:02

第一 只要bx运行时候它的值为0的话 运行完这些代码BX的高位都是0




增加BX值原因:

mov cx,40h
s:   mov ,bl
   inc bl
   loop s

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

mov cx,40h
s:   mov ,bl
   inc bl
   loop s


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

我建议你调试,自己运行看吧!

电壶胆 发表于 2011-12-23 11:51:02

小熊猫party 发表于 2011-12-23 02:16 static/image/common/back.gif
第一 只要bx运行时候它的值为0的话 运行完这些代码BX的高位都是0




那假如运行前BX的高位不为0那不是不能把数据送到0020;0000--0020:40hl了吗

小熊猫party 发表于 2011-12-23 17:55:25

假设 BX高位 11 低位 老样子吧!

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

电壶胆 发表于 2011-12-23 18:46:53

小熊猫party 发表于 2011-12-23 17:55 static/image/common/back.gif
假设 BX高位 11 低位 老样子吧!

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

题目要求把0-40H 送到地址0020:0--0020:40如果把BX 高位改为11那么最后数据送到的地址是0020:1100H-0020:1140H请DEBUG调试。我已经调试过了。

小熊猫party 发表于 2011-12-23 22:00:27

请问你想了解什么问题我不太明白,没错你运行刚才那些是正确的。

电壶胆 发表于 2011-12-23 22:03:19

小熊猫party 发表于 2011-12-23 22:00 static/image/common/back.gif
请问你想了解什么问题我不太明白,没错你运行刚才那些是正确的。

第(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 ,bl
         inc bl
         
         loop s

         mov ax,4c00h
         int 21h

    code ends
    end
    为什么第三行指令中是mov bl,0,而不是mov bx,0?如果是前者的话,岂不是bx的高八位没有被定义为0?那么进入循环后mov ,bl中的bx岂不是有可能不为0,从而导致传送的数据不是从0:200(0200:0)开始保存?
   比如:假设初始状态给bx的值为1111,经过mov bl,0指令后,bx变为1100,再执行s: mov ,bl指令,此时的意思应该为把bl中的值存到0200:1100单元的内存中去,而不是按题意说的存到0200:0000单元的内存中去!因此鄙人觉得第三条指令应为:mov bx,0。求大虾指点!!!

小熊猫party 发表于 2011-12-24 20:28:16

没错你的逻辑是正确的,但是你的学习思想是“错误”的。你先看看目录,目录里面有章节这些章节说明了一个大概内容,作者希望我们学习的是这章关于 BX寄存器是什么 如何用,而举一反三内容是留给大家自己思考。

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

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

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

500年前 发表于 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
         inc bx
         
         loop s

         mov ax,4c00h
         int 21h

    code ends
    end

改写成这样更容易理解一些

小博 发表于 2012-1-8 23:11:38

小熊猫party 发表于 2011-12-24 20:28 static/image/common/back.gif
没错你的逻辑是正确的,但是你的学习思想是“错误”的。你先看看目录,目录里面有章节这些章节说明了一个大 ...

我明白,但是针对一个问题
2,问题是向内存0:200~0:23F中依次写入0~63
对于小甲鱼给出的答案2.
没有初始化bx的值
万一就如9楼说的一样bh不是00的话
那么答案的地址肯定就不一定在0:200~023F内了呀
就不符合题意了
所以对这段代码产生疑惑
页: [1]
查看完整版本: 实验4(2)有点不明白,请高手指教,谢谢