日期:2014-05-16  浏览次数:20612 次

谁来帮我看看这个汇编程序
题目:从设备数据端口、状态端口、控制端口(70H,71H,72H).从设备输入100B数据,存入buffer为首的地址缓冲区,如果启动1s后仍未完成一次输入,则视为超时显示出错信息。以下是我写的程序,但是老是报告Segmentation fault错误。高手指点下,明天就要交作业了。
Assembly code
.section .data
output:
    .asciz    "TIME IS OUT , TERMINATE!"
.section .bss
    .lcomm buffer,    100
.section .text
.globl main
main:
        #检测是否启动设备
NotStart:    inb     $0x72 ,  %al
        testb     $0x1  ,  %al
        jz    NotStart
        
        #设定循环计算器,每次传送4个字节
        movl    $25,  %ecx 
        movl    $buffer,%ebx
        movl    $1000,    %edx #我假设循环1000次为1秒
        #检测设备准备就绪,每次读取时都要检测
READ:
NotReady:
        decl    %edx
        testl    $1    ,  %edx
        jz    TIMEOUT
        movl    $0    ,  %eax
        inb    $0x71 ,     %al #从71H端口读取状态
        testb    $0x1  ,  %al # 1 准备就绪
        jz    NotReady    
        #读取数据信息
        inl    $0x70 ,  %eax
        movl    %eax   , %ebx
        incl    %ebx
        loop    READ
        jmp    EXIT
TIMEOUT:    
        pushl    $output
        call    printf
        addl    $4,    %esp
EXIT:
        movl     $1,    %eax
        movl    $0,    %ebx
        int    $0x80




------解决方案--------------------


oh,my lady gaga!

汇编。。。

神啊
------解决方案--------------------
汇编还不如门,待高手。。。
------解决方案--------------------
跟踪一下,看在哪儿出的错
------解决方案--------------------
段错误,看看你当前操作的段是哪个。