| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4816 人关注过本帖
标题:变量不管用
只看楼主 加入收藏
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:15 
变量不管用
我是一个初学者。打算从最简单的功能学起。按书上的程序输入,然后调试。
发现定义的变量没有用。变量相应地址的数据不是程序中的。
网上查了一下。原来在程序运行之后,还要有代码要定义数据段什么的。可能要初始化。
这些代码要怎么写。都是什么原理。有人懂吗?可能一般人不懂。用INCLUE一些库还是什么也可以解决。
我想知道在程序代码运行之前的那些初始化数据的汇编代码。也不知在程序代码运行之前还有无什么其它的隐藏的事情要做。请教。多谢!
搜索更多相关主题的帖子: 网上 
2015-09-02 11:53
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
我的问题是:你的书是哪本 你有没有书上说的环境 或者你有没有按照书上说的去做

如果你的书上没有明确说到底应该怎么做 我感觉可以换一本讲的更清楚的书

至于你后面「网上查」的东西可能就南辕北辙了 因为网上的资料很可能不是针对你的书的

祝你学习愉快
2015-09-02 12:02
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:0 
就是Irvine写的Inter汇编程序设计。里面最开始的代码。我把INCLUDE Irvine16.inc一行去掉了。
因为不懂怎么Link这些库。然后。程序调试的时候。定义的变量就不管用。其余的代码还是可以正常工作。
2015-09-02 12:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
完全不懂你在说什么

DO IT YOURSELF !
2015-09-02 14:02
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:0 
原来程序是
INCLUDE Irvine32.inc
.data
val1 DWORD 10000h

.code
main PROC
    mov eax,val1
    exit
main ENDP
END main
我把INCLUDE Irvine32.inc去掉了。DEBUG发现val1的值没有到eax寄存器。从译编的结果来看,val1的地址已经有了。但是那个内存地址的值不是10000h。可能是要有一段什么代码。把数据段的值放到那个内存地址。那段代码是啥?希望有人能解答。谢谢。
2015-09-02 15:35
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11772
专家分:43421
注 册:2006-5-13
收藏
得分:5 
原来句号可以这样用,开眼界了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-09-02 20:27
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11772
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用nooomoon在2015-9-2 11:53:25的发言:

我是一个初学者。打算从最简单的功能学起。按书上的程序输入,然后调试。
发现定义的变量没有用。变量相应地址的数据不是程序中的。
网上查了一下。原来在程序运行之后,还要有代码要定义数据段什么的。可能要初始化。
这些代码要怎么写。都是什么原理。有人懂吗?可能一般人不懂。用INCLUE一些库还是什么也可以解决。
我想知道在程序代码运行之前的那些初始化数据的汇编代码。也不知在程序代码运行之前还有无什么其它的隐藏的事情要做。请教。多谢!

除了两个逗号、一个问号和一个感叹号外,其他全是句号。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-09-02 20:29
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:0 
以下是引用hu9jj在2015-9-2 20:29:04的发言:

 
除了两个逗号、一个问号和一个感叹号外,其他全是句号。
此回复奇也怪哉。余所问者 代码事耳 尔所见者 符号事矣
余所用标点符号,乃中文古法。现代标点源自西夷。古文未有标点。有注释者。以朱笔圈点断句。以便阅读。
又因白话文故,之乎者也矣焉哉不用。以夷之感叹号、问号代之。故有此标点之法。以便阅读。
读之者,不以文害辞,不以辞害意。可知吾文之所指。当不以此标点为怪。吾未尝见有以吾标点为异者。
今尔以为怪。故告之来去始末。有不妥之处,望予以指正。为谢。

2015-09-03 09:53
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:0 
以下是引用zklhp在2015-9-2 12:02:13的发言:

我的问题是:你的书是哪本 你有没有书上说的环境 或者你有没有按照书上说的去做

如果你的书上没有明确说到底应该怎么做 我感觉可以换一本讲的更清楚的书

至于你后面「网上查」的东西可能就南辕北辙了 因为网上的资料很可能不是针对你的书的

祝你学习愉快

君之指教,于吾有助也。深以为谢。在下读书太快。捡书中代码以试。不能。见君之回复。细查吾书。知书中已有其法矣。
加此二句即可
mov ax,@data
mov ds,ax
程序运行之无误。
余调试之时,见其第一句mov程序之数据段地址入ax。深以为怪。此程序者,固有文件之代码。彼数据地址者,因机器因时而常变。
固有文件焉知?余思之。必操作系统改此第一句。又以hex编码查二进制执行文件。代码段机器码第一字节为b8。移一固有16位数进ax。
而执行之时,操作系统取此一指令,改操作数为数据段内存地址,写入内存中之代码段。操作系统如何运用此一句。又如何改之。余不知矣。望有知之者告之。为谢
2015-09-03 10:07
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
回复 9楼 nooomoon
不是操作系统取此指令,是cpu取此指令。“mov ax,@data”是汇编码,意思是取变量data所在内存区域的段地址到ax寄存器中。汇编代码需要经过编译后成为机器码才能供cpu执行,至于data所在的段地址是多少,需要exe文件重定位后确定。exe文件头会在系统加载后从系统获取一个起始段地址,以这个段地址为基础,定位所有需要浮动的地址(包括跳转、栈等),com类型文件不需要此句。加入编译后的文件加载后数据段地址为1000H,则对应的机器码为"B8 00 10",其中B8为指令,“00 10”为该指令所需要的数据,cpu从内存中取得b8指令后,就会自动从指令后内存中再取两个字节数据,然后把这两个字节数据送到寄存器ax中,这条指令就执行完毕。大概如此了,如果你学过数字脉冲电路,你就比较好理解这个操作过程在电路上是如何操作的,无非是计数器、寄存器、译码器等电路按时序工作而已。

能编个毛线衣吗?
2015-09-03 11:03
快速回复:变量不管用
数据加载中...
 
   



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

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