嵌入C代码中的386汇编语言程序段.docxVIP

  • 13
  • 0
  • 约6.67千字
  • 约 6页
  • 2017-06-21 发布于河南
  • 举报
嵌入C代码中的386汇编语言程序段

嵌入C代码中的386汇编语言程序段当需要在C语言的程序中嵌入一段汇编语言程序段时,可以使用gcc提供的“asm”语句功能。例如,下面这么一行代码:#define __SLOW_DOWN_IO __asm__ __volatile__(“outb %al, $0x80”)这里,暂时忽略在asm和volatile前后的两个“__”字符,这也是gcc对C语言的一种扩充,后面我们还要讲到。先来看括号里面加上了引号的汇编指令。这是一条8位输出指令,如前所述在操作符上加了后缀“b”以表示这是8位的,而0x80因为是常数,即所谓“直接操作数”,所以要加上前缀“$”,而寄存器名al也加了前缀“%”。知道了前面所讲ATT格式与Intel格式的不同,这就是一条很普通的汇编指令,很容易理解。在同一个asm语句中也可以插入多行汇编程序。就在同一个文件中,在不同的条件下,__SLOW_DOWN_IO又有不同的定义:#define __SLOW_DOWN_IO __asm__ __volatile__(“jmp 1f \nl:\tjmp 1f \n1:”)这就不怎么直观了。这里,一共插入了三行汇编语句,“\n”就是换行符,而“\t”则表示TAB符。所以gcc将之翻译成下面的格式而交给gas去汇编:jmp 1f1:jmp 1f1:这里转移指令的目标1f表示往前(f表示forward)找到第一个标号为1的那一行。

文档评论(0)

1亿VIP精品文档

相关文档