让人百思不得其解,超级变态的汇编问题,请专家解答

sunchaohuang 2009-01-15 02:42:34
请问这两个代码编程思路一样,为什么一个能够正常运行而另一个却无法正常运行!回答好追加分谢谢!

代码一运行出错:

assume cs:code
code segment
l1:
mov ax,1
mov ax,2
mov ax,3
call word ptr cs:[jmpcode1]
jmpcode1 dw 0f5ebh
code ends
end l1



代码二正常运行:

assume cs:code
code segment
l1:
mov ax,1
mov ax,2
mov ax,3
call jmpcode1
jmpcode1: dw 0f2ebh
code ends
end l1

...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldfqq 2009-01-15
  • 打赏
  • 举报
回复
assume cs:code
code segment
l1:
mov ax,1
mov ax,2
mov ax,3
mov bx,offset jmpcode1
call bx
jmpcode1 dw 0f5ebh
code ends
end l1
sunchaohuang 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
call word ptr cs:[jmpcode1]表示的是取jmpcode1地址中的内容作为函数地址来调用。
call jmpcode1是调用jmpcode1的地址。
两者含义不同,如果要用前者,需要把jmpcode1的地址保存在另外一个变量中,然后call这个变量。
[/Quote]


3Q
cnzdgs 2009-01-15
  • 打赏
  • 举报
回复
call word ptr cs:[jmpcode1]表示的是取jmpcode1地址中的内容作为函数地址来调用。
call jmpcode1是调用jmpcode1的地址。
两者含义不同,如果要用前者,需要把jmpcode1的地址保存在另外一个变量中,然后call这个变量。
xtdumpling 2009-01-15
  • 打赏
  • 举报
回复
assume cs:code
code segment
l1:
mov ax,1
mov ax,2
mov ax,3
;call word ptr cs:[jmpcode1]
jmpcode1 dw 0f5ebh
code ends
end l1
xtdumpling 2009-01-15
  • 打赏
  • 举报
回复
不明白,debug看一下

2922:0000 B80100           MOV     AX,0001h
2922:0003 B80200 MOV AX,0002h
2922:0006 B80300 MOV AX,0003h
2922:0009 2EFF160E00 CALL CS:[000E];CS:[000E]=F5EB -->jmp to F5EB
2922:000E EBF5 JMP Short 0005


2922:0000 B80100           MOV     AX,0001h
2922:0003 B80200 MOV AX,0002h
2922:0006 B80300 MOV AX,0003h
2922:0009 E80000 CALL 000C;jmp to next instruction
2922:000C EBF2 JMP Short 0000
sunchaohuang 2009-01-15
  • 打赏
  • 举报
回复
怎么把程序第一个程序变的能用 无语
killbug2004 2009-01-15
  • 打赏
  • 举报
回复
call word ptr cs:[jmpcode1]------>call cs:0f5ebh,先保存现场,然后到jmpcode1内存中的保存的地址0f5ebh处执行

call jmpcode1------>保存现场,然后到jmpcode1处执行

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧