1、第 1 章 进制及码元1、进制转换129= 81H= 10000001B=201Q298= 12AH= 100101010B=452Q1000= 3E8H= 1111101000B= 1750Q5DH= 1011101 B= 135 Q= 93 D3E8H= 1111101000 B= 1750Q= 1000 D;357Q=11101111 B= 0EF H= 239 D2、进制计算10010110 2FE3 F7,-119 FFF7,-32759 4 73、数据表示范围:一个字节的无符号数表示范围为 0255,有符号数补码表示范围为-l28 +127。两个字节的无符号数表示范围为 06553
2、5,有符号数补码表示范围为 32768+32 767。N 位二进制数的无符号数表示范围为 0(2 N-1),有符号数(补码)表示范围为-2 N-1(2 N-1-1).4、35H 代表的 ASCII 字符为 5,代表十六进制数时等价的十进制值为 53 ,代表压缩 8421BCD 码等价的十进制值为 35 ,代表非压缩 8421BCD 码等价的十进制值为 5。5、FFH 代表无符号数时等价的十进制值为 255 ,代表补码有符号数时等价的十进制值为 一 1 ,代表反码有符号数时等价的十进制值为 一 0 ,代表原码有符号数时等价的十进制值为一 l27。6、20 的 8 位二进制补码为 ECH ,原码为
3、 94H ,反码为 EBH 。158 的 16 位二进制补码为 009EH,原码为 009EH ,反码为 009EH 。7、英文字符一般在计算机内占用(1)个字节,每个字节的最高位一定为 0 ,全角英文字符在计算机内占用 2 个字节,一个汉字在计算机内占用 2 个字节,每个字节最高位为 1 。8、设阶码用 8 位补码表示,尾数部分用 16 位补码表示,则(1/32+1/128+1/512)的尾数部分及阶码分别为多少?第 2 章 微机硬件基础1、请画出计算机系统硬件图。2、8086/88CPU 为什么要分为 BIU 和 EU 两大模块?答:为了使取指和分析、执行指令可并行处理,提高 CPU 的执
4、行效率。8086/88CPU 有两大模块总线接口单元 BIU 和执行单元 EU 组成。3、简述 8086/88 CPU 的两大模块 BIU 和 EU 的主要功能及组成。答:如下图所示:4、简述 8086/88 CPU 的 14 个寄存器的英文名、中文名及主要作用。答:AX(Accumulat or)(AH、AL)累加器,它是汇编编程中最常用的一个寄存器,主要用于乘除运算、BCD 运算、换码、IO 操作、串操作、中断调用等。BX(Base)(BH、BL)基址寄存器,主要用于存放地址、基址(默认相对于 DS段)等。CX(Counter)(CH、CL)计数器,主要用于循环计数、串操作计数、移位计数(
5、CL)等。DX(Data)(DH、DL)数据寄存器,主要用于 l6 位乘除、问接 IO 、中断调用等。BP(Base Pointer)基址指针,主要用于存放地址、基址(默认相对于 SS 段)等。SP(Stack Pointer)堆栈指针(栈顶指针),主要用于存放栈顶地址。SI(Source Index)源变址寄存器,用于存放地址、变址、串操作源变址。DI(Destination Index)目的变址寄存器,用于存放地址、变址、串操作目的变址。CS(Code Segment)代码段寄存器(代码段),用于存放正在或正待执行的程序段的起始地址的高 l6 位二进制数据,即程序段的段地址。 ,DS(Da
6、ta Segment)数据段寄存器(数据段),用于存放正在或正待处理的一般数据段的起始地址的高 l6 位二进制数据,即一般数据段的段地址。ES(Extra Segment)附加数据段寄存器(附加段),用于存放正在或正待处理的附加数据段的起始地址的高 l6 位二进制数据,即附加数据段的段地址。SS(Stack Segment)堆栈数据段寄存器(堆栈段),用于存放正在或正待处理的堆栈数据段的起始地址的高 l6 位二进制数据,即堆栈数据段的段地址。IP(Instruction pointer)指令指针,它的内容始终是下一条待执行指令的起始偏移地址,与 CS 一起形成下一条待执行指令的起始物理地址。C
7、S :IP 的作用是控制程序的执行流程。IP 一般会自动加 l(逻辑加 1、实际随指令长度变化)移向下一条指令实现顺序执行;若通过指令修改 CS 或 IP 的值,则可实现程序的转移执行。PSW(Program Status word)程序状态字,它其中有三个控制标志(IF、DF、TF)和 6 个状态标志(SF 、PF、ZF、OF 、CF、AF)。控制标志是用于控制 CPU 某方面操作的标志,状态标志是部分指令执行结果的标志。5、请画出 8086/88 CPU 的内部结构图。答:如下图所示:6、请说明 8086/88 CPU 的标志位的英文名、中文名及填充方法。答:IF(Int errupt E
8、nable Flag)中断允许标志,用于控制 CPU 能否响应可屏蔽中断请求,IF=1 能够响应,IF=0 不能响应。DF(Direction Flag)方向标志,用于指示串操作时源串的源变址和目的串的目的变址变化方向,DF-1 向减的方向变化,DF=0 向加的方向变化。TF(TrapFlag)陷阱标志(单步中断标志),TF=1 程序执行当前指令后暂停,TF=0 程序执行当前指令后不会暂停。SF(Sign Flag)符号标志,指令执行结果的最高二进制位是 0 还是 l,为 0,则 SF=0,代表正数;为 l,则 SF=1,代表负数。我们一般是用十六进制数表示,则可以根据十六进制的最高位是落在
9、O7 还是落在 8F 之间,若落在 07之间则 SF=0否则 SF=1。PF(Parity ChECk Flag)奇偶校验标志,指令执行结果的低 8 位中 1 的个数是奇数个还是偶数个,若为奇数个则 PF=0,若为偶数个则 PF=1。ZF(Zero Flag)零标志,指令执行结果是不是为 0,若为 0 则 ZF=1,否则ZF=0。OF(Overflow Flag)有符号数的溢出标志,指令执行结果是否超出有符号数的表示范围,若超过则 0F=1,否则 OF=0。我们可以通过判断是否出现以下四种情况之一:正加正得负,正减负得负,负加负得正,负减正得正。若出现则0F=1否则 OF=0CF(Carry
10、Flag)进位借位标志无符号数的溢出标志 ),指令执行结果的最高位是否有向更高位进位或借位,若有则 CF=1,同时也代表无符号数溢出;若无则 CF=0,也代表无符号数未溢出。AF(Auxiliary Carry Flag)辅助进位借位标志,低 4 位二进制是不是有向高位进位或借位,若有则 AF=1,否则 AF=0,其主要用于 BCD 修正运算。7、内存分段组织的优缺点是什么?答:优点如下:(1)80868088 CPU 中的寄存器只有 16 位,如果采用它们直接寻址,则寻址能力势必限制在 64 KB 范围内,而采用分段组织可以较好地实现扩展 CPU 的寻址能力。每段的大小可达 64 KB,不同
11、段的组合则可寻址更大的范围。 (2)使程序与数据相对独立,不同存取方式的数据也相对独立。程序:存放于代码段 CS 中堆栈方式:存放于堆栈段 SS 中数据:随机方式:存放于数据段 DS 及附加段 ES 中(3)便于程序和数据的动态装配,从一个地方挪到另外一个地方只要更改一下段寄存器的值即可,段内偏移可以不用改变。缺点:内存地址采用分段组织增加地址计算的复杂度,降低了 CPU 的执行效率。8、1MB 内存最多可以有(64K)个不同的段地址,若不允许重叠的话最多可有(16)个不同的段地址。不同的段间(可以)重叠。9、设 DS=26FCH,BX=108H,SI=9A8H,试求出使 DS:BX 与 ES
12、:Sl 指向同一物理地址的 ES 值。 答:即 DS:BX=ES:SIDS:BX=DS l6+BX=26FCH16+108H=270C8HES:SI=ES16+SI=ES16+9A8HES=(270C8H 一 9A8H)l6=2672H10、接口、端口以及端口地址之间的对应关系如何?答:一个计算机系统内有很多接口,一个接口内一般有多个端口,一个端口可以有多个端口地址与其对应(这叫重叠地址),一个端口地址可以对应多个端口(但需要继续区分才能访问,如读写顺序、读写信号、数据位、索引区分)。所以通过端口传输信息首先需要区分端口,区分端口可通过端口地址不同来区分。11、访问端口有哪些方法?答:(1)用
13、 I/O 指令实现信息传输;(2)通过 BIOS 中断调用实现信息传输;(3)通过 DOS 中断调用实现信息传输。12、请根据图 2.3 说明 ADD AX, BX 指令的取指及执行过程。自己看书13、8086/88 的 20 位物理地址是怎样形成的?当 CS=2000H, IP=0100H, 下一条待执行指令的物理地址等于多少?答:20 位物理地址由段地址左移 4 位加偏移地址形成,下一条待执行指令等于CS*10H+IP 得到 20100H。14、已知当前数据段位于存储器的 B1000H 到 BF0FFH 范围内,请指出 DS 段寄存器的取值范围。答:DS 段寄存器的取值范围:AF10HB1
14、00H第 3 章寻址方式及指令系统1、指令是 CPU 可以理解并执行的操作命令,指令由操作码和操作数两部分组成,指令有两个级别,即机器级和汇编级。2、请画出程序执行流程示意图。3、指令主要有哪些分类方式及其主要类别是什么?答:指令分类有不同的方式。按操作数的个数将指令分为零地址指令(无操作数)、一地址指令(只有一个操作数)、二地址指令(有两个操作数)、多地址指令(多于两个操作数);按指令级别分为机器指令和汇编指令:按是否转移分为转移指令和顺序指令;按功能分为七大类:传送类、算术运算类、位操作类、IO 类、串操作类、CPU 控制类、转移类;按指令长度(即指令占用的字节数)分为 l 字节指令、2
15、字节指令等,80868088 指令长度是不同的,叫变字长,不同的指令有不同的指令长度,从 16 字节均有;按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要) ,类似功能的指令内部指令比外部指令执行速度快,所以在编程时尽量采用内部指令即多用寄存器优化程序。4、操作数的寻址方式有哪些?并举例说明其主要特点。答:操作数寻址方式主要有立即寻址方式、寄存器寻地址、存储器寻址方式、端口寻址方式 4 类。(1)立即寻址方式:操作对象是这个操作数本身,MOV AL,5(2)寄存器寻地址:操作对象是寄存器中的内容 MOV AX,BX(3)存储器寻址方式:操作对象是内存地址所对应的存
16、储单元中的内容,MOV AX 2000H (4)端口寻址方式:操作数是指明端口的地址、端口地址所对应的端口中的内容是操作对象 IN AX,46 直接寻址。5、内存寻址中段寄存器与段内偏移地址对应关系如何?6、设CS=1000H,DS=2000H,ES=3000H,SS=4000H,IP=100H,SP=200H,BX=300H,BP=400H,SI=500H,则下一条待执行指令的物理地址为多少 ?当前栈顶的物理地址为多少? BX 代表的存储单元的物理地址为多少?BP代表的存储单元的物理地址为多少?ES:BX+SI代表的存储单元的物理地址为多少?答:下一条待执行指令的物理地址=CS16+IP=1
17、000H16+IOOH=10100H。当前栈顶的物理地址=SS16+SP=4000H16+200H=40200H 。BX 代表的存储单元物理地址=DS16+BX=2000H X l6+300H=20300H。BP代表的存储单元物理地址=SS X l6+BP=4000H16+400H-40400H。ES: BX+SI代表的存储单元物理地址=ES16+BX+SI=3000H16+300H+500H=30800H 7、试根据以下要求,分别写出相应的汇编语言指令。(1)以寄存器 BX 和 DI 作为基址变址寻址方式把存储器中的一个字送到 DX 寄存器。答:MOV DX,BX+DI(2)以寄存器 BX
18、和偏移量 VALUE 作为寄存器相对寻址方式把存储器中的一个字和 AX 相加,把结果送回到那个字单元。答:ADD VALUEBX,AX(3)将 1 字节的立即数 0B6H 与以 SI 作为寄存器间接寻址方式的字节单元相比较。答:CMP BYTE PTRSI,0B6H(4)将 BH 的高 4 位与低 4 位互换。答:MOV CL,4ROR BH,CL ;或者 ROL BH,CL(5)测试 BX 的第 3、7、9、12、13 位是否同时为 0。答:TEST BX,3288H ;0011001010001000B(6)将存放了 09 数值的 DL 寄存器中的内容转化为相应的09的字符。答:ADD D
19、L,30H ;或者 OR DL,30H(7)将存放了 AF字符的 AL 寄存器中的内容转化为相应的数值。答:SUB AL,37H8、写出清除 AX 寄存器的多种方法并比较(要求单指令实现) 。答:(1)AND AX,0 ;可以对 AX 清零,还可以清除进位位和影响到SF、ZF、PF 标志位。(2)MOV AX,0 ;此条指令占用 3 个字节。(3)SUB AX,AX ;减法指令, 该条指令只占用 2 个字节。(4)XOR AX,AX9、分别用存储器的 5 种寻址方式实现将以 A 为首址的第 5 个字(注意:从第0 个算起)送 AX 的指令序列。10、指出下列指令错误的原因。答:(1)MOV C
20、L,300 ;300 超过字节数据表示范围(2)MOV CS,AX ;CS 不能作为目的操作数(3)MOV BX,DL ;数据类型不匹配(4)MOV ES,1000H :立即数不能送给段寄存器(5)INC BX ;数据类型不明确 (6)ADD AX,DS :段寄存器不能参加运算(7)TEST BX,CX ;存储器间接寻址只能使用 BX、Sl、Dl、BP四个之一(8)SUB BX,BP+SI ;加减两个操作数不能同时为存储操作数(9)JC SI ;条件转移只有短转移寻址方式(10)SHL BX ;少给一个表明移位次数的操作数,l 或 CL11、 (1)CS=(1000)IP=(0155)(2)C
21、S=(1000)IP=(176F)(3)CS=(1000)IP=(17C6)(4)CS=(2000)IP=(0146)(5)CS=(1000)IP=(1770)(6)CS=(2000)IP=(0146)12、分别说明下列各组指令中的两条指令的区别。答:(1)MOV AX,TABLE LEA AX,TABLE假设 TABLE 为字变量名,则:左为将 TABLE 单元的内容送 AX,右为将TABLE 单元的偏移地址送 AX。假设 TABLE 为字节变量名,则:左为错误指令,右为将 TABLE 单元的偏移地址送 AX假设 TABLE 为常量名,则:左为将 TABLE 的内容送 AX,右为错误指令(2
22、)AND BL,0FH OR BL,0FH左为将 BL 的高 4 位清 0,右为将 BL 的低 4 位置 1(3)JMP SHORT Ll JMP NEA RPTR Ll左为短转移,2 字节的指令,转移范围为一 l28+127右为近转移,l 字节的指令,转移范围为-32 768+32 767(4)MOV AX,BX MOV AX,BX左为将 BX 的值送 AX右为将 BX 的值作为相对 DS 段的内存单元偏移地址,取出字单元值送 AX(5)SUB DX,CX CMP DX,CX左为减法,并将 DX-CX 的值存入 DX 中右为比较,做减法,但不会将 DX-CX 的值存入 DX 中(6)MOV
23、BPSI,CL MOV DS:BPIESI,CL左边第操作数默认为相对于 SS 段偏移的存储器操作数右边第一操作数采用段超越,指定为相对于 DS 段偏移的存储器操作数13、写出判断 AL 为正为负的程序段(请至少用三种方法)。答:方法一:CMP AL,80H ;而后用 JAE 代表负数转移,JB 代表正数转移方法二:CMP AL,00H ;而后用 JGE 代表正数转移,JL 代表负数转移方法三:TEST AL,80H ;而后用 JNZ 代表负数转移,JZ 代表正数转移方法四:OR AL,AL ;而后用 JNS 代表负数转移,JS 代表正数转移方法五:AND AL,AL ;而后用 JNS 代表负
24、数转移,JS 代表正数转移方法六:SUB AL,00H ;而后用 JGE 代表正数转移,JL 代表负数转移方法七:TEST AL,80H :而后用 JNS 代表正数转移,JS 代表负数转移14、思考题:试比较以下几条指令的功能。答:MOV BX,SI ;将 SI 的值送给 BXMOV BX,SI ;将 SI 的值作为偏移地址找到对应的内存单元中的值送给 BXMOV BX,OFFSETSI ;将 Sl 的值作为偏移地址找到对应内存单元的偏移地址送给 BX,即 SI 的值送给 BXLEA BX,SI ;将 Sl 的值作为偏移地址找到对应内存单元的偏移地址送给 BX, 即 Sl 的值送给 BXLDS
25、 BX,SI ;将 Sl 值作为偏移地址找到对应内存单元中的第一个字值送给 BX, 第二个字值送 DSLES BX,SI :将 SI 值作为偏移地址找到对应内存单元中的第一个字值送给 BX, 第二个字值送 ES15、设 B、D 为字节变量,A、C 为字变量,且 A 除 B 可能会溢出,试编写无符号数或有符号数 AB 商送 C,余数送 D。答:可能会溢出则要考虑扩展数据表示能力。 ;无符号数除法 ;有符号数除法MOV AL,B MOV AL,BXOR AH,AH CBWMOV BX,AX MOV BX,AXMOV AX,A MOV AX,AXOR DX,DX ;无符号扩展 CWD ;有符号扩展D
26、IV BX IDIV BXMOV C,AX MOV C,AXMOV D,DL MOV D,DL16、编写程序段实现 DX、AX 中 32 位二进制数*l0 (设不溢出)。答:;X*10=X*8+X*2,用移位指令实现SHL AX,1RCL DX,1 :DX,AX=(DX,AX)*2MOV BX,DXMOV BP,AX ;BX,BP 转存 2 倍值SHL AX,lRCL DX,l ;再乘 2SHL AX,lRCL DX,1 :再乘 2ADD AX,BPADC DX,BX ;8 倍+2 倍=10 倍17、请编写程序段实现如图 3.33 所示功能。MOV SI,BXLDS BX ,SI18、设已有定
27、义STR DB “Sdfikjwsmfw893040pYUIUKLHGUkjdshf8”N EQU $ - STR1试编写实现在 STR 中查找是否存在非A的功能程序段。即表示 STR 串中大部分是A ,若其中存在不是A的字符则查找成功,若 STR 全部为A 则不成功。19、程序理解执行。(1) MOV AH,一 l ;AH=FFHMOV AL,180 ;AL=B4HMOV BL,15 ;BL=0FHID BL ;AX/BL 即:-7615,商-5,余数-l程序段执行后,AX=0FFFBH。说明:关键是要知道谁除以谁,特别注意是有符号除还是无符号除。(2) MOV AL,0CH ;AL=0CHOR AL,AL ;AL=0CH,CF=0SBB AL,0F 0H ;AL=lCHNEG AL ;AL=E4H,CF=1ADC AL,0D4H ;AL=B9HTEST AL,35H ;AL=B9H ,CF=0程序段执行后,CF= 0 ,AL= B9H。