计组笔记
汇编部分
-
通用寄存器(General Registers):
- AX (Accumulator): 用于累加运算,也是乘法和除法的默认寄存器。
- BX (Base Register): 可以用作一个基址寄存器,通常用于存放数据的基地址。
- CX (Counter Register): 通常用于循环计数。
- DX (Data Register): 用于 I/O 操作和一些乘法与除法的高位。
-
指针和索引寄存器(Pointer and Index Registers):
- SI (Source Index): 用于源数据的地址偏移,通常在字符串操作中使用。
- DI (Destination Index): 用于目标数据的地址偏移,通常在字符串操作中使用.
- SP (Stack Pointer): 用于指向栈顶。
- BP (Base Pointer): 用于指向栈底。
-
段寄存器(Segment Registers):
- CS (Code Segment): 代码段寄存器,操作系统决定,不能作为目的操作数,只能作为源操作数。
- DS (Data Segment): 数据段寄存器,只能接受寄存器赋值,不接受内存或立即数直接赋值。
- ES (Extra Segment): 附加数据段寄存器。
- SS (Stack Segment): 栈段寄存器。
-
标志寄存器(Flag Register):
- FLAGS (Flags Register): 存储条件码和一些处理器状态标志,如零标志、进位标志等。
程序员可见的寄存器:13个通用寄存器
常用汇编指令
-
MOV (Move):
用于将数据从一个地方移动到另一个地方
eMOV AX, 5 # 将立即数5加载到寄存器AX MOV BX, AX # 将寄存器AX的值移动到寄存器BX MOV [DI], CX # 将寄存器CX的值存储到内存地址DI中 ##注意易错 MOV [AX], [BX] #不能两次访存 MOV CS,AX #不能修改CS,CS由操作系统分配 MOB DS,DATA #不能直接对段寄存器赋值,只能用寄存器赋值 如MOV AX,1000 MOV DS,AX
-
ADD (Addition):
用于将两个数相加。
ADD AX, BX #将寄存器AX和BX的值相加,结果存储在AX中 ADD [SI], 10 # 将内存地址SI中的值与立即数10相加,结果存储回SI中
-
SUB (Subtraction):
用于将一个数减去另一个数。
SUB AX, BX ; 将寄存器AX减去BX的值,结果存储在AX中 SUB [DI], 5 ; 将内存地址DI中的值减去立即数5,结果存储回DI中
-
MUL(Multiply)
相乘
MOV AX, 10 #被乘数 MOV BX, multiplier#乘法因子 MUL BX #AX = AX * BX 此时 AX 中存储了结果,高位在 DX 中
mul AX,BX #AX=AX*BX
-
DIV(Divide)
相除
MOV AX, 10 #被除数 MOV BX, divisor #除数 DIV BX #AX = AX / BX, DX = AX % BX
-
CMP (Compare):
用于比较两个数的大小,设置标志位以便后续的条件跳转指令。
CMP AX,BX; 比较AX和BX的值,设置相应的标志位
-
LOOP
MOV CX , 10 #用cx作为循环计数器 LOP: #待做操作 LOOP LOP #cx--,若cx!=0,跳转到LOP
-
JMP (Jump):
用于无条件跳转到指定的地址。
JMP Label ; 无条件跳转到标签Label处
-
JE, JNE, JG, JL (Jump if Equal, Jump if Not Equal, Jump if Greater, Jump if Less):
用于根据先前的比较结果有条件地跳转到指定的地址。
JE Label ; 如果相等,则跳转到标签Label处 JNE Label ; 如果不相等,则跳转到标签Label处 JG Label ; 如果大于,则跳转到标签Label处 JL Label ; 如果小于,则跳转到标签Label处
MOV AL, [variable] CMP AL, 5 ; 比较 AL 和 5 JE equal_label ; 如果相等,跳转到 equal_label ; 其他操作 JMP end_label ; 如果不相等,跳转到 end_label equal_label:; 相等时执行的操作 end_label:; 其他操作
-
INC, DEC (Increment, Decrement):
用于增加或减少寄存器或内存中的值。
INC AX ; 将寄存器AX的值加1 DEC [SI] ; 将内存地址SI中的值减1
-
移位操作
SHR LX,1 #逻辑右移一位,最高位补0(Shift Right)-->无符号数*2 SHL LX,1 #逻辑左移一位,最低位补0(Shift Left)-->无符号数/2 ROR LX,1 #循环右移一位,被移出的会重新出现在最高位(Rotate Right) ROL LX,1 #循环左移一位,被移出的会重新出现在最低位(Rotate Left) SAR LX,1 #算数右移一位,最高位用符号位填充(Shift Arithmetic Right)-->有符号数*2 SAL LX,1 #算数左移一位,最低位用0位填充和SHL一致(Shift Arithmetic Left)-->有符号数/2
-
OUT
MOV DX, 0x80 #将端口地址加载到 DX 寄存器 MOV AX, 0x42 #要发送的数据加载到 AX 寄存器 OUT DX, AX #将 AX 寄存器中的数据发送到端口 DX 只能使用两个寄存器作为端口
-
CALL, RET (Call, Return):
用于调用和返回子程序。
CALL Subroutine ; 调用子程序 RET ; 返回
示例:
1.选择结构
2.循环结构
必背大题
CPU与指令
问:比较组合逻辑控制和微程序控制的优缺点及应用场合。(5分)
答:组合逻辑控制和微程序控制是用来控制如何产生微命令的两种方式。
组合逻辑控制方式是直接通过逻辑门电路产生微命令的,因而它的主要优点是产生微命 令的速度很快。其主要缺点有两点:其一是设计不规整,因而难于实现设计自动化;其二是 采用硬连逻辑,不易修改和扩展指令系统的功能。组合逻辑控制方式主要用于高速计算机或 小规模计算机中。
微程序控制方式是通过执行微指令来产生微命令的,主要优点如下: ① 设计规整,设计效率高; ② 易于修改、扩展指令系统功能; ③ 结构规整、简洁,可靠性高; ④ 性价比高。 其主要缺点是:产生微命令的速度慢,因为要多次访问控存读取微指令,访存速度限制 了产生微命令的速度;另外,机器的执行效率不高,因为微指令格式较简单,没有充分发挥 数据通路本身所具有的并行能力。微程序控制方式主要用于速度要求不高、功能较复杂的机 器中,特别适合于系列机。
问:简述指令流水线的工作原理。(5分)
答:为提高处理器执行指令的效率,把一条指令的操作过程分成若干个子过程,且每个子过程都在专门功能电路上完成,这样指令的各子过程就能同时运行,指令的平均执行时间也能大大减少。
问:什么叫寻址方式?常用的寻址方式有哪些?(5分)
答:寻址方式是指寻找指令中操作数所在地址的方法。(1分) 常用的寻址方式有:立即寻址.直接寻址.寄存器寻址.寄存器间接寻址.变址寻址.基址加变 址.隐含寻址等。(每项1分,答对4项以上得4分)
问:什么是汇编的逻辑地址?它由哪两部分组成?8086 的物理地址是如何形成的? (5分)
答:逻辑地址是将存储器分成若干个段之后而出现的一种地址形式,它由段地址和偏移地址 组成。物理地址是将逻辑地址中的段地址左移 4 个二进制位,再加上偏移地址而形成的。
问:简述程序中指令和伪指令的区别。(5分)
答:指令是能被计算机识别并执行的二进制代码,它规定了计算机能完成的某一操作。伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
问:简化地址结构的基本途径是什么?
答:在指令中减少显地址的数量,即使用隐地址方式给出地址,指令中的地址(段)个数就可减少。
问:减少指令中一个地址信息的位数的方法是什么?
答:采用寄存器寻址、寄存器间址等以寄存器为基础的寻址方式可以大大减少指令中一个地址的信息位数
问:试比较超标量和超流水的异同点。
答:超标量流水线值在一个处理器中针对同一种功能,设置多条并存的流水线。在每个时钟周期中可向流水线发射多条同一类指令,也能从流水线中流出多个处理结果。超流水线以增加流水线级数的方法来缩短机器周期,使相同时间内超流水线能执行更多的机器指令。
存储
问:请简述计算机系统中的三级存储体系结构模式,并分析这种模式的优点和缺点。(5分)
**答:**三级存储体系包括缓存(cache)、内存和外存,这种模式的优点是层次体系清晰、便于设计实现,也利于系统调度管理,能提高存储系统性能;缺点是结构复杂,管理和控制都比较复杂,硬件成本高。
问:SRAM 和 DRAM 分别依靠什么原理存储信息?需要刷新吗?
答:SRAM 即静态半导体存储器,静态半导体存储器中的一位存储单元,实际上是一个双稳态触发器,靠交叉反馈存储信息。
DRAM 即动态半导体存储器则是靠电容电荷存储信息,如电容上有电荷代表存放的信号1,电容无电荷为存放的信号 0。
SRAM 不需要刷新,而 DRAM 则需要刷新。
问:主存和Cache之间的映射方式有哪几种?请简述每种方式的基本思想。(5分)
答:主要有直接映射、全相联映射和组相联系映射。
直接映射:CACHE不分组而主存分组,每组包含的数据块数量等于CACHE的数据块数。主存映射到CACHE时,组内序号为K的数据块可映射到CACHE中序号为K的数据块位。
全相联映射:CACHE和主存均不分组,主存的第K个数据块可自由映射到CACHE中的任意数据块位;
组相联映射:CACHE和主存均分组,且主存各组包含的数据块数等于CACHE分组后的组数,主存某组内第K个数据块可映射到CACHE第K组任意一个块位。
总线与输入输出
问:I/O接口的主要功能有哪些?(5分)
答:外设寄存器寻址;数据传输和缓冲;数据格式变换等;产生中断及代码请求等控制逻辑功能。
问:在DMA的初始化阶段中,主要应完成哪些任务?
答:(1)向接口送出I/O设备的寻址信息。例如,要从磁盘中读出一个文件,则需送出该文件所在磁盘的驱动器号、圆柱面号、磁头号(记录面号)、起始扇区号(或数据块号)。
(2)向DMA控制器送出控制字,主要是数据的传输方向,输入主存还是从主存输出。
(3)向DMA控制器送出主存缓冲区首地址。数据的输入或输出,往往需在主存储器中设置相应的缓冲区,这是一段连续的存储区,为此在初始化时送出其首地址。
(4)向DMA控制器送出交换量,即数据的传输量。视设备的需要,传输量可以是字节数、字数、数据块数。
问:对 I/O 设备的编址方法有哪几种?请简要解释。
答:对 I/O 设备的编址方法实际上就是对 I/O 接口中有关寄存器及相应部件的编址方法,有两大类型。
① 外围设备单独编址。早期是为每台 I/O 设备分别分配一个设备码,每个设备下属 n 个接口寄存器,在 I/O 指令中给出设备码,指明接口的哪个寄存器,从而实现 CPU 对外设的访问。现在普遍采用为各 I/O 接口的每个有关寄存器分别分配一种 I/O 端口地址,指令中给出端口地址,也就知道 CPU 访问哪一台设备及其接口寄存器。
② 外围设备与主存统一编址。将各 I/O 接口中的有关寄存器与主存的各编址单元统一编址,为它们分配统一的总线地址。在传送指令中给出这类总线地址,CPU 就可以访问相应的 I/O 设备及其接口寄存器。
问:I/O 指令的设置方法有哪几种?请简要解释。
答:通常有三类常见的 I/O 指令设置方法。
① 在指令系统中设置专门的 I/O 指令,可对外围设备单独分配设备码,或给 I/O 接口的有关寄存器分配专门的端口地址,这种 I/O 指令称为显式 I/O 指令。
② 采用通用的数据传送指令实现 I/O 操作,相应地将外围设备接口的有关寄存器与主存统一编址。这种 I/O 指令是隐含在传送指令中,所以又称为隐式 I/O 指令。
③ 通过 I/O 处理器(或 I/O 处理机)控制 I/O 操作。这种方式下,I/O 指令可分为两级:CPU 调用 IOP 的指令和 IOP 本身的指令。
问:I/O 指令的设置方法有哪几种?请简要解释。
答:通常有三类常见的 I/O 指令设置方法。
① 在指令系统中设置专门的 I/O 指令,可对外围设备单独分配设备码,或给 I/O 接口的有关寄存器分配专门的端口地址,这种 I/O 指令称为显式 I/O 指令。
② 采用通用的数据传送指令实现 I/O 操作,相应地将外围设备接口的有关寄存器与主存统一编址。这种 I/O 指令是隐含在传送指令中,所以又称为隐式 I/O 指令。
③ 通过 I/O 处理器(或 I/O 处理机)控制 I/O 操作。这种方式下,I/O 指令可分为两级:CPU 调用 IOP 的指令和 IOP 本身的指令。