鱼C论坛

 找回密码
 立即注册
楼主: wyuri

王爽汇编问题

[复制链接]
 楼主| 发表于 2016-12-15 12:47:01 | 显示全部楼层

拜托,帮我看看这个,弄不明白
问题5副本.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 16:28:24 | 显示全部楼层
人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

恕我愚钝,nop执行了一次。我还是不明白为什么要放inc cx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 16:34:31 | 显示全部楼层
人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

bx是一直在加一,loop s 处 cx不等于0,就会一直执行上面的指令。为什么要加 inc cx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

执行 loop 时不会再返回到s:处,因为cx = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-12-15 16:57:28 | 显示全部楼层
人造人 发表于 2016-12-15 12:59
请问nop指令执行了几次?
明白了这个问题,你问的这道题就很好理解了

您看看这程序其实不是一样的么,为什么第二个要加 inc cx
问题6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 17:05:06 | 显示全部楼层
人造人 发表于 2016-12-15 16:43
假设bx = 3
= 0
也就是mov cl, 执行完

明白了,loop执行先cx-1,明白了,谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 17:39:36 | 显示全部楼层

我问的问题,我明白了,您问的这个我蒙了,nop只执行一次,因为nop是一个字节,nop执行完 cx=1  所以jcxz向下执行。
还有之前我问的是,jcxz ok     inc bx       jmp short s       和    inc bx     loop s     相似,  现在明白只是相似并不相同,因为执行 loop  先要 cx-1   。明白了, 谢谢   辛苦,  解释的很清楚   谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 19:54:25 | 显示全部楼层
人造人 发表于 2016-12-15 17:57
你确定是这个代码,nop只执行一次?

蒙了,cx是这个程序的长度,程序不执行完,cx永远都是0, 死机。不过,您这个给的解释不适合我问的问题啊,之所以要加 inc cx 是因为,loop执行,先要 cx-1 ,所以前面才放的 inc cx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-15 19:57:37 | 显示全部楼层
人造人 发表于 2016-12-10 22:09
我上传图片也有限制

然后还有问题要问您
问题6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-15 20:55:09 | 显示全部楼层
wyuri 发表于 2016-12-15 19:57
然后还有问题要问您

这道题不应该这样理解,你用debug一步一步调试看看
提示:jmp指令的工作原理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2016-12-17 12:26:19 | 显示全部楼层
人造人 发表于 2016-12-15 20:55
这道题不应该这样理解,你用debug一步一步调试看看
提示:jmp指令的工作原理

这个我是用过debug查看之后才找您的,就是没弄懂,为什么start处不是ip=0   还有就是向前10个字节,超出初始范围,ip=0-2。ip指向的0-2处怎么没有执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-17 12:29:41 | 显示全部楼层
人造人 发表于 2016-12-15 17:57
你确定是这个代码,nop只执行一次?

再问您一个问题  是之前章节的  第六章的最后实验题  实验5
问题7.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

我认为我的方法很好,你认为你的方法很好,就是这样
你没有必要说服我使用你的方法,我也没有必要说服你使用我的方法
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

我还是认为你应该走一走弯路,你的知识面太窄了,这个程序涉及到机器语言,转移指令
很明显,你不知道转移指令的本质是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 13:15:22 | 显示全部楼层
wyuri 发表于 2016-12-17 12:29
再问您一个问题  是之前章节的  第六章的最后实验题  实验5

还是那句话
你调试一下不就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-17 19:34:22 | 显示全部楼层
人造人 发表于 2016-12-17 13:15
还是那句话
你调试一下不就知道了

我调试完的确知道执行哪个了,但是究竟为什么啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 11:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表