wyuri 发表于 2016-12-15 12:47:01

人造人 发表于 2016-12-11 18:53
在哪?

拜托,帮我看看这个,弄不明白

人造人 发表于 2016-12-15 12:59:16

wyuri 发表于 2016-12-15 12:47
拜托,帮我看看这个,弄不明白

请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

assume cs:code


code segment
start:
        mov cx, 1
s:
        nop; 这条指令执行几次?
        loop s
       
       
        mov ax, 4c00h
        int 21h
code ends

end start

wyuri 发表于 2016-12-15 16:28:24

人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

恕我愚钝,nop执行了一次。我还是不明白为什么要放inc cx

wyuri 发表于 2016-12-15 16:34:31

人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

bx是一直在加一,loop s 处 cx不等于0,就会一直执行上面的指令。为什么要加 inc cx

人造人 发表于 2016-12-15 16:43:09

wyuri 发表于 2016-12-15 16:34
bx是一直在加一,loop s 处 cx不等于0,就会一直执行上面的指令。为什么要加 inc cx

假设bx = 3
= 0
也就是mov cl, 执行完
cl = 0

mov ch, 0
inc cx
执行完
cx = 1

执行 loop 时不会再返回到s:处,因为cx = 1

wyuri 发表于 2016-12-15 16:57:28

人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

您看看这程序其实不是一样的么,为什么第二个要加 inc cx

wyuri 发表于 2016-12-15 17:05:06

人造人 发表于 2016-12-15 16:43
假设bx = 3
= 0
也就是mov cl, 执行完


明白了,loop执行先cx-1,明白了,谢了

人造人 发表于 2016-12-15 17:26:07

wyuri 发表于 2016-12-15 16:57
您看看这程序其实不是一样的么,为什么第二个要加 inc cx

assume cs:code


code segment
start:
      mov cx, 0
s:
      nop; 这条指令执行几次?
      jcxz s
      
      
      mov ax, 4c00h
      int 21h
code ends

end start

wyuri 发表于 2016-12-15 17:39:36

人造人 发表于 2016-12-15 17:26


我问的问题,我明白了,您问的这个我蒙了,nop只执行一次,因为nop是一个字节,nop执行完 cx=1所以jcxz向下执行。
还有之前我问的是,jcxz ok   inc bx       jmp short s       和    inc bx   loop s   相似,现在明白只是相似并不相同,因为执行 loop先要 cx-1   。明白了, 谢谢   辛苦,解释的很清楚   谢谢

人造人 发表于 2016-12-15 17:57:52

wyuri 发表于 2016-12-15 17:39
我问的问题,我明白了,您问的这个我蒙了,nop只执行一次,因为nop是一个字节,nop执行完 cx=1所以jcxz ...

你确定是这个代码,nop只执行一次?
assume cs:code


code segment
start:
      mov cx, 0
s:
      nop; 这条指令执行几次?
      jcxz s
      
      
      mov ax, 4c00h
      int 21h
code ends

end start

wyuri 发表于 2016-12-15 19:54:25

人造人 发表于 2016-12-15 17:57
你确定是这个代码,nop只执行一次?

蒙了,cx是这个程序的长度,程序不执行完,cx永远都是0, 死机。不过,您这个给的解释不适合我问的问题啊,之所以要加 inc cx 是因为,loop执行,先要 cx-1 ,所以前面才放的 inc cx

wyuri 发表于 2016-12-15 19:57:37

人造人 发表于 2016-12-10 22:09
我上传图片也有限制

然后还有问题要问您

人造人 发表于 2016-12-15 20:55:09

wyuri 发表于 2016-12-15 19:57
然后还有问题要问您

这道题不应该这样理解,你用debug一步一步调试看看
提示:jmp指令的工作原理

wyuri 发表于 2016-12-17 12:00:30

人造人 发表于 2016-12-10 20:52
凑巧就凑巧吧
只要不是正确,那这个凑巧就不会永远,总有一天会凑不下去
那时你就知道正确答案了(风雨 ...

如果在没有高人指教的情况下我只能这样,但是如果有高人指教,我为什么要让自己走弯路来加深错误的思路印象,如果在日后解决了,也只是解决了一道问题,但日后的思路却根深蒂固,这种正确在以后解决的想法,会产生很严重的蝴蝶效应。长久用的思路会产生倾向性,不容易改变。所以学习在最开始就要保持一个正确的思路,绕弯路只会让思路紊乱

wyuri 发表于 2016-12-17 12:26:19

人造人 发表于 2016-12-15 20:55
这道题不应该这样理解,你用debug一步一步调试看看
提示:jmp指令的工作原理

这个我是用过debug查看之后才找您的,就是没弄懂,为什么start处不是ip=0   还有就是向前10个字节,超出初始范围,ip=0-2。ip指向的0-2处怎么没有执行

wyuri 发表于 2016-12-17 12:29:41

人造人 发表于 2016-12-15 17:57
你确定是这个代码,nop只执行一次?

再问您一个问题是之前章节的第六章的最后实验题实验5

人造人 发表于 2016-12-17 12:31:18

wyuri 发表于 2016-12-17 12:00
如果在没有高人指教的情况下我只能这样,但是如果有高人指教,我为什么要让自己走弯路来加深错误的思路印 ...

谁都有一套自己的学习方法,你的不一定适合我,我的也不一定适合你
这不是哪一个好,哪一个坏的问题,而是适合与不适合的问题

我认为我的方法很好,你认为你的方法很好,就是这样
你没有必要说服我使用你的方法,我也没有必要说服你使用我的方法
^_^

人造人 发表于 2016-12-17 13:07:25

wyuri 发表于 2016-12-17 12:26
这个我是用过debug查看之后才找您的,就是没弄懂,为什么start处不是ip=0   还有就是向前10个字节,超出 ...

执行完12 行 mov cs:, ax
此时,标号s 处变成了向上转移n个字节
s0:jmp short s 执行完后,去到
标号s处
同样向上转移n个字节(因为复制了标号s2处的指令)
因为n相等,所以去到最上面(3行)
执行
然后退出

我还是认为你应该走一走弯路,你的知识面太窄了,这个程序涉及到机器语言,转移指令
很明显,你不知道转移指令的本质是什么

人造人 发表于 2016-12-17 13:15:22

wyuri 发表于 2016-12-17 12:29
再问您一个问题是之前章节的第六章的最后实验题实验5

还是那句话
你调试一下不就知道了

wyuri 发表于 2016-12-17 19:34:22

人造人 发表于 2016-12-17 13:15
还是那句话
你调试一下不就知道了

我调试完的确知道执行哪个了,但是究竟为什么啊
页: 1 2 3 [4] 5 6 7 8 9 10 11
查看完整版本: 王爽汇编问题