实验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不为零啊,我纳闷
如果bx没用过可以不用这条指令,初始值很多都是零的,建议楼主重新去看下苍老师的汇编视频。 mov ,bl
bx 高位是不是0 不用管 建议你用debug 跟下 就知道怎么回事了 上面那句的意思是把bl的值 放入地址bx中
然后bl 加1 bx的值也就变了 地址bx 也就变了 第一 只要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
我建议你调试,自己运行看吧! 小熊猫party 发表于 2011-12-23 02:16 static/image/common/back.gif
第一 只要bx运行时候它的值为0的话 运行完这些代码BX的高位都是0
那假如运行前BX的高位不为0那不是不能把数据送到0020;0000--0020:40hl了吗 假设 BX高位 11 低位 老样子吧!
BX=1120那么数据传输0020:1100h--- 0020:1140h 小熊猫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 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。求大虾指点!!! 没错你的逻辑是正确的,但是你的学习思想是“错误”的。你先看看目录,目录里面有章节这些章节说明了一个大概内容,作者希望我们学习的是这章关于 BX寄存器是什么 如何用,而举一反三内容是留给大家自己思考。
以下是个人猜想,因为我不知道多少页内容:
没错有了 mov bx,0 能更准确的保证接下来的数据传输从0020:0--0020:40 但是作者却没有说一定要数据传输0020:0--0020:40吧? 作者应该不希望我们读死书,小甲鱼也是一样他们都希望我们是快乐学习而不是枯燥乏味学习?当你真正强大时候你能帮助更多的人,请问你是快乐的吗?
假设那本书那页内容是一定的话(地址0020:0--0020:40),那好,程序加载进去的时候我们也不判断会不会初始化。(因为我能力有限我也不知道有没有,我只能说未知数),也有可能BH不是00而是其他,我只能说人无完人。
本帖最后由 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
改写成这样更容易理解一些 小熊猫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]