为什么这个int $ 0x10 BIOS INT无法在Linux上运行?

时间:2013-10-18 02:13:53

标签: linux assembly x86 bios

我不确定我是否做了一些严重错误的事情。我正在使用intel芯片在linux机器上学习AT& T语法的汇编语言。我了解到INT 10H用于调用BIOS子程序以用于各种视频目的。

我写了这个简单的汇编代码来清除屏幕。

.section .data

data_items:

.section .text

.global _start
_start:

mov $6, %ah        #  to select the scroll function
mov $0, %al        #  the entire page
mov $7, %bh        #  for normal attribute
mov $0, %ch        #  row value of the start point
mov $0, %cl        #  column value of the starting point
mov $24, %dh       #  row value of ending point
mov $79, %dl       #  column value of the ending point
int $0x10          #  invoke the BIOS INT 10H interrupt 

movl $1, %eax      #  exiting the program
int $0x80

我将它组装在一个gnome终端(在intel芯片上使用fedora 19)。装配和连接都没有问题。但它无法运行并出现分段错误。为什么失败以及如何纠正代码?

3 个答案:

答案 0 :(得分:3)

Ahaa,得到了答案。我完全做错了。 INT 10H是一个DOS / windows的东西,而不是LINUX。

http://docs.cs.up.ac.za/programming/asm/derick_tut/#maindiff

  
      
  1. Linux程序集简介   4.1 DOS和Linux程序集之间的主要区别

         

    在DOS程序集中,大多数事情都是用DOS服务中断int 21h完成的,BIOS服务中断就像int 10h和   int 16h。在Linux中,所有这些功能都由内核处理。   一切都通过“内核系统调用”完成,你调用了   内核用int 80h。

  2.   

答案 1 :(得分:3)

Linux和所有现代系统都以受保护模式运行,并且在此模式下系统无法调用BIOS中断。您可以使用DOSBox在Linux中模拟DOS。

答案 2 :(得分:1)

在Linux Int 80h中用于调用系统函数。有一个很棒的assembly oriented SDK可以帮助您从Linux汇编编程开始。

有一些示例,包含文件和系统功能帮助。此SDK基于FASM,但它更好,因为它具有更易读的语法和出色的宏功能。