我不确定我是否做了一些严重错误的事情。我正在使用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)。装配和连接都没有问题。但它无法运行并出现分段错误。为什么失败以及如何纠正代码?
答案 0 :(得分:3)
http://docs.cs.up.ac.za/programming/asm/derick_tut/#maindiff
- 醇>
Linux程序集简介 4.1 DOS和Linux程序集之间的主要区别
在DOS程序集中,大多数事情都是用DOS服务中断int 21h完成的,BIOS服务中断就像int 10h和 int 16h。在Linux中,所有这些功能都由内核处理。 一切都通过“内核系统调用”完成,你调用了 内核用int 80h。
答案 1 :(得分:3)
Linux和所有现代系统都以受保护模式运行,并且在此模式下系统无法调用BIOS中断。您可以使用DOSBox在Linux中模拟DOS。
答案 2 :(得分:1)
在Linux Int 80h中用于调用系统函数。有一个很棒的assembly oriented SDK可以帮助您从Linux汇编编程开始。
有一些示例,包含文件和系统功能帮助。此SDK基于FASM,但它更好,因为它具有更易读的语法和出色的宏功能。