鱼C论坛

 找回密码
 立即注册
查看: 2685|回复: 4

关于汇编语言附注3:masm.exe对jmp的相关处理的疑问

[复制链接]
发表于 2012-6-1 08:20:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 幻临天下 于 2012-6-1 16:12 编辑

疑问1:
当jmp指令和标号之间的位移在[-128,127]的时候,不管他是
jmp s
jmp short s
jmp near ptr s
jmp far ptr s
中的哪一种,都将对应的机器码格式为:EB disp(占两个字节)
可是我对以下程序编码后
assume cs:code
code segment
s:        jmp s
        jmp short s
        jmp near ptr s
        jmp far ptr s
code ends
end s
得到的结果却是:
1476:0000 EBFE          JMP     0000
1476:0002 EBFC          JMP     0000
1476:0004 E9F9FF        JMP     0000
1476:0007 EA00007614    JMP     1476:0000
似乎后面两条和书里面说的不大一样啊。

疑问2:
当我对下面的程序编译的时候会产生错误: error A2008: syntax error : db
将db改为dw也会有类似的错误,是因为标号后面不能定义数据吗?书里面给的例子是错误的?还是MASM的版本问题。
assume cs:code
code segment
  s:db 0
  
code ends
end s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-1 12:28:16 | 显示全部楼层
assume cs:code
问题1:far和near是说明段间跳转和段里内跳转,一般不说明的话默认是near,后面出现1476:0000是因为说明了far段间跳转,故把段地址显示出来

说得不对请大家更正



问题2:
syntax error :db意思是语法错误:db,


我用的电脑做了一遍,没错误,只能说你编译器错了
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-1 16:11:55 | 显示全部楼层


疑问1:
当jmp指令和标号之间的位移在[-128,127]的时候,不管他是
jmp s
jmp short s
jmp near ptr s
jmp far ptr s
中的哪一种,都将对应的机器码格式为:EB disp(占两个字节)

我的疑问是为什么我的的编译结果和书里面讲的不一样。
是什么指令,编译出来的还是什么指令,而不会像书里面说的什么指令都改为EB disp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-1 16:15:18 | 显示全部楼层
听风 发表于 2012-6-1 12:28
assume cs:code
问题1:far和near是说明段间跳转和段里内跳转,一般不说明的话默认是near,后面出现1476:0 ...


疑问2:
从官网下载了masm615还是这样,郁闷了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-2 22:58:39 | 显示全部楼层
纯属路过的 615哪里有下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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