标题:在16位的DOS汇编中,数据段可以执行吗?
只看楼主
rediums
Rank: 2
等 级:新手上路
威 望:3
帖 子:367
专家分:0
注 册:2007-7-29
得分:0 
为了程序能够正确执行,只能这样了。

2008-10-07 23:56
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
得分:0 
assume cs:code,ds:data,ss:stack
data segment
    a db 8Bh,0C3h,0B8h,00h,4Ch,0CDh,21h
data ends
stack segment
    b db 8Bh,0C3h,0B8h,00h,4Ch,0CDh,21h
stack ends
code segment
 start:mov ax,1111h
       mov bx,2222h
   
      ;jmp far ptr a
     jmp far ptr b
      
     
code ends
end start     这样可以吗
2008-10-08 06:53
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
得分:0 
应该可以了.
8BC3          mov ax,bx
B8004C        mov ax,4C00
CD21          int 21
可是这个数据段,其实是可以正常执行下去的代码段.最后,程序竟然在数据段里安全地退出了.假如jmp far ptr b 后面还有其它指令呢?结果可能是:数据段变成了子程序.
2008-10-08 07:19
蓝色神话
Rank: 2
等 级:论坛游民
威 望:1
帖 子:404
专家分:24
注 册:2006-5-11
得分:0 
CPU只认机器指令,不管你这个指令放在哪。CPU只是从PC寄存器指向的地方取指令然后执行!
2008-10-08 10:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
[bo][un]蓝色神话[/un] 在 2008-10-8 10:26 的发言:[/bo]

CPU只认机器指令,不管你这个指令放在哪。CPU只是从PC寄存器指向的地方取指令然后执行!


9494 dos里没那么多限制 只要指令有效 就行
2008-10-08 12:49
darkdsn
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2012-11-27
得分:0 
数据和代码本没有区别,只不过存放的地方不一样,当两者重合时就会产生边界问题.如果把重合处的代码属性改为可执行,再把指令指针指向那里,就可以执行了.
2012-11-27 22:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-236727-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.449497 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved