资源描述
二
Ø 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
Ø TF为陷阱标志位,为1时,每条指令执行后产生陷阱,用于单步调试
Ø 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个段最大最小都是多大,段首地址的特点
Ø 64KB,段不能起于任意地址,而必须从任一小段的首地址开始,每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,3064H ;执行后,(AX)=3064H
Ø 寄存器寻址和寄存器间接寻址的区别
寄存器寻址方式
Ø 操作数在寄存器中,指令指定寄存器号。
Ø 【例】 MOV AX,BX
如指令执行前 (AX)=3064H,(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用+,否则用−
Ø
9
展开阅读全文