
CPU是哪2个部件集成到一个芯片?
运算器,控制器
计算机系统包括哪2个部分?
硬件,软件
计算机软件包括哪2种类型?
系统软件,应用软件
CPU由哪几部分组成?
1、算术逻辑部件(ALU)2、控制逻辑3、工作寄存器
8086的有哪几个通用寄存器?哪些提供了字节访问?
寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。通用寄存器有AX(accumulator)累加器;
BX(base)基址寄存器;
CX(count) 计数器;
DX(data)数据寄存器;
BP(base pointer)基址指针寄存器;
SI(source index)源变址寄存器;
DI(destination index)目的变址寄存器;
其中
AX(accumulator)累加器;
BX(base)基址寄存器;
CX(count) 计数器;
DX(data)数据寄存器;
提供了字节访问
标志寄存器各标志位的含义?IP和SP的含义?
| 标志名 | 标志为1 | 标志为0 |
| OF 溢出(是/否) DF 方向(减量/增量) IF 中断(允许/关闭) SF 符号(负/正) ZF 零(是/否) AF 辅助进位(是/否) PF 奇偶(偶/奇) CF 进位(是/否) | OV DN EI NG ZR AC PE CY | NV UP DI PL NZ NA PO NC |
IP(instruction pointer) 指令指针寄存器;
SP(stack pointer) 堆栈指针寄存器;
FLAGS 标志寄存器。
8086有哪几个段寄存器?
代码段(code segment,CS)、数据段(data segment,DS)、堆找段(stack segment,SS)和附加段(extra segment,ES)4个寄存器。
了解寄存器和存储器的不同
寄 存 器 存 储 器
在CPU内部 在CPU外部
访问速度快 访问速度慢
容量小,成本高 容量大,成本低
用名字表示 用地址表示
没有地址 地址可用各种方式形成
8086是按字编址,对吗
不对,按字节编址
8086的一个字(16位)怎样存入存储器的?
个字存入存储器要占有相继的两个字节,存放时低位字节存入低地址,高位字节存入高地址。
8086的使用存储器地址访问数据时,能根据地址确定数据的大小吗
不能,同一个地址既可看作字节单元的地址,又可看作字单元、双字单元的地址,这要根据使用情况确定。
8086的地址空间是多大?
1MB
1个段最大最小都是多大,段首地址的特点
KB,段不能起于任意地址,而必须从任一小段的首地址开始,每16个字节为一小段。
一个物理地址由段地址和偏移地址组成,这种表示是唯一的吗
不唯一
学会段地址和偏移地址合成物理地址
物理地址 = 16 段地址 + 偏移地址
例:(DS) = 2100H, (BX) = 0500H
(PA) = 21000H+0500H = 21500H
8086实模式下内存最多多大?
1M
三
能识别各种寻址方式,尤其是存储器寻址
与数据有关的寻址方式
1.立即寻址方式
2.寄存器寻址方式
存储器寻址的几个说明
3.直接寻址方式
4.寄存器间接寻址方式
5.寄存器相对寻址方式
6.基址变址寻址方式
7. 相对基址变址寻址方式
与转移地址有关的寻址方式
1.段内直接寻址
2.段内间接寻址
3.段间直接寻址
4.段间间接寻址
理解立即寻址方式
操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。
【例】 MOV AL,5 ;执行后,(AL)=5
【例】 MOV AX,30H ;执行后,(AX)=30H
寄存器寻址和寄存器间接寻址的区别
寄存器寻址方式
操作数在寄存器中,指令指定寄存器号。
【例】 MOV AX,BX
如指令执行前 (AX)=30H,(BX)=1234H;则指令执行后,(AX)=1234H。
寄存器间接寻址方式
有效地址就在某个寄存器中,而操作数则在存储器中。在16位寻址时可用的寄存器是BX,BP,SI和DI。
8086存储器寻址的有效地址如何构成
有效地址可以由以下四种成分组成:
(1)位移量(displacement)是存放在指令中的一个8位、16位或32位的数,它不是立即数,是一个地址。
(2)基址(base)是存放在基址寄存器中的内容。 它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。
(3)变址(index)是存放在变址寄存器中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。
(4)比例因子(scale factor)是386及其后继机型新增加的寻址方式中的一个术语,其值可为1、2、4或8。在寻址中,可用变址寄存器的内容乘以比例因子来取得变址值。这类寻址方式对访问元素长度为2,4,8 字节的数组特别有用。
有效地址的计算可以下式表示:
EA=基址+(变址×比例因子)+位移量
段前缀使用的3个例外情况
(1)串处理指令的目的串必须用ES段;
(2)PUSH指令的目的和POP的源必须用SS段;
(3)指令必须存放在CS段中。
默认段选择规则
双操作数指令的2个操作数可以都是存储器寻址吗
为使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存储器寻址方式。
立即寻址和直接寻址都用到数值,汇编指令中如何区分
立即寻址方式
操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。
直接寻址方式
操作数的有效地址只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值即操作数的有效地址。
了解符号地址的使用方式
可以用符号地址代替数值地址
MOV AX,VALUE
或MOV AX,[VALUE]
寄存器间接寻址使用的寄存器可以是AX吗
不能
有效地址就在某个寄存器中,而操作数则在存储器中。在16位寻址时可用的寄存器是BX,BP,SI和DI。
掌握有效地址有2种以上成分时的各种表示方法
学会使用与转移地址有关的寻址方式
1.段内直接寻址
2.段内间接寻址
3.段间直接寻址
4.段间间接寻址
段内直接寻址方式有哪2种?它符合程序的再定位要求,对吗?段间直接寻址呢?
JMP NEAR PTR PROGIA
JMP SHORT QUEST
其中,PROGIA和QUEST均为转向的符号地址,在机器指令中,用位移量来表示。
在汇编指令中,如果位移量为16位,则在符号地址前加操作符NEAR PTR,如果位移量为8位,则在符号地址前加操作符SHORT。
这种寻址方式的转移指令本身不会发生变化,这是符合程序的再定位要求的
段间直接寻址
在指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作。
【例】 JMP FAR PTR NEXTROUTINT
其中,NEXTROUTINT为转向的符号地址,FAR PTR 则是表示段间转移的操作符。
与地址相关的间接寻址如果使用存储器寻址,为什么要指出是字还是双字?
段间间接寻址
JMP DWORD PTR[INTERS+BX]
段内间接寻址
JMP BX
JMP WORD PTR[BP+TABLE]
MOV指令应注意的细节
CS和IP不能作为操作数,sreg不包括CS
立即数不能做目的操作数
立即数不能直接赋值给段寄存器sreg,需要时可以通过通用寄存器中转
两个存储器单元之间不能直接传送数据,即不能同时做源操作数和目的操作数
两个段寄存器之间不能直接传送数据
目的操作数和源操作数的数据宽度必须一致,即都必须为8位或都必须为16位
理解指令PUSH和POP,注意其格式及使用方法
格式为:PUSH SRC
执行操作(8086为16位指令):
(SP)←(SP)-2
((SP)+1,(SP))←(SRC)
PUSH向SS:SP存数
PUSH CX;若(SP)=2000H,执行指令后,CH与CL的内容分别压入堆栈偏移量为1FFFH与1FFEH的字节单元中,而(SP)=1FFEH
格式为:POP DST
执行操作(8086为16位指令):
(DST)←((SP)+1,(SP))
(SP)←(SP)+2
8086中,PUSH和POP指令只能作字操作,均不影响标志位
POP从SS:SP取数
POP DS;若(SP)=2000H,执行指令后,堆栈中偏移量为2000H与2001H的两字节单元分别送DS低字节和高字节单元中,而(SP)=2002H
8086中,PUSH/POP指令允许的格式:
PUSH/POP reg
PUSH/POP mem
PUSH/POP segreg
segreg不允许使用 CS 寄存器,操作数不允许使用立即数寻址方式(PUSH data)
保存现场时要注意压入与弹出的顺序是相反的,例如:
压入时: push AX
push BX
弹出时: pop BX
pop AX
XCHG指令的2个操作数中必须有一个是寄存器,对不对?
对
学会IN和OUT指令的2种使用形式
IN 输入指令
长格式为:IN AL,PORT(字节)
IN AX,PORT(字)
执行的操作:(AL)←(PORT)(字节)
(AX)←(PORT+1,PORT)(字)
短格式为:IN AL,DX(字节)
IN AX,DX(字)
执行的操作:(AL)←((DX))(字节)
(AX)←((DX)+1,(DX))(字)
PORT为8位地址,DX可指定16位地址
以上针对8086
OUT 输出指令
长格式为:OUT PORT,AL(字节)
OUT PORT,AX(字)
执行的操作:(PORT)←(AL)(字节)
(PORT+1,PORT)←(AX)(字)
短格式为:OUT DX,AL(字节)
OUT DX,AX(字)
执行的操作:((DX))←(AL)(字节)
((DX+1,(DX))←(AX)(字)
以上针对8086
I/O端口取值范围是多少?
0~65535
了解XLAT指令的功能
格式为:XLAT OPR
XLAT
执行的操作(8086为16位指令):
(AL) ← ((BX)+(AL))
将BX中内容与AL中内容相加,作为偏移地址,将数据段中对应字节单元内容送入AL中。BX通常为表格首址,利用该指令实现查表。由于AL只有8位,所以表格长度不能超过256
OPR为表格首地址(一般为符号地址),只为可读性而设置,不真正发挥作用
指令不影响标志位
例: MOV AL,5
MOV BX, OFFSET TAB
XLAT
…
TAB DB 10H 23H 34H 12H 23H 45H 65H 90H 76H
执行指令后,(AL)=45H
例:如(BX)=0040H,(AL)=0FH,(DS)=F000H
指令XLAT把F0000H+0040H+0FH=F004F的内容送AL
最后(AL)=2CH
LEA BX,LIST与 MOV BX,OFFSET LIST完成的功能一样吗
一样
LDS(LES)指令的功能
段寄存器装入指令
LDS/LES
格式:LDS/LES REG,SRC
✓LDS与LES指定的段寄存器分别为DS和ES
✓SRC只能用存储器寻址方式
✓目的寄存器不允许使用段寄存器。
执行的操作: (REG)←(SRC)
(SREG)←(SRC+2)
例:LDS BX,[2000H] ;把内存数据段中偏移量为2000H开始的[2000H]、[2001H]单元内容送BX,[2002H]、[2003H]单元内容送DS
存取标志寄存器的方法有哪些
存取标志寄存器指令
LAHF 标志送AH指令
格式为:LAHF
执行的操作:(AH)←(FLAGS的低字节)
SAHF AH送标志寄存器指令
格式为:SAHF
执行的操作:(FLAGS的低字节)←(AH)
8到16位和16到32的符号扩展使用哪2个命令,如何扩展?
CBW字节转换为字指令
格式:CBW
执行的操作:AL的内容符号扩展到AH,形成AX中的字。
若(AL)<80H,则(AH)=0;若(AL)>=80H,则(AH)=0FFH
CWD字转换为双字指令
格式:CWD
执行的操作:AX的内容符号扩展到DX,形成DX:AX中的双字。
若(AX)<8000H,则(DX)=0;若 (AX)>=8000H,则(DX)=0FFFFH
CBW/CWD常被安排在IDIV指令之前
INC和DEC指令是否影响CF位?
不影响
这个,没办法了,当初的指令就是这么设计的,可能是个 bug, 但就这么一直继承下来的.如果需要影响 CF, 应该用 ADD/SUB xx, 1 指令 另外, INC/DEC 是影响 ZF 位的
加减法指令分哪2种?乘除法指令分哪2种?
ADD加法指令
ADC带进位加法指令
SUB减法指令
SBB带借位减法指令
MUL无符号数乘法指令
IMUL带符号数乘法指令
DIV无符号数除法指令
IDIV带符号数除法指令
理解加减法后CF、OF、ZF、SF如何变化
ADD为不带进位加法指令,将源操作数和目的操作数相加,和保留在目的操作数之中,并改变标志位:CF(通过加法运算是否有进位判断)、OF、SF、PF、ZF和AF
ADC AL,30H[BX];AL中内容加上数据段中[BX+30H]字节内容,再加上CF位原值,结果送AL。如果再有进位,则置位CF,否则CF位清0, 结果还影响标志位:OF、SF、PF、ZF和AF
SUB为不带借位减法指令
若减数>被减数,CF=1,否则CF=0
也可以用二进制补码运算(加法形式)是否有最高位进位判断,有则CF=0,否则CF=1
减1指令DEC将操作数内容减1,都把结果送回操作数中,并根据结果设置除CF以外的标志位,操作数不能为立即数,经常用于修改地址指针
MUL DL;指令完成DL与AL内容的字节乘法运算
MUL WORD PTR [2000H];指的是[2000H][2001H]单元字内容与AX内容进行字乘法运算
对于MUL指令,如果乘积的高一半为0,则CF位和OF位均为0;否则CF位和OF位均为1。
对于IMUL指令,如果乘积的高一半是低一半的符号扩展,则CF位和OF位均为 0,否则就均为1。
DIV执行的操作:
字节操作:(AL)←(AX)/(SRC)的商
(AH)←(AX)/(SRC)的余数
字操作:(AX)←(DX,AX)/(SRC)的商
(DX)←(DX,AX)/(SRC)的余数
IDIV操作方法与DIV相同,但操作数为带符号数。
除法指令对所有条件码位均无定义。
IDIV字节相除时,商的范围是-080H-7FH,字相除时,商的范围是-8000H-7FFFH。如果除数为“0”或商超出累加器的容量,则产生除法错误故障(中断0)
余数的符号和被除数相同
除法运算和CBW,CWD配合使用
理解CMP指令如何完成数的比较
格式:CMPS SRC,DST
CMPSB(字节)
CMPSW(字)
执行的操作:
① ((DS): (SI)) - ((ES): (DI))
②字节操作: (SI)←(SI)±1 (DI)←(DI)±1
字操作:(SI)←(SI)±2(DI)←(DI)±2
DF=0用+,否则用−
