求汇编实验四的详解
昨天自己做完实验四之后看了甲鱼哥的答案就迷茫了,解说我也不是听的很懂,大家帮帮忙我新手!
谢了
最少发个代码 注释下不懂的地方阿!~ 实验四的(1)看答案应该能懂
(2)的题目是向内存0:200~0:23F依次传送数据0~63(3FH),它简化的原理是利用了所传输的数据是从0开始的,而内存地址的偏移量也是从0开始的,利用这一点,答案便将bl当做一个技计数器来使用,即用来完成地址和数据同时递增的功能,而(1)中用dl完成数据的递增,即0~63,而bx用来地址偏移量的递增
(3)中我刚学到这时也看不懂,只要你学完下一章就懂了,因为题目的要求是把代码段内的指令当做数据,而代码必然存储在code段中(相当于引用),所以填code是最标准的。下一空填写的是循环次数,既然是将代码复制,且当做数据来使用,那么循环次数就应该=所移指令的字节数,指令字节数确定方法为:程序编译连接后debug,DEBUG时我们可用R命令查看CX的值,这时我们可以看到CX的值为1D,由此我们可以算出该程序的长度=18h,之所以减5是为了满足题目的要求(因为mov ax,4c00h/int 21h这两条指令的长度等于5)[cx的值即为指令字节数】 提问要有提问的态度,楼主哪里不懂至少应该说明一下,也好大家一起努力来解决问题…… 没学下一章,看题很迷糊,但是看了答案分析就有思路了。题目说的是mov ax 4c00h之前的指令复制。这个指令就是我们编写的“程序”代码。因为在cpu眼中指令或数据都是0101010,换成16进制就是咱们所学的内存地址里的16进制数。在之前的课程中学过,debug中用-e:1000:0 11 22 33 44·········的方式修改内存数据,进行汇编,用-u:1000:0 f这样的方式就可以查看到对应的机器码,也就是汇编代码。他们就是咱们写的“程序”代码。这说明汇编指令可以当做数据写入内存的。这些“程序”代码开头被命名为code,第一个mov ax,code ,表示将指令作为数据赋予ax中。 第二个空位,{mov cx,x}用来限定loop的循环次数,最小当然是1不然没意义。最大看loop里的指令
mov al,【bx】。 al最多能被赋予多少个数值呢?一个低8位,最大就是ff咯。所以这个mov cx,x指令x的数值就在1——ff之间随便选取一个咯。选多少随便你,程序补充完全,就可以进行编译了。编译完成后debug一下这个程序进行跟踪。答案里写的看cx的数值,但是我不是。因为题目说的是mov ax,4c00h之前,那么只要调试到它之前一步就可以了,这时候看下ip的数值是多少?是不是18.ip移动18说明这个程序代码的长度就是18.如果不理解你可以 用命令-u cs:0 18就会发现这18个字节里就是你编写的机器码。说明这些机器码的长度就是18. 你在用命令-d cs:0 18就能看到这18个字节里的对应的内存地址数据。一共18个内存数据,当然要mov al,【bx】 18次了。所以mov cx,x里的x为18。 通过这些就能看明白,答案分析里的ds和cs一样,就是说cs代码段,在内存地址中,也是数据的意思。ds是数据段,自然也是数据。后面的课程还没有看,不知道我说的对错呢,交流思考就是学习。一起努力吧。 我也刚碰到这个问题, 来学习了,谢谢大家的解答, 看了之后了解了!!!:D {:1_1:}笑笑大家的解答,虽然还是一知半解的 格式天下 发表于 2012-2-29 22:20 static/image/common/back.gif
实验四的(1)看答案应该能懂
(2)的题目是向内存0:200~0:23F依次传送数据0~63(3FH),它简化的原理是利用 ...
{:5_100:}看了第一句话就匆匆跑去 看第六章,结果6.1测试果断回来- - ゛゛不过如此. 发表于 2012-11-3 22:05 static/image/common/back.gif
看了第一句话就匆匆跑去 看第六章,结果6.1测试果断回来- -
我这……差不多都忘光了……你没明白那里,说清楚点~~~~~{:5_91:} manman xue学习一下 没弄太懂 学习学习
页:
[1]