| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2994 人关注过本帖
标题:[求助]为什么用INT 21H 的9号功能却输出了乱码
只看楼主 加入收藏
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
有问题就问.
ASSUME这句只是声明,并没有干其他事.你如果缺了MOV AX,DATA和MOV DS,AX这两句就不行,因为这两句把数据的地址存储到寄存器中,假如没有这两句,那么,编译器无法识别寄存器中你写的代码的前面的内容(这句好好理解),所以出现乱码.

我的原则很简单:不做不喜欢的事!
2006-05-06 22:06
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 

我相信你们已经把这个问题表达得很清楚了,
但我还是不能完全理解,
也许这本来就是一个需要时间才能解决的问题。


2006-05-07 09:53
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 
以下是引用汪洋在2006-5-6 20:43:00的发言:

如果不写把DATA的段地址赋给DS,也就是说如果不写
MOV AX,DATA
MOV DS,AX
的话,编译器会从什么地方找DATA段和CODE段?
我刚开始出现乱码的程序输出中有乱码,但最后还是包含了正确的那个字符串。
这是不是说明如果不这样写,编译器也能“估计”出该在什么地方找相应的段?
问题太多了,哈哈,各位大侠,能继续指教吗?

有了这个:ASSUME CS:CODE,DS:DATA你的汇编器就知道访问DATA的时候用DS寻址.访问代码的时候用CS寻址.但由于没有给DS赋初值,所以DS的值是未知的.显示字符串的时候虽然有乱码,而你的字符串也被输出了,说明DS的值和正常的初值相差不是很大,猜想是程序装载和重定位的时候系统作的工作.

2006-05-07 11:22
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 

哈哈,我现在终于明白了,谢谢!


2006-05-07 14:27
快速回复:[求助]为什么用INT 21H 的9号功能却输出了乱码
数据加载中...
 
   



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

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