当前位置: 技术问答>linux和unix
谁来帮我看看这个汇编程序
来源: 互联网 发布时间:2016-08-15
本文导语: 题目:从设备数据端口、状态端口、控制端口(70H,71H,72H).从设备输入100B数据,存入buffer为首的地址缓冲区,如果启动1s后仍未完成一次输入,则视为超时显示出错信息。以下是我写的程序,但是老是报告Segmentation fault...
题目:从设备数据端口、状态端口、控制端口(70H,71H,72H).从设备输入100B数据,存入buffer为首的地址缓冲区,如果启动1s后仍未完成一次输入,则视为超时显示出错信息。以下是我写的程序,但是老是报告Segmentation fault错误。高手指点下,明天就要交作业了。
.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!
汇编。。。
神啊
|
汇编还不如门,待高手。。。
|
跟踪一下,看在哪儿出的错
|
段错误,看看你当前操作的段是哪个。