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