3.2.7 编写16位代码
虽然as通常用来编写纯32位的80x86代码,但是1995年后它对编写运行于实模式或16位保护模式的代码也提供有限的支持。为了让as汇编时产生16位代码,需要在运行于16位模式的指令语句之前添加汇编命令".code16",并且使用汇编命令".code32"让as汇编器切换回32位代码汇编方式。
as不区分16位和32位汇编语句,在16位和32位模式下每条指令的功能完全一样而与模式无关。as总是为汇编语句产生32位的指令代码而不管指令将运行在16位还是32位模式下。如果使用汇编命令".code16"让as处于16位模式下,那么as会自动为所有指令加上一个必要的操作数宽度前缀而让指令运行在16位模式。请注意,因为as为所有指令添加了额外的地址和操作数宽度前缀,所以汇编产生的代码长度和性能会受到影响。
由于在1991年开发Linux 内核 0.12时as汇编器还不支持16位代码,因此在编写和汇编0.12内核实模式下的引导启动代码和初始化汇编程序时使用了前面介绍的as86汇编器。