幻临天下 发表于 2012-6-1 08:20:39

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

本帖最后由 幻临天下 于 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

听风 发表于 2012-6-1 12:28:16

assume cs:code
问题1:far和near是说明段间跳转和段里内跳转,一般不说明的话默认是near,后面出现1476:0000是因为说明了far段间跳转,故把段地址显示出来

说得不对请大家更正



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


我用的电脑做了一遍,没错误,只能说你编译器错了

幻临天下 发表于 2012-6-1 16:11:55

听风 发表于 2012-6-1 12:28 static/image/common/back.gif
assume cs:code
问题1:far和near是说明段间跳转和段里内跳转,一般不说明的话默认是near,后面出现1476:0 ...


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

我的疑问是为什么我的的编译结果和书里面讲的不一样。
是什么指令,编译出来的还是什么指令,而不会像书里面说的什么指令都改为EB disp

幻临天下 发表于 2012-6-1 16:15:18

听风 发表于 2012-6-1 12:28 static/image/common/back.gif
assume cs:code
问题1:far和near是说明段间跳转和段里内跳转,一般不说明的话默认是near,后面出现1476:0 ...

{:5_107:}
疑问2:
从官网下载了masm615还是这样,郁闷了!

流浪的小猪 发表于 2013-1-2 22:58:39

纯属路过的 615哪里有下啊
页: [1]
查看完整版本: 关于汇编语言附注3:masm.exe对jmp的相关处理的疑问