汇编程序ss,cs, ds导致的数组、字符串的冲突
2017-06-14 18:14
441 查看
今天编写了一个汇编程序,在bios里面运行
因为从栈段、数据段、代码段都要自己设置,cs、ds、ss的值可能不一样,导致使用数组、字符串的时候数据不正确
void myFunc(char *str, char *str2);
char str[20];
myFunc(str, "hello world");
这个函数中传入的str是str在栈段的偏移,"hello world"是字符串在ds中的偏移,传入到函数中时,函数获取到的只有偏移,使用数组时取元素用的是[si],即默认以ds为段。
如果ss、ds不一样会导致数据不正确
即使定义myFunc(char _far*str, char _far* str2);传入的也是栈段+偏移地址,ds+偏移地址。函数取元素的时候依然以ds为段。
这种情况下有一种不完美的方法:传值时不直接使用字符串,而将字符串传给数组,然后传数组
另一种标准方法是:加载程序时直接设置cs、ds、ss值一致。
因为从栈段、数据段、代码段都要自己设置,cs、ds、ss的值可能不一样,导致使用数组、字符串的时候数据不正确
void myFunc(char *str, char *str2);
char str[20];
myFunc(str, "hello world");
这个函数中传入的str是str在栈段的偏移,"hello world"是字符串在ds中的偏移,传入到函数中时,函数获取到的只有偏移,使用数组时取元素用的是[si],即默认以ds为段。
如果ss、ds不一样会导致数据不正确
即使定义myFunc(char _far*str, char _far* str2);传入的也是栈段+偏移地址,ds+偏移地址。函数取元素的时候依然以ds为段。
这种情况下有一种不完美的方法:传值时不直接使用字符串,而将字符串传给数组,然后传数组
另一种标准方法是:加载程序时直接设置cs、ds、ss值一致。
相关文章推荐
- 生成highcharts报表时对数据没有用= eval('([' + seriesArray+ '])')处理生成数组,而是简单的拼成字符串,结果导致大量的场景出现
- 使用GithubDesktop 过滤 .DS_Store 文件导致多人协作冲突的问题[图/文]
- vCenter与ibm DS Storage Manager 10冲突导致VC插件异常
- c中字符串数组导致的crash
- 将从数组中取到的字符串赋值给了UIImage导致的错误
- 在VB中把字符串转换成Byte数组
- 数组下标是字符串的实现
- 几种字符串到byte[] 数组转化为String 的方法
- VB中如何将字符串按某个字符分割成数组
- 用字符串数组实现的大数运算
- (原创)切开一个字符串放到数组里面
- 向存储过程中传数组字符串(并存储过程字符串的处理)
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- 《C++捷径教程》读书笔记--Chapter 5--数组和字符串(第二部分)
- 字符串的小错误导致程序运行失败
- 数组相减(ds2=ds-ds1)
- Java2实用教程(第二版)程序代码——第五章 数组与字符串
- VB中字符串数组快速复制的一种方法
- 基于php常用函数总结(数组,字符串,时间,文件操作)
- 字符串转换为数组