Fortran77的巧妙汇编语言语法接口



我的操作系统: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位程序,并使用任何兼容窗口来向前发展。。。

此外,screenpixel似乎都希望将远指针作为参数,然后将其用作16位远指针。

最新更新