内容要点:x86 ISA,MIPS ISA
构造一台自己的计算机
- 指令格式
第一个字节 | 第二个字节 |
---|---|
xxxx xxxx | xxxx xxxx |
操作码 寄存器号 | 存储单元地址 |
X86体系结构与指令简介
X86体系结构
-
Intel 8086 (1978年)
内部的通用寄存器为16位,即既能处理16位数据,也能处理8位数据
对外有16根数据线和20根地址线,可寻址的内存空间为1MByte()
-
物理地址的形成采用”段加偏移“的方式
<- 控制总线-> CPU <-地址总线 20-bit-> 存储器 <-数据总线 16bit-> -
通用寄存器
- 数据寄存器AX,BX,CX,DX:均为16位寄存器,每个都可分为两个8位寄存器,适用大多数算术运算和逻辑运算指令
-
标志寄存器(标志位两大类)
- 状态标志:反映CPU的工作状态,如执行加法运算时是否产生进位
- 控制标志:对CPI的运行起特定控制作用
-
指令指针寄存器
- 保存一个内存地址,指向当前需要取出的指令
- 当CPU从内存中取出一个指令后,IP会自动增加,指向下一指令地址
- IP寄存器的寻址能力,8086对外有20位地址线,寻址范围:
-
段寄存器
与其他寄存器联合生成存储器地址
-
CS 代码段寄存器(Code Segment) DS 数据段寄存器(Data Segment) ES 附加段寄存器(Extra Segment) SS 堆栈段寄存器(Stack Segment)
-
IA-32体系结构
-
Intel 80386 (1985年)
主频12.5-33MHz,27.5万个晶体管
80X86系列中的第一款32位微处理器
支持32位的算术和逻辑运算,提供32位的通用寄存器
地址总线扩展到32位,可寻址4GB的内存空间
实模式-保护模式-虚拟8086模式
-
- X86-64体系结构
略
X86指令简介
-
指令的主要类别
- 运算类指令:如加、减、乘、除、与、或、非等
- ADD指令(加)
- 格式:ADD DST,SRC
- 操作:DST<-DST+SRC
- ADC指令(带进位的加)
- 格式:ADC DST,SRC
- 操作:DST<-DST+SRC+CF
- INC指令(加1)
- 格式:INC OPR
- 操作:OPR<-OPR+1
- ADD指令(加)
- 传送类指令:如从存储器到通用寄存器,从通用寄存器到I/O接口等
- 作用:把数据或地址传送到寄存器或存储器单元中
- MOV指令(传送)
- 格式:MOV DST,SRC
- 操作:DST<-SRC
- 说明:DST表示目的操作数,SRC表示源操作数,MOV指令把一个操作数从源传送至目的,源操作数保持不变
- 控制类指令:如暂停处理器,清除标志位等
- 作用:控制CPU的功能,对标志位进行操作
- 转移类指令:如无条件转移,条件转移,过程调用等
- 作用:改变指令执行顺序
- 说明:根据是否有判断条件,分为「无条件转移指令」和「条件专业」指令;根据转移目标地址的提供方式,可分为「直接转移」和「间接转移」
- 运算类指令:如加、减、乘、除、与、或、非等
-
指令的运行结果
改变通用寄存器的内容:如
ADD AX,DX
改变存储单元的内容:如
MOV [10H],CX
改变标志位:如产生进位
改变指令指针:如
JMP [BX]
改变外设端口的内容:如访问显示端口
其他...
MIPS体系结构
-
全称:Microprocessor without Interlocked Piped Stages
-
主要关注点
- 减少指令的类型
- 降低指令复杂度
基本原则:A simpler CPU is a faster CPU
-
MIPS指令主要特点
固定的指令长度
简单的寻址模式
指令数量少,指令功能简单(一条指令只完成一个操作)
只有Load和Store指令可以访问存储器
需要优秀的编译器支持
-
-
MIPS指令简介
-
基本格式:
R:Register,寄存器
I:Immediate,立即数
J:Jump,无条件转移
-
运算指令 | add rd, rs, rt sll rd, rt, shamt | addi rt, rs, imm slti rt, rs, imm | / |
---|---|---|---|
访存指令 | / | lw rt, imm(rs) sw rt, imm(rs) | / |
分支指令 | jr rs | beq rs,rt, imm | j addr |
R型指令 | I型指令 | J型指令 |
Quiz [1]
-
下列关于CISC和RISC的描述错误的是?
A、CISC指令长度是不固定的
B、CISC指令的操作数必须预存于寄存器中
C、RISC指令长度是固定的
D、RISC指令的操作数必须预存于寄存器中
E、RISC架构的指令种类通常比CISC架构更少
RISC:Reduced Instruction Set Computer,精简指令系统计算机
减少指令的类型,降低指令复杂度
CISC:Complex Instruction Set Computer,复杂指令系统计算机 -
下列关于Intel处理器及其推出时间描述错误的是?
A、Intel 8086——1978年
B、Intel 80286——1982年
C、Intel 80386——1988年
D、Intel Pentium——1993年
E、Intel PentiumPro——1995年
F、Intel Core i7——2008年
G、Intel Core 2——2006年
Intel 80386——1985
-
x86体系结构中,寄存器EAX长度为多少位? 32位
x86体系结构中,寄存器AX长度为多少位? 16位
-
IA-32寄存器模型中包括以下哪些寄存器?(多选题)
A、通用寄存器
B、指令指针寄存器
C、页面寄存器
D、标志寄存器
E、段寄存器
-
8086系统中标志位CF的含义是? Carry Flag
8086系统中标志位ZF的含义是? 零标志(Zero Flag)
8086系统中段寄存器DS的含义是?数据段寄存器(Data Segment)
8086系统中段寄存器CS的含义是?代码段寄存器(Code Segment)
ES:附加段寄存器(Extra Segment)
SS:堆栈段寄存器(Stack Segmeny)
-
设CS=2500H,DS=2400H,SS=2430H,BP=0200H,SI=0010H,DI=0206H,计算下列x86指令源操作数的物理地址:
MOV AX,[2000H]
*26000H*物理地址 = DS:2000H = 2400H16(左移4位)+2000H = 24000H + 2000H = 26000H
CS(CodeSegment):存放当前正在运行的程序代码所在段的段基址16 + IP存放的偏移量 = 指令的物理地址。设CS=2500H,DS=2400H,SS=2430H,BP=0200H,SI=0010H,DI=0206H,计算下列x86指令源操作数的物理地址:
MOV AX,[BP+SI+4]
*24514H*2430H * 16 + 0200H + 0010H + 4H = 24300H + 0214H = 24514H
设CS=2500H,DS=2400H,SS=2430H,BP=0200H,SI=0010H,DI=0206H,计算下列x86指令源操作数的物理地址:MOV AX,[DI+100H] *24306H*
2400H * 16 +0206H +100H = 24000H +0306H = 24306H
-
下列x86指令中,哪些属于算术运算指令?
A、ADD
B、DEC
C、MOV
D、IN
E、LEA:Load Effective Address
I、CALL:调用子程序
J、JNZ:条件转移指令
K、LOOP
L、MUL:无符号乘法
-
下列关于MIPS指令的主要特点说法错误的是?
A、指令长度固定
B、寻址模式简单
C、只有Load和Store指令可以访问存储器
D、需要优秀的编译器支持
E、指令数量多,且功能复杂
-
MIPS按照指令的基本格式可以分为三种类型,以下不属于这三种类型的是?
A、R型指令
B、I型指令
C、J型指令
D、O型指令
-
某MIPS指令的机器码是0x20A5FFFF,对应的汇编指令是什么? *addi $a1,$a1,-1*
二进制数均以补码的形式存放在计算机中
正数:补码 = 原码
负数:补码 = 除符号位,原码剩余每位取反,末位+1
FFFF= 1111 1111 1111 1111 为补码形式,化为原码
1111 1111 1111 1110
1000 0000 0000 0001 = -1
0010(2) 0000(0) 1010(A) 0101(5) 1111 1111 1111 1111(FFFF) =>可知为I型
001000(op = 8 = addi) 00101(rs = 5 = a1) 1111 1111 1111 1111(immediate = -1)
某MIPS指令的机器码是0x0005402A,对应的汇编指令是什么? *slt $t0,$0,$a1*
0000 0000 0000 0101(5) 0100(4) 0000 0010(2) 1010(A)
000000(R型指令) 00000(rs = 0 = a1) 01000(rd = 8 = $t0) 00000 101010(可知指令类型为slt )
-
阅读下面的x86汇编程序,回答问题。
设DS=1000H
MOV SI, 1250H
MOV DI, 1370H
MOV CL, 3
MOV AX, DS
MOV ES, AX
MOV BX, 5
STD
REP MOVSB
请问,在这次串传送操作中,完成了第一个元素的传送后,SI寄存器的值是什么? **124FH*
STD(DF置为1,从源串的高位开始传送)
源串地址:DS:SI = 1000H * 16 + 1250H = 11250H
因为是从高位开始传送,传送完一个元素后,SI与DI自动减1
11250H = 112 0101 0000 (不够减向前借2)- 0001 = 112 4 F
阅读下面的x86汇编程序,回答问题。
设DS=1000H
MOV SI, 1250H
MOV DI, 1370H
MOV CL, 3
MOV AX, DS
MOV ES, AX
MOV BX, 5
CLD
REP MOVSB
请问,这次串传送操作,总共传送了多少个字节的数据? 不确定
-
如果想用8086 CPU把内存中某个区域的1024个字节的数据传送到另一个区域,可以选用如下三种方法:
(1)只使用传送指令(MOV);
(2)使用传送指令(MOV),并用条件转移指令建立循环语句的结构;
(3)使用串传送指令(MOVSB)以及必要的配合指令,不使用循环语句的结构。
请比较用这三种方法编写的程序,执行时访问存储器次数最少的是:方法三
请比较用这三种方法编写的程序,执行时访问存储器次数最多的是:方法二
请比较用这三种方法编写的程序,程序代码占用存储器空间最大的是:方法一
-
很多x86指令的功能比较复杂,往往一条x86指令可以完成的功能,需要多条MIPS指令才能实现。请问下列x86指令中,哪些确定能够只用一条MIPS指令完成对应的功能?(注:只需考虑这条指令本身,不用考虑对后续指令的影响)
A、ADD ECX, 15H
B、MOV EAX, 28H
C、ADD EDX, EBX
D、ADD EAX, [13H]
E、MOV EDX, [EBX+11H]
F、ADD [EBX+ESI*4+200H], EAX
G、REP MOVSB
H、JZ LOOP_1
D/E/F (访寸需要额外的指令)