我的操作系统:Windows 7,32位,英特尔迅驰酷睿*2双核,东芝A 205卫星,386奔腾笔记本电脑。我的binUtils:GNU汇编程序2.9.4版本使用BFD 2.9.4版本。我使用的是NetBeans IDE 7.4版
屏幕上显示以下错误。
Program received signal sigsegv: segmentation fault-invalid memory reference.
Backtrace for this error:
*#0 0x6f8aecb4
#1 0x6f89d642
#2 0x401138*
Flower.f:
CHARACTER W*1
CALL SCREEN (6)
005 OPEN (1,FILE='FLOWER.DAT')
030 READ (1,021,END=035) IR,IC,IP
CALL PIXEL (1,IR,IC)
GO TO 030
035 CLOSE (1)
021 FORMAT (I3,I3)
C READ (*,’(A)’) W
READ (1,022) W
022 FORMAT (A1)
CALL SCREEN (3)
END
.global _screen_
_screen_:
Pushl %ebp
Movl %esp,%ebp
Movb $0,%ah
Les 6(%ebp),%bx
Mov %es:(%ebx),%al
Int $0x10 #int 16
Movl %esp,%ebp
Pop %ebp
Ret $04
.global _pixel_
_pixel_:
Pushl %ebp
Movl %esp,%ebp
Movb $12,%ah
Les 14(%ebp),%bx
Mov %es:(%ebx),%al
Les 10(%ebp),%bx
Mov %es:(%ebx),%dx
Les 6(%ebp),%bx
Mov %es:(%ebx),%cx
Int $0x10 #int 16
Movl %esp,%ebp
Pop %ebp
Ret $12*
我尝试了很多方法,但都是徒劳的。
我不知道错在哪里,解决办法是什么?有替代品吗?
您的程序集看起来非常像16位asm到32位的盲转换。AFAIK、int 16
接口仅适用于16位程序。如果你想了解这一点,你需要找到32位api,或者制作一个合适的16位程序,并使用任何兼容窗口来向前发展。。。
此外,screen
和pixel
似乎都希望将远指针作为参数,然后将其用作16位远指针。