夏
1、你说的“图5-3显示, fs先入栈,ebx后入栈”是不对的,恰好反了。书上原话"在开始执版行程序之前,堆栈权指针 esp 指在中断返回地址一栏 ( 图中 esp0 处 ) 。当把将要调用的 C 函数do_divide_error()或其它 C 函数地址入栈后,指针位置是 esp1 处",这已经说明esp0的地址高于esp1的地址。同理ebx地址高于fs地址,即ebx先入栈。 2、3都是关于gnu内嵌汇编问题,需要自己看书的。#define outb_p(value,port) \__asm__ ("outb %%al,%%dx\n" \ "\tjmp 1f\n" \ "1:\tjmp 1f\n" \ "1:"::"a" (value),"d" (port))相当于:mov (value),%eax mov (port),%edxoutb %al,(%dx) 就是给某个端口port发数据value的,<<微机接口>>里很多例子,例如给中断控制器8259A初始化就是这样做的。这个好像有点复杂