微机原理陈继红版部分答案_第1页
微机原理陈继红版部分答案_第2页
微机原理陈继红版部分答案_第3页
微机原理陈继红版部分答案_第4页
微机原理陈继红版部分答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 8086/8088 指令系统和寻址方式 习题答案3.1 总结计算机中十进制、二进制、八进制及十六进制数的书写形式。123D、0AFH、77Q、1001110B 分别表示什么计数制的数?答案:123D、0AFH、77Q、1001110B 分别表示十进制、十六进制、八进制、二进制。3.2 字长为8 位、16 位二进制数的原码、补码表示的最大数和最小数分别是什么?答案:8 位原码表示的最大数:(27-1)、8 位补码表示的最大数:(27-1)、8 位原码表示的最小数:-(27-1)、8 位补码表示的最小数-27。16 位原码表示的最大数:(215-1)、16 位补码表示的最大数:(215-1

2、)、16 位原码表示的最小数:-(215-1)、16 位补码表示的最小数-215。3.3 把下列十进制数分别转换为二进制数和十六进制数。(1)125 (2)255 (3)72 (4)5090答案:(1) 125 二进制数:0111 1101B;十六进制数:7DH。(2)255 二进制数:1111 1111B;十六进制数:0FFH。(3)72 二进制数:0100 1000B;十六进制数:48H。(4)5090 二进制数:0001 0011 1110 0010B;十六进制数:13E2H。3.4 把下列无符号二进制数分别转换为十进制数和十六进制数。(1)1111 0000 (2)1000 0000

3、(3)1111 1111 (4)0101 0101答案:(1)1111 0000 十进制数:240D;十六进制数:0F0H。(2)1000 0000 十进制数:128D;十六进制数:80H。(3)1111 1111 十进制数:255D;十六进制数:0FFH。(4)0101 0101 十进制数:85D;十六进制数:55H。3.5 把下列无符号十六进制数分别转换为十进制数和二进制数。(1)FF (2)ABCD (3)123 (4)FFFF答案:(1)FF 十进制数:255D;二进制数;1111 1111B。(2)ABCD 十进制数:43981D;二进制数;1010 1011 1100 1101B。

4、(3)123 十进制数:291D;二进制数;0001 0010 0011B。(4)FFFF 十进制数:65535D;二进制数;1111 1111 1111 1111B。3.6 分别用8 位二进制数和16 位二进制数写出下列十进制数的原码和补码。(1)16 (2)-16 (3)+0 (4)-0 (5)127 (6)-128 (7)121 (8)-9答案:(1)16 8 位二进制数原码:0001 0000 补码:0001 0000;16 位二进制数原码:0000 00000001 0000 补码: 0000 0000 0001 0000。(2)-16 8 位二进制数原码:1001 0000 补码:

5、1111 0000;16 位二进制数原码:1000 00000001 0000 补码:1111 1111 1111 0000。(3)+0 8 位二进制数原码:0000 0000 补码:0000 0000;16 位二进制数原码:0000 00000000 0000 补码:0000 0000 0000 0000。(4)-0 8 位二进制数原码:1000 0000 补码:0000 0000;16 位二进制数原码:1000 00000000 0000 补码: 0000 0000 0000 0000。(5)127 8 位二进制数原码:0111 1111 补码: 0111 1111;16 位二进制数原码:

6、0000 00000111 1111 补码: 0000 0000 0111 1111。(6)-128 8 位二进制数原码:无 补码: 1000 0000 ;16 位二进制数原码:1000 00001000 0000 补码:1111 1111 1000 0000。(7)121 8 位二进制数原码:0111 1001 补码: 0111 1001;16 位二进制数原码:0000 00000111 1001 补码: 0000 0000 0111 1001。(8)-9 8 位二进制数原码:1000 1001 补码:1111 0111;16 位二进制数原码:1000 00001000 1001 补码:11

7、11 1111 1111 0111。3.7 试实现下列转换。(1)原10111110B,求补 (2)补11110011B,求-补(3)补10111110B,求原 (4)补10111110B,求反答案:(1) 1100 0010 (2) 0000 1101 (3) 1100 0010 (4) 1011 11013.8 假设两个二进制数A01101010,B10001100,试比较它们的大小。(1)A、B 两数均为带符号的补码数 (2)A、B 两数均为无符号数答案:(1)A、B 两数均为带符号的补码数:AB(2)A、B 两数均为无符号数:AB3.9 下列各数均为十进制数,请用8 位二进制数补码计算

8、下列各题,用十六进制数表示其运算结果,并判断是否溢出,验证教材中所给的判断依据。(1)90+71 (2)90-71 (3)-90-71 (4)-90+71 (5)-90-(-71)答案:(1)90+71=161127 溢出90补+71补=0101 1010+0100 0111=1010 0001=0A1H=-91补(2)90-71=19127 无溢出90补+-71补=0101 1010+1011 1001=0001 0011=13H=19补(3)-90-71=-161-128 溢出-90补+-71补=1010 0110+1011 1001=0101 1111=5FH=95补(4)-90+71=

9、-19-128 无溢出-90补+71补=1010 0110+0100 0111=1110 1101=0EDH=-19补(5)-90-(-71)=-19-128 无溢出-90补+71补=1010 0110+0100 0111=1110 1101=0EDH=-19补3.10 完成下列8 位二进制数的逻辑运算。(1)1100110010101010 (2)1100110010101010(3)1100110010101010 (4)1010110010101100(5)1010110010101100 (6)1010110010101100(7)10101100答案:(1)1100110010101

10、010=1000 1000 (2)1100110010101010=1110 1110(3)1100110010101010=0110 0110 (4)1010110010101100=1010 1100(5)1010110010101100=0000 0000 (6)1010110010101100=1010 1100(7)10101100=0101 00113.11 以下均为2 位十六进制数,试说明当把它们分别看作无符号数或字符的ASCII 码值,它们所表示的十进制数和字符是什么?(1)30H (2)39H (3)42H (4)62H (5)20H (6)7H答案:(1)30H 所表示的十

11、进制数是:48D;字符是:0。(2)39H 所表示的十进制数是:57D;字符是:9。(3)42H 所表示的十进制数是:66D;字符是:B。(4)62H 所表示的十进制数是:98D;字符是:b。(5)20H 所表示的十进制数是:32D;字符是:sp 空格。(6)7H 所表示的十进制数是:7D;字符是:BEL 报警。3.12 把以下十进制数分别以压缩BCD 码、非压缩BCD 码、ASCII 码串表示。(1)2 (2)78答案:(1)2 压缩BCD 码:0010、非压缩BCD 码:0000 0010、ASCII 码:011 0010(2)78 压缩BCD 码:0111 1000、非压缩BCD 码:0

12、000 0111 0000 1000、ASCII 码:01101110111003.13 设浮点数格式如下图所示:阶码、尾数均以补码表示,基数为2,求:+25.6 和-361.25 的规格化浮点数。答案:1) +25.6D=11001.1001100110B=0.110011001100110×25+5=0101B,补码:0101,尾数: 0.110011001100110补=0.110011001100110规格化浮点数:0 0000101 0 1100110011001102) -361.25D=-101101001.01B=29×(-0.101101001010000

13、)+9=1001,补码:1001,尾数: -0.101101001010000补=1.010010110110000规格化浮点数:0 0001001 1 0100101101100003.14 设某计算机用12 位表示一个浮点数,该浮点数从高位到低位依次为:阶符1 位、阶码3 位(原码表示)、数符1 位、尾数7 位(补码表示),则0 100 1 0110011 的真值是多少?答案:-9.6253.15 8086 汇编语言指令的寻址方式有哪几类?哪种寻址方式的指令执行速度最快?解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。其中,寄存器操作数寻址方式的指令执行速度最

14、快。3.16 在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应该如何表示?解:默认的数据访问,操作数在DS 段;堆栈操作在SS 段;串操作源操作数(SI)在DS段,目的操作数(DI)在ES 段;用BP 作为指针在SS 段。如果要显式地指定段地址,则在操作数中规定段寄存器。例如:MOV AX, ES:(BX+10H)3.17 8086 系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR 的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储

15、器操作数,计算它们的物理地址。(1)MOV BX,12 ;目标操作数为寄存器寻址(2)MOV BX,12 ;目标操作数为寄存器间址 PA=10300H(3)MOV ES:SI,AX ;目标操作数为寄存器间址 PA=20200H(4)MOV VAR,8 ;目标操作数为存储器直接寻址 PA=10600H(5)MOV BXSI,AX ;目标操作数为基址加变址寻址 PA=10500H(6)MOV 6BPSI,AL ;目标操作数为相对的基址加变址寻址 PA=12306H(7)MOV 1000H,DX ;目标操作数为存储器直接寻址 PA=11000H(8)MOV 6BX,CX ;目标操作数为寄存器相对寻址

16、 PA=10306H(9)MOV VAR+5,AX ;目标操作数为存储器直接寻址 PA=10605H3.18 下面这些指令中哪些是正确的?那些是错误的?如果是错误的,请说明原因。(1)XCHG CS,AX ;错,CS 不能参与交换(2)MOV BX,1000 ;错,存储器之不能交换(3)XCHG BX,IP ;错,IP 不能参与交换(4)PUSH CS ;错,CS 不能为PUSH 的操作数(5)POP CS ;错,不能将数据弹到CS 中(6)IN BX,DX ;输入/输出只能通过AL/AX(7)MOV BYTEBX,1000 ;1000 大于255,不能装入字节单元(8)MOV CS,1000

17、 ;CS 不能作为目标寄存器(9)MOV BX,OFFSET VARSI ;OFFSET 只能取变量的偏移地址(10)MOV AX,SIDI ;SI、DI 不能成为基址加变址(11)MOV COUNTBXSI,ES:AX ;AX 是寄存器,不能加段前缀3.19 试述以下指令的区别: MOV AX,3000H 与 MOV AX,3000H答案: MOV AX,3000H 指令源操作数的寻址方式为立即寻址方式,指令执行结果为:(AX)=3000H。 而MOV AX,3000H指令源操作数的寻址方式为直接寻址方式,指令执行结果为:DS:3000H)_AX。 MOV AX,MEM 与 MOV AX,O

18、FFSET MEM答案: MOV AX,MEM 指令源操作数的寻址方式为直接寻址方式,指令执行结果为:DS:MEM)_AX。 而MOV AX,OFFSET MEM 指令的执行结果是把MEM 的偏移量送AX。 MOV AX,MEM 与 LEA AX,MEM答案: MOV AX,MEM 指令的执行结果是LDS:MEM)_AX。 而LEA AX,MEM的执行结果是把MEM 的偏移量送AX。(4) JMP SHORT L1 与 JMP NEAR PTR L1答案:JMP SHORT L1 为段内无条件短程转移,跳转的范围不得超过带符号的8 位二进制数表示的字节范围;JMP NEAR PTR L1 为段

19、内无条件近程转移,跳转的范围不得超过带符号的16 位二进制数表示的字节范围。(5) CMP DX,CX 与 SUB DX ,CX答案:CMP DX,CX 是比较,也是利用减法比较,但是dx 中的值不变,标志寄存器改变。SUB DX ,CX 是做减法运算,dx 中为减后的值,标志寄存器改变(6)MOV BPSI,CL 与 MOV DS: BPSI,CL答案:BP 默认的段基址是SS,物理地址PA=SS+BP+SI;第二个重定义为DS 段基址,物理地址PA=DS+BP+SI3.20 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作:MOV

20、BYTE PTR BP, 20HMOV WORD PTR BX, 20H解:前一条指令是把立即数20H,传送至堆栈段(BP 的默认段)偏移量由BP 规定的字节单元,地址为:52000H+6200H=58200H第二条指令是把立即数20H,传送至数据段(BX 的默认段)偏移量由BX 规定的字单元,地址为:21000H+1400H = 22400H。3.21 设当前 SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行 PUSH BX 指令后,栈顶地址和栈顶2 个字节的内容分别是什么?答案:当前栈顶的地址=2FF00H当执行PUSH BX 指令后,栈顶地址=2FE

21、FEH(2FEFEH)=57H(2FEFFH)=34H3.22 设DX=78C5H,CL=5,CF=1,确定下列各条指令执行后,DX 和CF 中的值。(1) SHR DX,1 ;DX=3C62H CF=1(2) SAR DX,CL ;DX=03C6H CF=0(3) SHL DX,CL ;DX=18A0H CF=1(4) ROR DX,CL ;DX=2BC6H CF=0(5) RCL DX,CL ;DX=18B7H CF=1(6) RCR DH,1 ;DX=BCC5H CF=03.23 设AX=0A69H,VALUE 字变量中存放的内容为1927H,写出下列各条指令执行后寄存器和CF、ZF、O

22、F、SF、PF 的值。AX CF ZF OF SF PF(1)XOR AX,VALUE ; 134EH 0 0 0 0 1(2)AND AX,VALUE ; 0821H 0 0 0 0 1(3)SUB AX,VALUE ; F142H 1 0 0 1 1(4)CMP AX,VALUE ; 0A69H 1 0 0 1 1(5)NOT AX ; F596H X X X X X(6)TEST AX,VALUE ; 0A69H 0 0 0 0 13.24 设AX 和BX 中是符号数,CX 和DX 是无符号数,请分别为下列各项确定CMP和条件转移指令。CX 值超过DX 转移。AX 未超过BX 转移。DX

23、 为0 转移。CX 值等于小于DX 转移。答案:(1) CMP CX,DXJA NEXT(2) CMP AX,BXJLE NEXT(3) CMP DX,0JZ NEXT(4) CMP CX,DXJBE NEXT3.25 阅读分析下列指令序列:ADD AX,BXJNO L1JNC L2SUB AX,BXJNC L3JNO L4JMP L5若AX 和BX 的初值分别为以下5 种情况,则执行该指令序列后,程序将分别转向何处(L1L5 中的一个)。AX=13C6H, BX=80DCHAX=0B568H,BX=54B7HAX=42C8H, BX=608DHAX=0D023H,BX=9FD0HAX=9FD

24、0H, BX=0D023H答案:(1)转L1:不溢出,转移到L1 处;(2)转L1:不溢出,转移到L1 处;(3)转L2:溢出,不转移到L1 处,进位CF=0,转移到L2 处;(4)转L3:溢出,不转移到L1 处,进位CF=1,不转移到L2 处,减法借位CF=0,转移到L3 处;(5)转L5:溢出,不转移到L1 处,进位CF=1,不转移到L2 处,减法借位CF=1,不转移到L3 处,不溢出OF=0,转移到L4 处;3.26 用普通运算指令执行BCD 码运算时,为什么要进行十进制调整?具体地讲,在进行BCD 码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?解:因为8086 指令

25、把操作数作为二进制数进行二进制运算,要得到正确的BCD 结果,需要进行调整。在加、减、乘法指令之后加上BCD 调整指令,而在除法指令之前先用BCD 调整指令再用除法指令。3.27 在编写乘除法程序时,为什么常用移位指令来代替乘除法指令?编写一段程序,实现将BX 中的数除以10,结果仍然放在BX 中。解:用移位指令时,左移l 位相当于将操作数乘2,右移1 位相当于将操作数除2。用移位指令实现一些简单的乘除法程序,比用乘法指令和除法指令进行乘、除运算要快得多。用除法指令实现:MOV CL 0AHMOV AX,BXIDIV CLMOV BX,AX3.28 串操作指令使用时特别要注意和SI,DI 这两

26、个寄存器及方向标志DF 密切相关。请具体就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、STOSB/STOSW 列表说明和SI、DI 及DF 的关系。解答:SI DI DFMOVSB/MOVSW 指出源地址指出目的地址不带 REP 重复前缀时,DF=0,每传送一次,SI、DI 加1 或加2,DF=1,SI、DI 则减1 或减2CMPSB/CMPSW存放源字符串首地址存放目的字符串首地址DF=0,每次比较后,SI、DI 加1 或加2,CX 减1,DF=1,SI、DI 减1 或减2,CX 减1SCASB/SCASW 无 指出字符串首址偏移量 无

27、LODSB/LODSW 作为地址指针存放处理结果DF=1 时,地址作增量修改,DF=0 时,地址作减量修改STOSB/STOSW 无 存放目的地址 无3.29 用串操作指令设计实现以下功能的程序段:首先将100H 个数从2170H 处搬到1000H 处,然后,从中检索相等于VAL 中字符的单元,并将此单元值换成空格符。解答:START:MOV AX, DSMOV ES, AXMOV SI, 2170HMOV DI, 1000HMOV CX, 100HCLDREP MOVSBANOTHER:MOV DI, 1000HMOV AL, VALMOV CX, 100HCLDAGE: SCASBJZ F

28、INDEC CXJNZ AGEJMP OVERFIN: MOV BYTE PTRDI-1,20HCMP CX,0JNZ AGEOVER: RET3.30 求双字长数DXAX 的相反数。答:NEG DXNEG AXSBB DX,03.31 试对数据段偏移地址为101H 单元中的单字节数求补后存入102H,最高位不变,低7 位取反存入103H,高4 位置1,低4 位不变,存入104H。答:MOV AX,0101HMOV BX,AXMOV CX,AXNOT AXMOV 0102H,AXXOR BX,7FHMOV 0103H,BXAND CX,0F0HMOV 0104H3.32 试编写一个程序,比较两

29、个同长字符串STRING1 和STRING2 所含字符是否相同,若相同MATCH 单元赋值1,若不相同MATCH 单元赋值0。答案:程序段为:;数据定义STRING1 DB ABCDEFGHIJK ;串1,作为源串STRING2 DB ABCDFGKJ ;串2,作为目标串MATCH DB ? ;定义MATCH 单元;功能代码MOV AX,SEG STRING1MOV DS,AX ;源串段地址送DSMOV AX,SEG STRING2MOV ES,AX ;目标串段地址送ESLEA SI, STRING1 ;源串偏移地址送SILEA DI, STRING2 ;目标串偏移地址送DIMOV CX, S

30、TRING1- STRING2 ;重复次数送CXCLD ;地址增REPE CMPSB ;相等继续比较,不相等退出JZ EQUAL ;退出时,若ZF=1,表示两串相等MOV MATCH,0 ;不相同,MATCH 单元赋值0JMP OVEREQUAL:MOV MATCH,1 ;相同MATCH 单元赋值1OVER:HLT3.34 编写代码,计算a+10b+100c+20d,其中a、b、c、d 均为单字节无符号数,结果为16位,存入SUM 开始的两单元中。data segmentma db 12mb db 21mc db 86md db 150SUM dw 0data endscode segment

31、assume ds:data,cs:codestart:mov ax,datamov ds,axmov dh,0mov dl,mamov ah,0mov al,10mul mbadd dx,axmov ah,0mov al,100mul mcadd dx,axmov ah,0mov al,20mul mdadd dx,axmov SUM,dxcode endsend start3.35 试_编写一段程序把LIST 到LIST+100 中的内容传到BLK 到BLK+100 中去。答案:程序段为:MOV AX,SEG LISTMOV DS,AX ;源串段地址送DSMOV AX,SEG BLKMOV

32、 ES,AX ;目标串段地址送ESLEA SI, LIST ;源串偏移地址送SILEA DI, BLK ;目标串偏移地址送DIMOV CX, 101 ;重复次数送CXCLD ;地址增REP MOVSB3.36 设CS:0100H 单元有一条两字节的JMP SHORT LAB 指令,若其中的位移量为:56H 80H 78H (4)0E0H试写出转向目标的物理地址是多少?答:因为CS:0100H 处存放两字节指令JMP SHORT LAB,所以当执行该指令时(IP)=0102H(1) 转向目标的物理地址是:(CS)*10H+(IP)+0056H=CS:0058H(2) 转向目标的物理地址是:(CS

33、)*10H+(IP)+0FF80H=CS:0082H;80H 对应的负数为-80H(向上转移,负位移量)(3) 转向目标的物理地址是:(CS)*10H+(IP)+0078H=CS:0180H(4) 转向目标的物理地址是:(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H 对应的负数为-1EH(向上转移,负位移量)3.37 不使用除法指令,将堆栈段中10H、11H 单元中的双字节带符号数除以,结果存入12H、13H 单元(注:多字节数存放格式均为低位在前,高位在后)。POP AXPOP BXTEST AX,8000H ;测试被除数符号位MOV CL,3JZ ZS ;若为正数,跳转

34、到ZSSAR AX,CLJMP OVERZS: SHR AX,CLOVER:PUSH AX3.38 数据段中3030H 起有两个16 位的带符号数,试求它们的积,存入3034H-3036H 单元中。答案:MOV AX,3030HMOV BX,3032HIMUL BXMOV 3034H,AXMOV 3036H3.39 考虑以下调用序列:(1)MAIN 调用NEAR 的SUBA 过程(返回的偏移地址为150BH);(2)SUBA 调用NEAR 的SUBB 过程(返回的偏移地址为1A70H);(3)SUBB 调用FAR 的SUBC 过程(返回的偏移地址为1B50H,段地址为1000H);(4)从SU

35、BC 返回SUBB;(5)从SUBB 返回SUBA;(6)从SUBA 返回MAIN。请画出每次调用或返回时,堆栈内容和堆栈指针变化情况。答:*(SP) 150BH*150BH(SP)*150BH(SP)*150BH(SP)*(SP) 150BH(SP) *(1) (2) (3)(4) (5) (6)1A70H 1A70H1000H1B50H1A70H第四章 汇编语言程序设计 习题答案(部分)4.1 什么是标号?它有哪些属性?答:标号是一种特殊的标识符,它代表代码段中的某个具体位置,它主要用于表明转移的目标位置。源程序中的标号都有三种属性:段、偏移及类型。4.2 什么是变量?它有哪些属性?答:变

36、量名代表存储器中的一个数据区的名字。源程序中的变量有五种属性:段、偏移、类型、长度、规模。4.3 什么是伪指令?什么是宏指令?伪指令在什么时候被执行?宏指令在程序中如何被调用?答:伪指令语句是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。伪指令语句是在汇编程序对源程序汇编期间由汇编程序处理的操作。宏是若干语句组成的程序段,宏指令语句用来定义宏。一旦把某程序段定义成宏,则可以用宏名代替那段程序。在汇编时,要对宏进行宏展开,展开的过程是将宏名用程序段代替。4.4 汇编语言表达式中有哪些运算符?它们所完成的运算是在什么时候进行的?答:汇编语言表达式中的运算符有:算术运算符 +、

37、*、/、MOD逻辑运算符 AND、OR、NOT、XOR关系运算符 EQ、NE、LT、GT、LT、LE、GE分析运算符 SEG、OFFSET、TYPE、LENGTH、SIZE属性运算符 PTR、THIS、SHORT其 它 LOW、HIGH这些运算符都是在在汇编时由汇编程序对其运算的。4.5 画出下列语句中的数据在存储器中的存储情况。ORG 100HVARB DB 34,34H,GOOD,2 DUP(1,2 DUP(0)VARW DW 5678H,CD,$+2,2 DUP(100)VARC EQU 12VARB DS:0100H 22H DS:010BH 00HDS:0101H 34H VARW

38、DS:010CH 78HDS:0102H 47H DS:010DH 56HDS:0103H 4FH DS:010EH 44HDS:0104H 4FH DS:010FH 43HDS:0105H 44H DS:0110H 12HDS:0106H 01H DS:0111H 01HDS:0107H 00H DS:0112H 64HDS:0108H 00H DS:0113H 00HDS:0109H 01H DS:0114H 64HDS:010AH 00H DS:0115H 00H46 按下列要求,写出各数据定义语句。DB1 为10H 个重复的字节数据序列:1,2,5 个3,4。DB2 为字符串STUDE

39、NTSDB3 为十六进制数序列:12H,ABCDH用等值语句给符号COUNT 赋以DB1 数据区所占字节数,该语句写在最后。解答:DB1 DB 16 DUP(1,2,5 DUP(3),4)DB2 DB STUDENTSDB3 DW 12H,0ABCDHCOUNT EQU DB2DB14.7 指令OR AX,1234H OR 0FFH 中两个OR 有什么差别?这两个操作数分别在什么时候执行?解答:(1)指令OR AX,1234H OR 0FFH 中的第一个OR 是指令系统中的“或”指令,而第二个OR 是表达式中表示逻辑“或”关系的。(2)指令OR AX,1234H OR 0FFH 中的第一个OR

40、 是在CPU 执行指令操作时才会执行。而第二个OR 是在汇编时就会将1234H 和0FFH 作逻辑“或”运算,得到结果12FFH。然后执行第一个OR 指令,完成AX 的内容与12FFH 的逻辑“或”运算。48 对于下面的数据定义,各条MOV 指令单独执行后,有关寄存器的内容是什么?PREP DB ?TABA DW 5 DUP(?)TABB DB NEXTTABC DD 12345678H(1)MOV AX,TYPE PREP ;AX=1(2)MOV AX,TYPE TABA ;AX=2(3)MOV AX,LENGTH TABA ;AX=5(4)MOV AX,SIZE TABA ;AX=10(5

41、)MOV AX,LENGTH TABB ;AX=1(6)MOV DX,SIZE TABC ;AX=44.9 设数据段DSEG 中符号及数据定义如下,试写出数据在内存中的存储示意图。(数据段DSEG 定义略)解答:DAB DS:0100H 2FH DS:0113HDS:0101H 47H DS:0114HDS:0102H 4FH DS:0115HDS:0103H 54H DS:0116HDS:0104H 4FH DS:0117HDS:0105H 2FH DS:0118HDS:0106H 0DH DS:0119HDS:0107H 0AH DS:011AHDBB DS:0108H 05H DS:01

42、1BHDS:0109H 13H DDW DS:011CH 32HDS:010AH 61H DS:011DH 31HCCB DS:010BH DS:011EH 64HDS:010CH DS:011FH 00HDS:010DH DS:0120H 33HDS:010EH DS:0121H 03HDS:010FH DS:0122H 78HDS:0110H DS:0123H 00HDS:0111H DS:0124H 64HDS:0112H DS:0125H 00H4.10 若自STRING 单元开始存放有一个字符串(以字符$结束),试完成:(1)编程统计该字符串长度(不包含 $ 字符,并假设长度为两字节

43、)。(2)把字符串长度放在STRING 单元,把整个字符串往下移两个单元。程序段为:(1)MOV SI, OFFSET STRINGXOR BX, BXCONT:MOV AL, SICMP AL, $JZ NEXTINC BXINC SIJMP CONTNEXT:MOV AH, 4CHINT 21H(2)STRING DB $COUNT EQU $-STRINGMOV SI, OFFSET STRINGMOV CX, COUNTADD SI, CXCONT: DEC SIMOV AL, SIMOV SI+2, ALLOOP CONTMOV CX, COUNTMOV STRING, CXMOV

44、AH, 4CHINT 21H4.11 将字符串STRING 中的&字符用空格代替,字符串STRING“It is FEB&03”。解答程序为:DATA SEGMENTSTRING DB It is FEB&03COUNT EQU $-STRINGDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET STRINGMOV CX,COUNTMOV AL,$CONT:CMP AL,SIJNZ NEXTMOV BYTE PTRSI, NEXT: INC SILOOP C

45、ONTMOV AH,4CHINT 21HCODE ENDSEND START4.12 设BLOCK 起有20 个单字节的数,试将它们按降序排列。解答程序为:DATA SEGMENTORG 0100HBLOCK DB 12H,87H,51H,68H,00H,02H,0FFH,0D6H,45H,77H,80H,9FHLEN EQU $-BLOCKDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,LEN-1 ;BX_比较轮数LOP0: MOV SI,LEN-1 ;SI_第N 个数在数据表中的偏移量

46、MOV CX,BX ;CX_比较次数计数值MOV DX,0 ;DX_置交换标志为第N 个数在数据表中偏移量LOP1: MOV AL,BLOCKSICMP AL,BLOCKSI-1 ;比较相邻两数JLE NEXTMOV AH,BLOCKSI-1 ;交换两数MOV BLOCKSI-1,ALMOV BLOCKSI,AHMOV DX,1 ;DX_发生交换处的位置NEXT: DEC SI ;修改数据地址LOOP LOP1 ;一轮比较完吗?CMP DX,0 ;本轮发生交换吗?JZ STOP ;已全部排好序,转程序结束DEC BX ;所有轮都比较完否?JNZ LOP0 ;未完继续STOP: MOV AH,4

47、CHINT 21HCODE ENDSEND START4.14 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。解答程序为:data segmentmessage db 'please enter the small letter:',0ah,0dh,'$'message2 db 'the capital letter is:',0ah,0dh,'$'error db 'enter must be small!please enter again:',0ah,0dh,'$'mes

48、sage3 db 'the capital letter is:','$'letter db ?data endsstack segmentdb 100h dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axjmp l1xor ax,axerror1:lea dx,errormov ah,09hint 21hl1:lea dx,messagemov ah,09hint 21hlea dx,lettermov ah,01hint 21hpush a

49、xmov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hlea dx,message3mov ah,09hint 21hpop axcmp al,'z' ;比较,判断是否小写字母ja error1cmp al,'a'jb error1 ;大写字母重新输入sub al,20H ;减20H 转换为大写字母mov dl,almov ah,02hint 21hmov ax,4c00hint 21hcode endsend start415 键盘输入十个学生的成绩,试编制一个程序统计6969 分,7079 分,8089 分,9099 分及

50、100 分的人数,分别存放到S6,S7,S8,S9 及S10 单元中。解答程序为:DATA SEGMENTBUF DB 10 DUP(?)S6 DB ?S7 DB ?S8 DB ?S9 DB ?S10 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET S6XOR AL,ALMOV CX,0504HCONT: MOV SI,ALINC SILOOP CONTMOV CX,10MOV SI,OFFSET BUFCONT1: MOV AH,1INT 21HSHL AL,CLM

51、OV BL,ALMOV AH,1INT 21HSUB AL,30HOR AL,BLMOV SI,ALCMP AL,70HJAE NEXT1INC BYTE PTR S6NEXT1: CMP AL,80HJAE NEXT2INC BYTE PTR S7NEXT2: CMP AL,90HJAE NEXT3INC BYTE PTR S8NEXT3: CMP AL,99HJA NEXT4INC BYTE PTR S9JMP NEXT5NEXT4: INC BYTE PTR S10NEXT5: INC SILOOP CONT1MOV AH,4CHINT 21HCODE ENDSEND START4.17

52、 在有序表“11,22,33,44,55,66,77,88,99,00”中查找44。若找到置find 为其在表中的位置;未找到,find 置0。4.18 分别实现满足下面要求的宏定义:(1)可对任一寄存器实现任意次数的左移操作。(2)任意两个单元中的数据相加存入第三个单元中。(3)将任意一个8位寄存器中的压缩BCD码转为两个ASCII码,并在屏幕上显示。(2)宏定义的代码段如下:ADDM MACRO M1,M2,M3MOV AX,M1ADD AX,M2MOV M3,AXENDM第五章 8086 系统时序和微机总线 习题答案(部分)5.1 什么是时钟周期、总线周期、指令周期?答:8086CPU

53、执行一条指令是由取指令、译码和执行等操作组成的,为了使 8086CPU的各种操作协调同步进行,8086CPU 必须在时钟信号 CLK 控制下工作,时钟信号是一个周期性的脉冲信号,一个时钟脉冲的时间长度称为一个时钟周期(Clock Cycle),是时钟频率(主频)的倒数,时钟周期是计算机系统中的时间基准。8086CPU 要通过总线才能与外部交换信息,CPU 通过总线接口单元与外部交换一次信息,称为一次总线操作,所耗用的时间称为一个总线周期(Bus Cycle),也称机器周期(MachineCycle)。一个总线周期由若干个时钟周期组成,总线操作的类型不同,总线周期也不同。一个总线周期内完成的数据

54、传输,一般有传送地址和传送数据两个过程。8086CPU 执行一条指令所需要的时间称为指令周期(Instruction Cycle),一个指令周期由若干个总线周期组成,5.2 8086 微处理器各个T 状态的主要功能。答:(1)在T1 状态,CPU 往多路复用总线上发出地址信息,以指出要寻址的存储单元或外设端口的地址。(2)在T2 状态,CPU 从总线上撤消地址,而使总线的低16 位浮空,置成高阻状态,为传输数据作准备。总线的最高4 位(A1916)用来输出本总线周期状态信息。在这些状态信息用来表示中断允许状态,当前正在使用的段寄存器名等。(3)在T3 状态,多路总线的高4 位继续提供状态信息,而多路总线的低16 位(8088 则为低8 位)上出现由CPU 写出的数据或者CPU 从存储器或端口读入的数据。(4)在有些情况下,外设或存储器速度较慢,不能及时地配合CPU 传送数据。这时,外设或存储器会通过“READY”信号线在T3 状态启动之前向CPU 发一个“数据未准备好”信号,于是CPU 会在T3 之后插入1 个或多个附加的时钟周期Tw。Tw 也叫等待状态,在Tw 状态,总线上的信息情况和T3 状态的信息情况一样。当指定的存储器或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论