汇编语言复习

  1. 通用数据传送指令
    MOV——传送指令
    指令格式:MOV DST,SRC ;(DST)←(SRC)。DST表示目的操作数, SRC表示源操作数
    说 明:①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。SRC为任意数据寻址方式。
    ②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方式,而且在DST为段寄存器时,SRC不能为立即数。
    ③.MOV指令不影响标志位。

  2. 地址传送指令
    (1). LEA——有效地址(EA)送寄存器指令
    指令格式:LEA REG,SRC ;(REG)←SRC
    说 明:①.指令把源操作数(只能是存储器寻址方式)指定的有效地址送到指令指定的16位或32位寄存器(REG)中(但不能是段寄存器)。
    ②.LEA指令不影响标志位。

  3. 加法指令
    (1). ADD——加法指令
    指令格式:ADD DST,SRC ;(DST)←(DST)+( SRC)

  4. 减法指令
    (1). SUB——减法指令
    指令格式:SUB DST,SRC ;(DST)←(DST) - (SRC)
    (2). SBB——带借位减法指令
    指令格式:SBB DST,SRC ;(DST)←(DST) - (SRC) - CF

  5. 除法指令
    (1). DIV——无符号数除法指令
    指令格式:DIV SRC ;字节操作:(AL)←(AX)/(SRC),(AH)←(AX)%(SRC)
    字 操 作:(AX)←(DX,AX)/(SRC),(DX)←(DX,AX)%(SRC)
    双字操作:(EAX)←(EDX,EAX)/(SRC),(EDX)←(EDX,EAX)%(SRC)

  6. 逻辑运算指令:可以对双字、字或字节执行按位的逻辑运算。
    (1). AND——逻辑与指令
    指令格式:AND DST,SRC ;(DST)←(DST)∧(SRC)
    (2). OR——逻辑或指令
    指令格式:OR DST,SRC ;(DST)←(DST)∨(SRC)
    (3). XOR——逻辑异或指令
    指令格式:XOR DST,SRC ;(DST)←(DST)⊕(SRC)
    (4). PUSH——进栈指令
    指令格式:PUSH SRC;16位指令:(SP)←(SP) –2 ((SP)+1,(SP))←(SRC)
    32位指令:(ESP)←(ESP) –4 ((ESP)+3, (ESP)+2, (ESP)+1, (ESP))←(SRC)
    说 明:①.堆栈:计算机开辟的以“后进先出”方式工作的存储区。它必须存在于堆栈段中,只有一个出入口,所以只有一个堆栈指针SP或ESP。SP或ESP的内容在任何时候都指向当前的栈顶。
    ②.8086中的SRC不能为立即数寻址方式。286及其后继机型可用立即数寻址方式。
    ③.PUSH指令不影响标志位。
    (5). POPF/POPFD——标志出栈指令
    指令格式:POPF ;(FLAGS)←((SP)+1,(SP)),(SP)←(SP)+2
    POPFD ;(EFLAGS)←((ESP)+3, (ESP)+2, (ESP)+1, (ESP)),
    (ESP)←(ESP) -4
    说 明:这组指令中LAHF、PUSHF/PUSHFD不影响标志位。但POPFD指令不影响VM,RF,IOPL,VIF和VIP的值。

  7. 移位指令
    (1). 移位指令
    1). SHL——逻辑左移指令
    指令格式:SHL OPR,CNT ;
    2). SAL——算术左移指令
    指令格式:SAL OPR,CNT ;同上
    3). SHR——逻辑右移指令
    指令格式:SHR OPR,CNT ;
    4). SAR——算术右移指令
    指令格式:SAR OPR,CNT ;
    (2). 循环移位指令
    1). ROR——循环右移指令
    指令格式:ROR OPR,CNT ;
    2). RCR——带进位位循环右移指令
    指令格式:RCR OPR,CNT ;
    说 明:①.OPR为除立即数以外的任意寻址方式。移位次数由CNT决定,CNT=1只移位1次;若移位次数超过1次,在8086中则CNT必须用CL代替。而在其他机型中也可用8位立即数指定范围从1~31的移位次数。
    ②.CF位已在指令中给出其影响情况。OF位只有在CNT=1时有效,一次移位前后的最高有效位(符号位)发生变化则OF=1,否则OF=0。循环指令不影响其它条件。移位指令由结果影响SF、ZF、PF,而AF无定义。

  8. 循环指令
    (1). LOOP——循环指令
    指令格式:LOOP OPR
    测试条件:(Count Reg)≠0
    1). JZ (或JE)——结果为零(或相等)则转移
    指令格式:JZ (或JE) OPR
    测试条件:ZF=1
    (2). TEST——测试指令
    指令格式:TEST OPR1,OPR2 ;(OPR1)∧(OPR2)
    说 明:①.DST、OPR、OPR1不允许使用立即数寻址方式。
    (3). CMP——比较指令
    指令格式:CMP OPR1,OPR2 ;(OPR1) - (OPR2),运算后根据结果影响标志
    说 明:①.以上指令除DEC不影响CF标志外,它们都影响条件标志位。
    ②.OF是有符号数的溢出,CF是无符号数的溢出。但CF可作为多位运算
    借位标志。

  9. WORD PTR:取字长地址值操作符。
    (4). INT——中断调用指令
    指令格式:INT TYPE
    或INT ;TYPE=3时,缺省
    执行操作:Push (FLAGS)
    IF←0
    TF←0
    AC←0
    Push (CS)
    Push (IP)
    (IP)←(TYPE4) (每个中断向量占4个字节)
    (CS)←(TYPE
    4+2)
    说 明:①.其中TYPE为类型号,它可以是常数或常数表达式,其值需在0~255范围内。
    ②.类型0的中断称为除数为0中断,由CPU自动产生,不能用中断指令调用。
    ③.类型1的中断称为单步中断,CPU进入单步中断的依据为(TF)=1。不能用中断指令来调用。单步中断由调试程序DEBUG使用。
    ④.类型2的中断称为非屏蔽中断,属硬件中断,紧急情况使用,不许用中断指令来调用。
    ⑤.类型3的中断称为断点中断。用在调试程序中。INT又称为断点中断指令,它是单字节指令。与其他INT TYPE不同,是双字节指令。
    ⑥.类型4的中断称为溢出中断。有专门的溢出中断调用指令INTO。无INT 4指令。见下面。
    1.1.2 段定义伪操作

  10. 完整的段定义伪操作
    (1). SEGMENT/ENDS——段定义伪操作:此对伪操作可以将汇编语言源程序分成几个段,通常为数据段、堆栈段、附加段和代码段。
    伪操作格式:segname SEGMENT [align_type][combine_type][use_type] [‘class’]
    (2). ASSUME——段指定伪操作:告诉汇编程序,段和段寄存器的对应关系。
    伪操作格式:ASSUME 分配(assignment),…,assignment
    说 明:其中assignment说明分配情况,其格式为:
    段寄存器名(segment register name):段名字(segment name)[,段寄存器名:段名字[,……]]
    ASSUME NOTHING则可取消前面由ASSUME所指定的段寄存器。

  11. 助记符(Mnemonic):说明所用伪操作的助记符名称同时也说明所定义的数据类型。通常为下面6种。
    (1). DB(Define Byte):定义字节伪操作,其后的每个操作数都占有一个字节(8位)。
    (2). DW(Define Word):定义字伪操作,其后的每个操作数都占有一个字(16位)。
    (3). DD(Define Double Word):定义双字伪操作,其后的每个操作数都占有一个双字(32位)。
    (4). 重复操作符DUP:用来指定某个(或某些)操作数重复的次数(还可以嵌套)。形式为:
    repeat_count DUP (初值[,初值…]) ;repeat_count为重复的次数
    (5)“?” 操作数:仅给变量保留相应的存储空间,而不赋给变量初值。

  12. EQU——表达式赋值伪操作:用来对一个名字进行赋值。但不能对一个已赋值的名字重新赋值。
    伪操作格式:表达式名字 EQU 表达式 ;表达式可以为常数或者数据的地址
    说 明:PURGE语句:用来解除对某一个名字的赋值。以后此名字才可由EQU重新赋值。
    伪操作格式:PURGE 原名字 ;原名字,即前面已赋过值的名字

  13. = ——表达式赋值伪操作:“=”(等号)伪操作的功能与EQU伪操作基本相同,主要区别在于它可以对同一个名字重新赋值。
    伪操作格式:名字 = 表达式 ;表达式可以为常数或者数据的地址
    (1). INC——加1指令
    指令格式:INC OPR ;(OPR)←(OPR)+1
    说 明:①.以上指令除INC不影响CF标志外,它们都影响条件标志位。
    ②.OF是有符号数的溢出,CF是无符号数的溢出。但CF可作为多位运算的进位标志。
    (2). PTR属性操作符:指定操作数的类型属性为BYTE、WORD、DWORD、FWORD、QWORD或TBYTE类型。
    操作符格式:类型(Type) PTR 变量(Variable)±常数表达式(Constant expression)
    SIZE:回送分配给变量的字节数,它是LENGTH与TYPE值的乘积。
    OFFSET:回送变量或者标号的偏移地址值。
    物理地址的求法

  14. 逻辑地址
    (1). 在实模式下逻辑地址即为段地址:偏移地址。物理地址 = 段地址×10H + 偏移地址
    (2). 在保护模式下逻辑地址则由选择器和偏移地址两部分组成。选择器存放在段寄存器中,但它不能直接表示段基地址,而由操作系统通过一定的方法取得段基地址,再和偏移地址相加,从而求得所选存储单元的物理地址。
    1.1.3 存储单元的地址和内容:

  15. 字节:每8位二进制数组成一个字节(Byte)。在存储器里是以字节为单位存储信息。

  16. 字:16位二进制数(2个字节)组成一个字。分成低位字节和高位字节存储。

  17. 存储单元的地址:为了正确的存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。以字节为单位给存储单元按二进制从0开始顺序进行的编号。它是无符号的二进制整数,书写格式为十六进制数。
    (1). 选址能力:若干位(如x位)二进制数(相当于若干根地址线)所能选择的最大存储单元的地址数(2x)。
    (2). 1K=1024=210。所以16位二进制数的选址能力为216=64KB。用0~FFFFH表示。IBM PC机(8086/8088 CPU)的选址能力为220=1MB。

  18. 存储单元的内容:该存储单元存放的信息。存储器的内容取之不尽。
    (1). 字节的存储:直接存入某存储单元。
    (2). 字的存储:一个字存入存储器要占用两个单元。存放时,低位字节存入低地址单元,高位字节存入高位地址单元。字单元的地址用它的低地址表示,应尽量为偶数地址。
    (3). 如果用X表示某存储单元的地址,则X单元的内容可以表示为(X);假如X单元中存放着Y,而Y又是一个地址,则可用(Y)=((X))来表示Y单元的内容。
    (4). 存储器的内容取之不尽。
    1.1.4 实模式存储器寻址
    实模式就是为8086/8088而设计的工作方式,实模式下允许的最大寻址空间为1MB。它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。

  19. 存储器地址的分段
    (1). 段:程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。段的最大长度为64KB,以便能用16位二进制数表示段内地址。
    1). 小段:从0地址开始,每16字节为一小段。小段的首地址用16进制数表示时其最低位为0。
    2). 段的起始地址:段不能起始于任意地址,而必须从任一小段(paragraph)的首地址开始。
    (2). 物理地址、段地址、偏移地址
    1). 物理地址(PA):在1MB的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址(20位)。20位物理地址由16位段地址和16位偏移地址组成。
    2). 段地址:段起始地址的高16位值(16位),低4位固定为0被省去。
    3). 偏移地址(偏移量EA):指在段内相对于段起始地址的偏移值(16位)。
    4). 物理地址 = 段地址×10H + 偏移地址。用段地址:偏移地址表示。

  20. 段寄存器:在8086~80286中,有4个专门存放段地址的寄存器。
    (1). 代码段CS:存放当前正在运行的程序。
    (2). 数据段DS:存放当前运行程序所用的数据。
    (3). 堆栈段SS:定义堆栈的所在区域。
    (4). 附加段ES:附加的数据段。在80386及其后又增加了FS和GS两个附加数据段寄存器。

  21. 逻辑地址
    (1). 在实模式下逻辑地址即为段地址:偏移地址。物理地址 = 段地址×10H + 偏移地址
    (2). 在保护模式下逻辑地址则由选择器和偏移地址两部分组成。选择器存放在段寄存器中,但它不能直接表示段基地址,而由操作系统通过一定的方法取得段基地址,再和偏移地址相加,从而求得所选存储单元的物理地址。
    1.2 I/O设备的数据传送方式
    1.2.1 CPU与外设

  22. CPU和外部设备的连接:通过硬件接口或控制器相连。

  23. CPU利用输入/输出指令(IN/OUT)与外部设备交换信息。这些信息有以下三种:
    (1). 控制信息:CPU输出到I/O接口,告诉接口和设备要做什么工作。
    (2). 状态信息:CPU从I/O接口输入,表示I/O设备当前的状态。
    (3). 数据信息:双向传输,是I/O设备和CPU真正要交换的信息。
    1.2.2 直接存储器存取DMA方式

  24. 输入/输出的传送方式
    (1). 程序直接控制I/O方式:CPU通过执行程序不断读取并测试外设的状态,如果外设处于准备好状态(输入设备)或者空闲状态(输出设备),则CPU执行输入指令或输出指令与外设交换信息。此为查询式传送方式。也可用无条件传送方式直接与外设交换信息。
    (2). 中断传送方式:利用中断技术对输入/输出进行处理的方式。
    (3). DMA方式:直接存储器存取方式(或称为成组数据传送方式)。
    (4). 通道控制方式:利用I/O协处理器的传送方式。
    (5). I/O处理机方式:利用专门的计算机进行I/O传送的I/O处理机方式。

  25. DMA方式
    (1). DMA控制器或接口一般包括四个寄存器:状态控制寄存器、数据寄存器、地址寄存器和字节计数器,这些寄存器能在信息传送之前进行初始化。每个字节传送后,地址寄存器增1,字节计数器减1。
    (2). 计算机系统完成DMA传送的步骤
    首先由接口发出DREQ信号,请求DMA控制器进行数据传送;
    1). DMA控制器向CPU发出HOLD信号,请求使用总线。
    2). CPU发出响应信号HLDA给DMA控制器,并将总线让出,DMA控制器取得总线控制权。
    DMA控制器向接口发出DACK(DMA应答)信号,启动接口进行数据传送;
    3). 传输数据的存储器地址通过地址总线发出。
    4). 传输的数据字节通过数据总线传送。
    5). 地址寄存器增1。
    6). 字节计数器减1。
    7). 如字节计数器未减1到0,则转向第3步。
    8). 否则,DMA控制器撤销总线请求信号HOLD,CPU收回总线控制权,传送结束。
    1.3 80x86的寻址方式
    1.3.1 与数据有关的寻址方式
    这种寻址方式用来确定操作数地址从而找到操作数。

  26. 立即数寻址方式:操作数直接存放在指令中,紧跟在操作码之后,这种操作数称为立即数。它作为指令的一部分存放在代码段里。如:MOV AL, 6;MOV AX, 300AH;MOV EAX, 2030300AH

  27. 寄存器寻址方式:操作数在寄存器中,指令指定寄存器号。如:MOV AL, AH

  28. 直接寻址方式:操作数的有效地址只包含位移量一种成份,其值就存放在代码段中的指令的操作码之后。位移量的值即操作数的有效地址EA。如:MOV AX, VALUE; MOV AX, [2000H]
    (1). 由此及往下的各种寻址方式的操作数都在除代码段以外的存储区中。用方括号(“[ ]”)括起来的为存储器操作数。寄存器名称外加小括号“( )”表示是该寄存器的内容。
    (2). 有效地址 (effective address, EA):即操作数的偏移地址。自此开始的寻址方式即为求得有效地址(EA)的不同途径。有效地址的计算可以用下式表示:
    EA=基址+(变址×比例因子)+位移量
    有效地址可以由以下四种成分组成:
    1). 位移量(displacement)是存放在指令中的一个8位、16位或32位的数,但它不是立即数,而是一个地址。
    2). 基址(base)是存放在基址寄存器中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。
    3). 变址(index) 是存放在变址寄存器中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。
    4). 比例因子(scale factor)是386及其后继机型新增加的寻址方式中的一个术语,其值可为1、2、4或8。在寻址中可用变址寄存器的内容乘以比例因子来取得变址值。
    (3). 段跨越前缀:80x86允许数据存放在数据段以外的段中,应在指令中用该段寄存器加冒号(“:”)即段跨越前缀来指定该段。只要有BP则隐含的段寄存器为SS。否则隐含的段寄存器为DS。如:MOV AX, ES: VALUE。但是在以下三种情况下,不允许使用段跨越前缀,它们是:
    1). 串处理指令的目的串必须使用ES段;
    2). PUSH指令的目的和POP指令的源必须用SS段;
    3). 指令代码必须存放在CS段中。
    (4). 80x86 CPU中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存储器寻址方式,这就是一个变量常常先要送到寄存器的原因。

  29. 寄存器间接寻址方式:操作数的有效地址只包含基址寄存器或变址寄存器内容一种成份。有效地址就在某个寄存器中,而操作数则在存储器中。可使用段跨越前缀。如:MOV AX, ES: [BX]

  30. 寄存器相对寻址方式(或称直接变址寻址方式):操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,有效地址由两部分组成。可使用段跨越前缀(又称为段超越)。如:MOV ES: STRING[SI], DL

  31. 基址变址寻址方式:操作数的有效地址EA是一个基址寄存器和一个变址寄存器的内容之和。可使用段跨越前缀。如:MOV AX, ES: [BX][SI]

  32. 相对基址变址寻址方式:操作数的有效地址EA是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。可使用段跨越前缀。如:MOV ES: MASK[BX][SI], AX

  33. 端口(输入/输出)寻址方式:一个操作数必须为AX或AL或EAX,另一个用端口直接寻址方式(端口号<256)或端口间接寻址方式(DX的内容为端口号)。如:IN AL, 0ADH ; OUT DX, AX
    附:书上3.1.2所用到的操作符意义:

  34. SHORT:属性操作符,表示段内短程转移。

  35. PTR:属性操作符,建立一个符号地址(取后面内容的地址)。

  36. NEAR:类型操作符,距离类型,段内近程。

  37. FAR:类型操作符,距离类型,段间远程。

  38. WORD:类型操作符,数据类型,字。

  39. DWORD:类型操作符,数据类型,双字。

  40. NEAR PTR:取段内近程地址值操作符。

  41. FAR PTR:取段间远程地址值操作符。

  42. WORD PTR:取字长地址值操作符。

  43. DWORD PTR:取双字长地址值操作符。
    补码及其加减运算

  44. n位补码所表示数的范围:-2 n-1≤N≤2 n-1-1

  45. 双字长数或双精度数:在机器里,为了扩大表数范围,可以用两个机器字(高位字和低位字)来表示一个机器数,这种数称为双字长数或双精度数。在80386及其后则有4字(64位)。
    1.3.2 补码的加法和减法

  46. 求补运算:对一个二进制数按位求反后在末尾加1的运算称为求补运算。
    [X]补 [-X]补 [X]补

  47. 补码的减法运算规则
    [X-Y]补 = [X]补+ [-Y]补
    1.3.3 无符号整数:把最高有效位也作为数值处理的数称为无符号整数。
    1.3.4 字符表示法(ASCII码):80x86机采用目前最常用的美国信息交换标准代码ASCII码表示。
    1.3.5 BCD码:4位二进制数编码的十进制数称为BCD码(又叫8421码)。BCD码是无符号整数

  48. 压缩BCD码:用4位二进制数表示一个十进制数位。

  49. 非压缩BCD码:用8位二进制数表示一个十进制数位
    1.3.6 “异或”运算(XOR)
    Y = B = A XOR B
    所有的逻辑运算都是按位操作的。
    1.4 中央处理机
    1.4.1 中央处理机CPU的组成

  50. CPU的任务是执行存放在存储器里的指令序列。

  51. CPU芯片中除高速缓冲存储器之外,主要由以下三部分组成:
    (1). 算术逻辑部件(arithmetic logic unit,ALU):用来进行算术和逻辑运算。
    (2). 控制逻辑:负责对全机的控制工作。
    (3). 工作寄存器:用来存放计算过程中所需要的或所得到的各种信息。
    1.4.2 80x86寄存器组
    寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。
    ① 程序可见的寄存器是指在汇编语言程序设计中用到的寄存器,分为通用寄存器、专用寄存器和段寄存器3类。
    ② 程序不可见的寄存器是指一般应用程序设计中不用而由系统所用的寄存器。

  52. 通用寄存器
    (1). 数据寄存器:AX、BX、CX、DX,四个16位通用寄存器,用来暂时存放计算过程中所用到的操作数、结果和其他信息。既可以以字形式(如AX)也可以以字节形式(如AH、AL)访问。
    1). AX(accumulator):累加器,算术运算的主要寄存器。所有的I/O指令都使用这一寄存器与外部设备传送信息。
    2). BX(base):通用寄存器,在计算存储器地址时常用作基址寄存器。
    3). CX(count):通用寄存器,在循环和串操作指令中用作隐含的计数器。
    4). DX(data):通用寄存器,在作双字长运算时把DX和AX合在一起存放一个双字长数,DX用来存放高位字。对某些I/O操作,DX用于对I/O端口的寄存器间接寻址。
    (2). 指针及变址寄存器:SP、BP、SI、DI,四个16位寄存器。
    1). SP:堆栈指针寄存器。
    2). BP:基址指针寄存器。
    3). SI:源变址寄存器。
    4). DI:目的变址寄存器。

  53. 专用寄存器:IP、SP、FLAGS,3个16位寄存器。
    (1). IP:指令指针寄存器。存放代码段中的偏移地址。80386及其后继机型则是EIP。
    (2). SP:堆栈指针寄存器,指示栈顶的偏移地址。80386及其后继机型则是ESP。
    (3). FLAGS:标志寄存器,又称为程序状态字寄存器(program status word, PSW)。由条件码标志(flag)、控制标志和系统标志构成。80386及其后继机型则是EFLAGS。
    1). 条件码:用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由CPU自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。
    a. OF:溢出标志(overflow flag)。结果溢出OF=1,否则OF=0。
    b. SF:符号标志(sign flag)。结果为负SF=1,否则SF=0。
    c. ZF:零标志(zero flag)。结果为0时ZF=1,否则ZF=0。
    d. CF:进位标志(carry flag)。最高有效位有进位或借位CF=1,否则CF=0。
    e. AF:辅助进位标志或半进位标志(auxiliary carry flag)。半个字节产生的进位或借位时AF=1,否则AF=0。
    f. PF:奇偶标志(parity flag)。结果低8位中所含的1的个数为偶数时PF=1,否则PF=0。
    2). 控制标志位:为方向标志(direction flag, DF),在串处理指令中控制处理信息的方向用。
    a. DF=1:变址寄存器SI和DI减量,使串处理从高地址向低地址方向处理。
    b. DF=0:变址寄存器SI和DI增量,使串处理从低地址向高地址方向处理。
    3). 系统标志位:可以用于I/O、可屏蔽中断、程序调试、任务切换和系统工作方式等的控制。
    a. TF:陷阱标志(trap flag, TF),又称单步标志。用于调试时的单步方式操作。TF=1时每条指令执行完后产生陷阱(中断),TF=0时不产生陷阱。
    b. IF:中断标志(interrupt flag, IF)。IF=1时允许可屏蔽中断请求,IF=0时禁止可屏蔽中断。
    c. I/O 特权级(I/O privilege level, IOPL),在保护模式下,用于控制对I/O地址空间的访问。
    (4). 标志位的测试:用调试程序DEBUG测试。测试含义见书24页表2.2所示。

  54. 段寄存器:是一种专用寄存器,它们专用于存储器寻址,用来直接或间接地存放段地址。在80286以前的处理器中只有CS、DS、SS、ES四个16位寄存器。

你可能感兴趣的:(笔记)