免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hshq_cn
打印 上一主题 下一主题

请教 AT&T 的伪指令 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-05-12 20:42 |只看该作者
当初就是为了实现intel语法中的
org    07c00h
jmp    $
times     510-($-$$)    db    0

论坛徽章:
0
12 [报告]
发表于 2007-05-12 22:26 |只看该作者
赞!!


但是跳转一句似乎还有些许问题
下面是在bochs 2.3里的截图 只能看见一个左右移动的光标
去掉jmpw    *(.) 则没有问题
或者是放在 .equ之后



[ 本帖最后由 坏坏小少 于 2007-5-12 22:37 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2007-05-13 10:15 |只看该作者
我也用的bochs2.3,却没问题,使用jmpw *(.)绝对跳转编译时才不会发出警告;
如果把把它放在后面,担心下面定义的字符串等数据不会当作指令执行吗,所以才需要在数据前面无限循环。

论坛徽章:
0
14 [报告]
发表于 2007-05-13 10:21 |只看该作者
另外请教,你是用的img软盘映像文件吗,如何将生成的bin代码写入其中的?
我在linux下用那本书的附带win软件写入的,有linux下的更好的方法吗?

现在win下,这是运行截图,和linux中的一样:

snap.PNG (21.95 KB, 下载次数: 40)

snap.PNG

论坛徽章:
0
15 [报告]
发表于 2007-05-13 12:01 |只看该作者
另外请教,你是用的img软盘映像文件吗,如何将生成的bin代码写入其中的?
我在linux下用那本书的附带win软件写入的,有linux下的更好的方法吗?

用dd做的软盘映像
自己写一个工具写入img
在FreeBSD上编译通过 linux应该也没问题的
  1.   1 #include <stdio.h>
  2.   2 #include <sys/types.h>
  3.   3 #include <sys/uio.h>
  4.   4 #include <unistd.h>
  5.   5 #include <fcntl.h>
  6.   6 #include <sys/stat.h>
  7.   7 int
  8.   8 main(int argc,char *argv[])
  9.   9 {
  10. 10         struct stat img_file;
  11. 11
  12. 12         char boot_buf[512];
  13. 13         int i;
  14. 14         for(i=0;i<511;i++){
  15. 15                 boot_buf[i]=0x00;
  16. 16         }
  17. 17         int img_fd, boot_fd;
  18. 18
  19. 19         if(argc!=3){
  20. 20                 printf("USAGE:./write boot_file img_file\n");
  21. 21         }
  22. 22
  23. 23         boot_fd = open(argv[1], O_RDONLY);
  24. 24         img_fd = open(argv[2], O_RDWR);
  25. 25         fstat(img_fd,&img_file);
  26. 26         if((argc==3)&&(img_file.st_size!=1474560))
  27. 27         {
  28. 28         printf("WARNING:floppy image size is NOT 1474560 \n");
  29. 29         }
  30. 30         read(boot_fd, boot_buf, 510);
  31. 31         close(boot_fd);
  32. 32         boot_buf[510] = 0x55;
  33. 33         boot_buf[511] = 0xaa;
  34. 34         lseek(img_fd, 0, SEEK_CUR);
  35. 35         write(img_fd, boot_buf, 512);
  36. 36         close(img_fd);
  37. 37
  38. 38         exit(0);
  39. 39 }
复制代码

[ 本帖最后由 坏坏小少 于 2007-5-13 12:08 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2007-05-13 13:27 |只看该作者
man 了一下ld:
-Ttext org
  Same  as  --section-start,  with  ".bss", ".data" or ".text" as the
  sectionname
显式地用上.section .text
解决了
btw:由using as 得知
Jump instructions are always optimized to use the smallest possible displacements. This is
accomplished by using byte (8-bit) displacement jumps whenever the target is sufficiently
close. If a byte displacement is insufficient a long displacement is used.


jmp *. 即可

[ 本帖最后由 坏坏小少 于 2007-5-13 13:41 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2007-05-13 13:39 |只看该作者
谢谢!

我也想过写一个小程序,但是对linux的系统调用和标准库不熟悉,就一直没动手。

论坛徽章:
0
18 [报告]
发表于 2007-05-13 23:51 |只看该作者
原帖由 hshq_cn 于 2007-4-24 22:18 发表于 1楼  
请问AT&T语法中,有没有ntel语法中的org,$和$$的功能的对应伪指令?
或者其他实现方式?
我google了好久还是没找到答案,非常感谢!


这个图得吗?如:.set就是c的define伪指令...

Image00017.jpg (163.86 KB, 下载次数: 32)

Image00017.jpg

论坛徽章:
0
19 [报告]
发表于 2007-05-14 00:00 |只看该作者
原帖由 mik 于 2007-4-25 21:47 发表于 2楼  



给个邮箱吧,发个 <gnu assembler> 给你



大侠:可以发个<gnu assembler>给我吗?电邮:pcos@tom.com

论坛徽章:
0
20 [报告]
发表于 2007-05-14 09:29 |只看该作者
To: PCOS

大虾在忙,偶给发了,接着!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP