1、V 习题一2、组成典型的 8 位机框图,说明各部分作用。答 CPU:完成算术和逻辑运算以及控制和协调各部件工作存储器:存放数据和程序外围设备:包括输入和输出设备,完成信息的输入和输出借口电路:外围设备与系统总线之间的缓冲区3、简单说明微机工作原理。答微机的工作原理可以这样简单表述:首先把要解决的问题编成若干条指令组成的程序放进存储器,然后 CPU 逐条地从存储器中取出指令,分析指令并执行指令。周而复始一直到程序结束为止。4、求出各补码表示的二进制数的真值。1) 00000000 02) 01111110 =+12602213456 3) 11111111 (-)0+0+0+0+0+0+20=
2、14) 10000000 (-)1+1+1+1+1+1+1=() =1280123456 5、二进制数码无符号数、有符号数其值各为多少1) 01101110 无符号 值为 110,有符号数为+1102) 01011001 89, +893) 10001101 141, (补码值)-1154) 11111001 249, (补码值)-76、写出二进制码的原码、反码和补码00000000 原码、反码和补码都为 0000 00001000 0010 原码 1000 0010 反码 1111 1101 补码 1111 11100101 1001 原码、反码和补码都为 0101 10011111 111
3、1 原码 1111 1111 反码 1000 0000 补码 1000 00017、十六进制表示的 8 位二进制数说明它们被看作补码表示的数或 ASCII 时所表示的十进制数及字符4FH 补码 0100 1111 79 O73H 0111 0011 115 s2BH 0010 1011 43 +6CH 0110 1100 108 I8、略(注意空格 ASCII 码为 20H)9、用补码运算(1) (-85)+76 (3) -85-761010 1011 1010 10110100 1100 1011 11001111 0111 十进制结果 0F7H 即(9)补 无溢出 0110 0111 -8
4、5-76 十进制结果 161,超出-128 发生溢出,二进 制结果 5FH 为错误结果10 二进制运算略习题二1、EU 组成标志寄存器、ALU、通用寄存器组、EU 控制器和暂存器BIU 组成段寄存器、指令指针、指令队列、 20 位地址加法器和总线控制电路2、8086/8088CPU 内部有哪些寄存器?他们的主要作用是什么?1) 数据寄存器 包括 AX、 BX、CX 和 DX。通常存放 16 位的数据和地址,它们中的每一个又可以分为高字节 HCPU存储器存储器接口电路 接口电路外围设备 外围设备和低字节 L 寄存器,用来存放 8 位数据,它们可独立寻址,独立使用。2) 指针积存器和变址寄存器 包
5、括 SP、BP、SI 和 DI。它们都是 16 位寄存器,可以存放数据,但通常存放逻辑地址的偏移量,是形成 20 位物理地址的其中一部分。他,它们都不能独立地形成访问内存的地址码。3) 段寄存器 4 个 16 位段寄存器,CS 代码段寄存器存放当前执行程序所在段的段基址;DS 数据段寄存器存放当前使用的数据段基址。ES 附加段寄存器存放附加数据段的段基址;SS 堆栈段寄存器存放当前堆栈段的段基址。4) 控制寄存器组 包括一个 16 位指令指针 IP 和一个 16 为标志寄存器。IP 存放着下一次要取出指令的偏移地址;标志寄存器只用了 9 为其中 6 位反映前一次涉及 ALU 操作结果的状态标志
6、,其余 3 位是控制 CPU 操作特征控制标志。3、8086/8088CPU 中标志寄存器有几个标志位?什么情况下置位?CF AF OF ZF SF PF DF IF TF进位标志,最高位(D7或 D15)产生进位或借位时 CF=1,否则 CF=0辅助进位标志,加法时 D3为有进位或减法时D3 位有借位,则AF=1溢出标志,带符号数在进行算术运算时其结果超出 8 位或16 位,产生溢出OF=1零标志。运算结果为零ZF=1,否则ZF=0符号标志,运算结果为负数既最高位为1,则SF=1奇偶标志,操作结果低 8 位含偶数个1,则PF=1方向标志,用来控制数据串指令步行方向,DF=1时递减;DF=0
7、数据串从低位地址自动递增。中断允许标志,IF=1CPU可以响应可屏蔽中断请求,否则IF=0,CPU 不响应可屏蔽中断请求陷阱标志TF=1CPU 处于单步执行指方式;TF=0CPU 正常4、对于 8086CPU 已知(DS)=0150H, (CS)=0640H, (SS)=1200H 问1) 在数据段中可存放数据最多为多少字节? 首末地址各是什么?答 64KB,首地址 01500H,末地址 114FFH1B 对应一个地址,64K 对应 64*1024 个地址,转换成十六进制=10000H,所以末地址=01500H+10000H-1=114FFH2)堆栈段中存放多少个 16 位的字?答可存放 32
8、K 个字(8 位为 1 字节,1 字=2 字节,堆栈有 64K 字节) ,首地址为 12000H,末地址 21FFFH (12000H+10000H-1=21FFFH)3)代码段最大可存放 64KB 的程序。5、一个由 27 个字节组成的数据区,其起始地址为 BA00H:1BA0H,试写错该数据区的末单元地址答:末地址=BA000H+1BA0H+1BH-1=BBBBAH,1BH 是 27 的十六进制数。6、代码段寄存器 CS)=2000H,指令指针 IP)=2000H 则指令实际地址是什么答实际地址=2000H*10+2000H=22000H7、当前数据段位于存储器的 A1000HB0FFFH
9、 范围内,问 DS 等于多少?答数据段范围为 A1000HB0FFFH,数据段具有 64KB,且末地址为 B0FFFH,所以 DS 等于 A100H。8、两个 16 位字 ABCDH 及 1234H,地址分别为 00100H 及 00105H,试画出他们在存储器中存放的示意图答 001000010100105001069、8086/8088 最小工作方式与最大工作方式有什么不同?用什么方法将 8086/8088 置为上述两种工作方式答当把 8086/8088 的 MN/MX 引脚接到+5V 时,CPU 就处于最小工作方式。所谓最小工作方式,就是系统中只有CDAB3412一个微处理器。在这种系统
10、中,所有总线控制信号都直接由 CPU 产生,系统中总线控制逻辑电路被减小到最小,这种方式适合与较小规模系统的应用。当把 8086/8088CPU 的 MN/MX 引脚接地时 CPU 处于最大工作方式。最大工作方式用在需要利用 8086/8088CPU构成中等或较大系统时。在最大方式系统中,可以只有一个微处理器,也可以有两个或两个以上的微处理,其中8086 或 8088 为住处理器,其他处理器称为后援处理器。用来协助主处理器处理某方面的工作。10、指出 8086 系统总线结构中 8284A 时钟产生器、8282 地址锁存器、8286 收发器及 8288 总线控制器的作用?答时钟发生器 8284A
11、 提供频率恒定的单相时钟脉冲 CLK 给 CPU,除此之外,还具有系统复位信号 RESET 产生电路和准备好信号 READY 控制电路。8282 用来锁存 8086 存储器或 I/O 端口时,在总线周期 T1 状态发出地址信号。经锁存后的地址信号可以在整个周期内保持稳定不变。8286 是 8 位收发器,有 8 路双相缓冲电路,两组数据引脚是对称的。它用来加强数据总线的负载能力。8288 是 8086CPU 工作于最大方式时,用来代替 CPU 提供总线控制和命令信号的总线控制器。11、叙述 8086CPU 工作于最小方式下的总线读写过程。答:1)T1 状态 CPU 根据执行的是访问存储器还是访问
12、 I/O 断口指令,在 M/IO 线上发出有效电平。高电平为读存储器,低电平为读 I/O 端口。此信号持续整个周期。读取的存储单元或 I/O 端口的 20 位地址信号通过多路复用总线输出,其中高 4 位地址通过地址/状态线A19/S6A16/S3 送出,低 16 位地址通过地址/数据线 AD15AD0 送出。信号被锁存并在整个总线周期使用。为了锁存地址信号,CPU 变在 T1 转台从 ALE 引脚输出一个正脉冲做地址锁存器 8282 的地址锁存信号。在ALE 的下降沿到来之前,BHE 和地址信号均已有效。8282 正是用 ALE 的下降沿对地址进行锁存。BHE 信号也在 T1 状态通过 BHE
13、/S7 引脚送出,BHE 和地址 A0 分别用来对奇偶地址进行寻址。使 DT/R 变为低电平,控制数据总线收发器 8286 为数据接收状态。2)T2 状态A19/S6A16/S3 线上由地址信息变成状态信息 S6S3,BHE/S7 由 BHE 变为状态信息 S7,一直持续到T4AD15AD0 线上的地址信号消失,进入高阻状态,为读入数据做准备DEN 信号开始变为有效,开放 8286 总线收发器,DEN 持续有效到 T4 的中期才结束。RD 信号开始变为有效,控制被地址信号选中的存储单元或/IO 端口打开数据输出缓冲器,以便将数据送上数据总线。DT/R 继续保持低电平,使 8286 处于接收状态
14、。3)T3 状态 存储单元或 I/O 端口将数据送到数据总线 AD15-AD0,供 8286 纯冲后向 CPU 输入。4)TW 状态 当系统所用存储器或外设工作速度较慢,不能在基本总线周期规定的四个状态完成读操作时,将通过 8284A 时钟发生器送出 READY 信号给 CPU。CPU 将在 T3 前沿采样 READY,当采到 READY 低电平时,CPU 在 T3 和 T4 之间自动插入若干等待状态 TW,直到 READY 为高电平,TW 状态结束进入 T4 状态5)T4 状态,在 T4 状态和前一状态交界的下降沿处,CPU 读区数据总线上的数据。8086 最小方式下的总线写操作时序也包括
15、4 个 T 状态。当存储器或外设速度较慢时,在 T3 和 T4 之间插入若干TW。1)T1 状态 与读操作 1)一样,ALE 引脚上正脉冲的下降沿把 20 位地址及 BHE 状态锁存到 8282 锁存器中,DT/R 为高电平2)T2 状态,WR 为低电平,并在 AD 线上撤去地址信号后,立即将数据输出到 AD15-AD0 上,不需要象读周期一样维持一个状态浮空状态以缓冲。DT/R 维持高电平, DEN 变为低电平,8286 处于发送状态,A19/S6-A16/S3及 BHE/S7 变为状态输出。3)T3 状态。各信号维持 T2 时的状态不变,与读周期一样,T3 的前下降沿采样 READY,若需
16、插入 TW 从而进入等待状态,否则转入 T4 状态。TW 状态,各信号维持不变。4)T4 状态 前期 WR 变为无效并撤除数据总线上的数据;后期 M/IO 也变无效。此时 DEN 也变高电平,从而关闭 8286 收发器。12 叙述 8086 在最大方式下,RQ/GT0 与 RQ/GT1 作用。答 8086 在最大工作方式下,引脚 RQ/GT0 与 RQ/GT1 提供的信号称为总线请求/总线允许/ 总线释放信号,他们可分别连接到两个其他的总线主模块;RQ/GT0 与 RQ/GT1 均为双向低电平有效,前者优先于后者。CPU 在每个时钟周期的上升沿对 RQ/GT 引脚进行检测,当检测到外部向 CP
17、U 送来一个请求负脉冲时则下一个T4 状态或 T1 从同一引脚由 CPU 向请求总线使用权的主模块发回一个允许负脉冲,并使具有三态的输出线AD15-AD0、A19/S6-A16/S3、RD、LOCK、S2、S1、S0 和 BHE/S7 都处于浮空状态。CPU 暂时与总线断开习题三1、8086 语言指令的寻址方式有哪些类,用哪一种寻址方式的指令执行速度最快?答 8086/8088 提供 8 中寻址方式对操作数寻址,它们是隐含寻址、立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址。寄存器寻址的执行速度最快。2、用寄存器进行见解寻址方式时,BX、BP、S
18、I、DI 分别针对什么情况使用。物理地址怎样计算?举例说明答 BX、SI 或 DI 为间址寄存器,则操作数在数据段中,这时以段寄存器 DS 内容为段基址,操作数物理地址为PA=(DS)*10H+(BX )或(SI) 、 (DI)源操作数的偏移地址存放于 SI 中,所以称 SI 为源变址寄存器;目的操作数的偏移地址存放于 DI 中,所以称 DI 为目的变址寄存器。例如知(DS)=2000H , (BX )=4000H ,则源操作数的物理地址 PA=2000H*10H+4000H=24000HBP 称基址指针。用于存放位于堆栈中的一个数据区基址的偏移地址。若指令中指定 BP 为间址寄存器,则操作数
19、放在堆栈中。这时段寄存器 SS 为段基址,操作数物理地址为 PA=(SS)*10H+(BP )例如 SS)=3000H, (BP)=4000H,则操作数物理地址 PA=3000H*10H+4000H=34000H3、DS)=2000H、SS)=1500H 、SI )=00A0H 、BX)=0100H 数据变量 VAL 的偏移地址为 0050H、指出源操作数是什么寻址?若为存储器操作数,其物理地址是多少?1)MOV AX,0ABH 立即寻址2)MOV AX,100H 直接寻址,有效地址 PA=(DS*10H)+100H=20100H3)MOV AX,VAL 直接寻址, PA=DS*10+0050
20、H=20050H4)MOV BX ,SI 寄存器间接寻址 PA=DS*10H+(SI)=20000H+00A0H=200A0H5)MOV AL,VALBX 寄存器相对寻址 PA=DS*10H+(BX )+0050H=20000H+0100H+0050H=20150H6)MOV CL,BXSI 基址变址寻址,物理地址 PA=2000*10+0100H+00A0H=201A0H4、判断正误1)MOV AH,BX 错误 源和目的操作数的类型不一致。2)MOV BX,SI 错误,源和目的操作数不能同是为存储器操作数3)MOV AX,SIDI 错误,SI,DI 不能同时出现在源操作数中4)MOV BX,
21、1000H错误, MOV 指令中源和目的操作数不能同为存储器操作数5)MOV CS,AX 错误交换指令不能用段寄存器6)XCHG BX ,IP 错误,交换指令不能使用 IP,CS 和 IP 值只能在执行转移时改变7)PUSH CS 正确,CS 可以做源操作数8)POP CS 错误 CS 不能做目的操作数5、已知 DS)=2000H,BX)=0300H ,SI)=0002H, (20300H)=12H, (20301H)=34H, (20302H)=56H, ( 20303H)=78H , (21400H )=2AH, (21401H)=4CH, (21402H)=0B7H, (21403H)=
22、65H 说明操作数内容1)MOV AX,1400H AX=1400H2)MOV AX,BX AX=0300H3)MOV AX,1400H AX=2AH4)MOV AX,BX PA=2000*10H+0300H,AX=12H5)MOV AX,1100HBX PA=2000*10H+1100H+0300H=21400H,AX=2AH6)MOV AX,BXSI PA=2000*10H+0300H+0002H=20302H,AX=56H7)MOV AX,1100HBXSI PA=2000*10+1100H+0300H+0002H=20402,AX=0B7H6、试写出汇编语言指令1)把 BX 寄存器和
23、DX 寄存器的内容相加,结果存入 BX 寄存器。ADD BX,DX2)用寄存器 BX 和 SI 的基址寻址方式把存储器中的一个字节与 AL 寄存器的内容相加,并把结果送到 AL 寄存器。ADD AL,BXSI3)用寄存器 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和 CX 相加,把结果送回存储器中。ADD BX+0B2H,CX4)用位移量 0524H 的直接寻址方式把存储器中的一个字与立即数 3C5AH 相加,并把结果送回存储器中。ADD WORD PTR 0524H,3C5AH7、知堆栈段寄存器 SS 内容 0FF0AH,堆栈指针 SP 内容 0008H,先执行两条把
24、8057H 和 0F7CH 分别进栈的 PUSH指令,再执行一条 POP BX 指令 试画出堆栈区和 SP 的内容变化示意图SP) 0FF0A4H0FF0A5HSP) 0FF0A6H0FF0A6H0FF0A7H 0FF0A7HSP) 0FF0A8H 0FF0A8H 0FF0A8H0FF0A9H 0FF0A9H 0FF0A9H执行前堆栈 把 8057H 压入堆栈 把 0F7CH 压入堆栈SP)0F7CH 出栈 BX=0F7CH8、字节扩展指令和字扩展指令用在什么场合?举例答 8086/8088 的除法要求被除数的位数为除数的 2 倍,即字节除法时被除数为 16 位,字除法时被除数为 32 位。如
25、果被除数不满足此要求时,对于无符号数,将高位补零即可;但对于带符号数,不能简单地将被除数高位部分填零,57H80H7CH0FH57H80H7CH0FH57H80H必须按照被除数的符号来扩展,当为正数,高位补 0;负数时高位补 1。为此提供了专门的扩展指令CWD、CBW。例如 求47/5 的商和余数MOV AL,0D1H;被除数-47 补码送 ALMOV BL,05H ;除数 5 送 BLCBW ;AL 中符号扩展到 AH,AH=0FFD1HIDIV BL ;AX/BL,AL=F7H 高,AH=FEH 余数9、写出以下计算指令序列,XYZRW 均为存放 16 位带符号数地址1)Z W+(Z-X)
26、 3)Z (W*X)/(Y+6 ) ,R 余数 4)Z (W-X)/5*Y)*2MOV AX,Z MOV AX,W MOV AX,WSUB AX,X IMUL X SUB AX,XADD AX,W MOV BX,Y CWDMOV Z,AX ADD BX,6 MOV BX,52)Z W-(X+6)-(R+9) IDIV BX IDIV BXMOV AX,W MOV Z,AX IMUL YMOV BX,X MOV R,DX SAL AX,1;商 2 倍MOV DX,R RCL DX,1;余数 2 倍ADD BX,6 MOV Z,AXADD DX,9 MOV Z+2,DXSUB AX,BXSUB A
27、X,DXMOV Z,AX10、写程序,假设各变量值为压缩 BCD 码表示的两位十进制数U V+(S- 6) U (X+W)-(Z-V) XCHG AL,DLMOV AL,S MOV AL,X SUB AL,DLSUB AL,6 ADD AL,W DASDAS;压缩 BCD 码十进制减法调整指令 DAA MOV U,ALADD AL,V MOV DL,ALDAA;加法调整 MOV AL,ZMOV U,AL SUB AL,BDAS11、假设 BL=0E3H,变量 VALUE 中存放内容为 79H,试问下各指令单独执行后 BL 内容是什么?1)XOR BL,VALUE XOR 1110 0011,0
28、111 1001 BL=1001 1010=9AH2)AND BL,VALUE AND 1110 0011,0111 1001 BL=0110 0001=61H3)OR BL,VALUE OR 1110 0011,0111 1001 BL=1111 1011=0FBH4)XOR BL,0FFH XOR 1110 0011,1111 1111 BL=0001 1100=1CH5)AND BL,0 AND 1110 0011,0000 0000 BL=0000 0000=00H6)TEST BL,01H BL=0E3H;测试指令目的操作数不变12、试分析程序完成什么功能?MOV CL,04 功能
29、程序把 DX 与 AX 组成的 32 位二进制数SHL DX,CL 逻辑左移 4 位MOV BL,AHSHL AX,CLSHR BL,CLOR DL,BL13、移位指令和循环指令在执行操作时,有什么差别?在编制乘除法程序中,为什么常用位移指令来代替乘除法指令?试编一程序,实现 CX 中数除以 4 结果仍放在 CX 中。答:循环移位的特点是不丢失操作数的有效位信息,必要时可恢复;而移位指令就可能丢失有效信息,用移位指令(左移、右移)实现乘/除法要比直接乘除法指令实现速度快。实现 CX 中的带符号数除以 4,结果仍放在 CX 中的程序段SAR CX,1 SAR CX,1若上述 SAR 指令改为 S
30、HR,则实现 CX 中无符号数除以 414、用串操作指令编程:先将 100 个字节数从数据段 2270H 开始处搬到附加段 1000H 开始处,然后从中检索等于AL 中字符的单元,并将此单元换成空格符。答 程序如下MOV SI,2270HMOV DI,1000HMOV CX,100CLD ;方向控制位置 0REP MOVSB ;无条件重复MOV CX,100MOV DI,1000HNEXT:REPNZ SCASB ;CX 结果不为 0 则重复串扫描指令JZ STOP ;CX 结果为 0 则转移 STOPDEC DI ;偏移量自动减 1MOV AL,20H ;DI等于 AL 中数据MOV DI,
31、AL ;将DI中字符换成空格INC DIJMP NEXTSTOP: HLT15、在 0628H 单元处有一条 2 字节指令 JMP SHORT OBJ,如果其中位移量为(1)27H(2)6BH(3)0C6H 试问转向地址处的值为多少?答转向地址 1)0628H+27H+2H=0651H 3)0628H+0C6H+2H=06F0H2)0628H+6BH+2H=0695H 16、带参数的返回指令用在什么场合?设堆栈顶为 4000H,当执行 RET 0008H 后,SP 指针的值是多少?答:在某些情况下,执行返回指令后,往往需要自动修改堆栈指针,以便废弃一些 CALL 指令执行前入栈的参数。为了达到
32、这一目的,RET 指令可带一个操作数,其指令格式为 RET N,其中 N 为一个偶数。当 RET 指令完成返回地址出栈后,还进一步执行 SP) (SP)+N,从而实现了修改堆栈指针目的。设堆栈顶为 4000H,当执行 RET 0008H 后,如果是段内返回 SP) (SP)+2+8=400AH;如果从段间返回,则SP) (SP)+4+8=400CH17、假定 AX 和 BX 内容为带符号数,CX 和 DX 中内容为无符号数。1)如 DX 内容高于 CX,转去执行 EXCEED 答 CMP DX,CX JA EXCEED2)若 BX 大于 AX,转去执行 EXCEED答 CMP BX,AXJG
33、EXCEED3)若 CX 等于零,转去执行 ZERO答 CMP CX,0JZ ZERO4)若 BX 小于等于 AX 内容转去执行 EXCEED答 CMP BX,AXJLE EXCEED5)若 DX 低于等于 CX,转去执行 EXCEED答 CMP DX,CX JBE EXCEED18、分析程序段, 如果 AX 和 BX 内容如下程序转去哪AX BXB568H 54B7H447BH 40DCH4023H 5ED0H82C8H 908DHB568H 94B7HADD AX,BXJNO L1JNC L2SUB AX,BXJNC L3JNO L4JMP SHORT L5程序转移到 1)加法产生溢出,最
34、高位进位,减法无溢出处转至 L3 ,2)加法无溢出转 L1,3)加法无溢出 转 L1,4)减法借位,溢出 转 L5,5)L519、下面程序执行后 AX 和 CX 的值是什么SUB AX,AXSUB CX,CXLP:INC AXLOOP LP执行后 AX)=0, (CX )=0如果进入 LOOP 指令时 CX=0,则 LOOP 指令最大循环次数 65536 次。有时候这是程序员故意设计的,有时候是不慎发生的,特别 CX 来自某一变量或某一计算结果时。如果属于后者,在进入 LOOP 时 CX=0 不进行循环,可在LOOP 指令前加一条 JCXZ 指令。20、在下列程序括号中填入如下指令1)LOOP
35、 L20 (2)LOOPE L20 (3)LOOPNE L20说明程序执行完后 AX、BX、CX、DX 四个寄存器的内容是什么CODESG SEGMENT ASSUME CS:CODESG ,DS:CODESG ,SS:CODESGORG 100HBEGIN:MOV AX,01 ( )MOV BX,02 RETMOV DX,03 CODESG ENDSMOV CX,04 END BEGINL20:INC AXADD BX,CXSHR DX,1(1)LOOP 循环至 CX=0答(AX)=5, (BX )=2+4+3+2+1=12 , (CX)=0 , (DX)=0(2)LOOPE 若 CX-10
36、 且 ZF=1 则循环;若 CX-1=0 或 ZF=0 则退出循环答(AX)=1+1=2, (BX)=2+4=6, (CX)=3, (DX)=1,CX-10,ZF=0 退出循环(3)LOOPNE 若 CX-10 且 ZF=0 则循环;若 CX-1=0 或 ZF=1 则退出循环答(AX)=1+1+1=3, (BX )=2+4+3=9 , (DX)=0(ZF=1) ,CX=3-1=221、给出下列指令执行后的结果及状态位 CF、OF、SF、ZF、PF 的状态1)MOV AX,1470H 执行后 AX=1470H,标志位不影响2)AND AX,AX 执行后 AX=1470H,CF=0,OF=0,SF
37、=0 ,ZF=0 ,PF=03)OR AX,AX 执行后 AX=1470H,CF=0,OF=0、SF=0、ZF=0、PF=04)XOR AX,AX 执行后 AX=0H、CF=0、OF=0、SF=0、ZF=1、PF=?NOT AX 执行后 AX=0FFFFH,不影响标志位TEST AX,0F0F0H 执行后 AX=0FFFFH,CF=0,OF=0,最高位为 1 则 SF=1,ZF=0,结果低 8 位含偶数个 1 则PF=122、给出执行各指令后 AL 的值,以及 CF、ZF、SF、OF、PF 的状态。MOV AL,89H 执行后 AL=89H,ADD AL,AL 二进制加法得 AH=1 0001
38、 0010 所以溢出 AL=12H,CF=1 ,ZF=0,SF=0,OF=1、PF=1ADD AL,9DH AL=0AFH,CF=0,ZF=0,最高位为 1 则 SF=1,OF=1、PF=1CMP AL,0BCH AL=0AFH,CF=1,OF=ZF=0 ,次操作不影响 SF 延续上次运算结果 SF=1,PF=1SUB AL,AL AL=00H,CF=OF=SF=0,ZF=1,PF=1DEC AL AL=0FFH,DEC 和 INC 不影响 CF,CF=0 ,OF=0,SF=1 ,ZF=0 ,PF=123、设 X、Y、Z 均为双字数据,分别存放在地址为 X、X+2;Y、Y+2;Z、Z+2 的存
39、储单元中。它们的运算结果存入 W 单元。阅读程序 给出运算公式MOV AX,X MOV DX,X+2ADD AX,YADC DX,Y+2ADD AX,24ADC DX,0SUB AX,ZSBB DX,Z+2MOV W,AX 答运算公式 W=X+Y+24ZMOV W+2,DX24、编写程序1)用位操作指令实现 AL(无符号)乘以 10 答 考虑进位时 不考虑进位XOR AH,AH SAL AL,1所有移位指令影响标志位MOV BX,AX MOV CL,ALMOV CL,3 SAL AL,1SHL AX,CL SAL AL,1ADD AX,BX ADD AL,CLADD AX,BX2)用逻辑运算指
40、令实现数字 0-9 的 ASCII 码与非压缩 BCD 码的互相转换答数字 0-9 的 ASCII 码是 30H-39H,非压缩 BCD 码的 0-9 是 00H-09HASCII 到非压缩 BCD:AND AL,0FH (假设 ASC 码在 AL 中)非压缩 BCD 到 ASCII 码:ADD AL,30H (设非压缩 BCD 码在 AL 中)3)把 DX、AX 中双字右移 4 位答 MOV CX,4 或 MOV CL,04L:SHR DX,1 SHR AX,CLROR AX,1 MOV BL,DLLOOP L SHR DX,CLSHL BL,CLOR AH,BL习题四1、DAT1 DW 2
41、 DUP(1)DAT2 DB 16,25,42DAT3 DD ?CNT EQU $-DAT1 问 CNT 值多少?它表示什么意思?答 CNT 值为 11,$表示当前的偏移地址,即表示这个数据有 11 个字节数据2、数据定义入下,假设该数据段从 08000H 开始:DATA SEGMENT VAR1 DB 2 DUP(0,?)VAR2 DW 1234HORG 8VAR3 DB 5VAR4 DW ABDATA ENDS 用示意图表示内存中分配情况答08000 000800108002 000800308004 34H08005 12H080060800708008 05H08009 42H0800A 41H3、有两个 32 位数分别存在 DAT1 和 DAT2 开始的内存单元中,编程序求两数之和结果放在 SUN 开始的单元中