| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3598 人关注过本帖
标题:求助,很短的程序,但是很奇怪的结果
只看楼主 加入收藏
lxy199403017
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助,很短的程序,但是很奇怪的结果
assume cs:code
code segment
s:  mov ax,bx ;2字节
    mov si,offset s
    mov di,offset s0 ;为何此处可以用s0,s0不是在后面么?编译不应该是顺行的么?为何c和c++都是顺序执行的呢
                     ;那么为何汇编能在还没有s0的时候就使用s0呢???
    mov ax,cs:[si]
    mov cs:[di],ax ;将s处的语句复制到s0处,debug后成功,但是却不执行s0处语句,为何??


s0: nop
    nop

    mov ax,4c00h
    int 21h

code ends
end s
;工具:DOSBox
;编译工具:masm5
;调试工具:debug32 /debug
2014-10-20 17:50
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:10 
mov di,offset s0只是将偏移地址送给DI,
assume cs:code
code segment这两句应该调换位置

[ 本帖最后由 龙牙 于 2014-10-20 20:05 编辑 ]

只要心是晴朗的,人生就没有雨天。
2014-10-20 20:03
lxy199403017
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-20
收藏
得分:0 
回复 2 楼 龙牙
是的,但是s0处语句不执行,将s0偏移地址存入di后,将mov cs:[di],ax,ax里存放的是s地址的内容,即mov ax,bx 的机器码,但是程序执行到s0后却不执行mov ax,bx.
2014-10-22 00:26
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:10 
第一个问题:
汇编程序的编译过程至少要进行两次,第一次编译时会计算出所有标号对应的实际地址,也就是标号地址对照表,第二次编译时将实际地址替换到标号气所处的位置。所以程序可以随意调用标号,而不必考虑标号所处的位置。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-10-22 07:36
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
不懂
2014-10-22 07:55
快速回复:求助,很短的程序,但是很奇怪的结果
数据加载中...
 
   



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

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