1、微机原理期末考试习题选讲资料微机原理习题选讲江苏大学机械学院测控系2011年9月存储器数据组织:VAR132H41HA42HB43HCVAR234H1234H12H40H0040H00H42HB41HA78H12345678H56H34H12H-预留的存储单元C3H11000011BARRY100H第一组字节方式的0,101H00H第二组字节方式的0,101HARRY2-第一组字方式的?,1-01H00H-第二组字方式的?,1-01H00H:例4-3VAR1 DB 32H, ABCVAR2 DW 1234H,40H, AB DD 12345678H DB ?,11000011BARRY1 DB
2、 2DUP(0,1)ARRY2 DW 2DUP (?,1)本例所定义的数据存储器分配情况如图示。寻址方式与指令系统1. 已知(DS)=1000H,(ES)=2000H,(SS)=1100H,(SI)=1010H,(BX)=0200H,(BP)=0600H,请指出下列指令的源操作数字段是什么寻址方式?源操作数字段的物理地址是什么?(1) MOV AL,2400H(2) MOV AX,BP(3) ADD AX,ES:BP+10(4) MOV AL,BX+SI+25解:(1) 该指令的源操作数字段是直接寻址方式物理地址PA=(DS)16+2400H=1000H16+2400H=12400H(2) 该
3、指令的源操作数字段是寄存器间接寻址方式物理地址PA=(SS)16+(BP)=1100H16+0600H=11600H(3) 该指令的源操作数字段是寄存器相对寻址方式物理地址PA=(ES)16+(BP)+10=2000H16+0600H+000AH=2060AH(4) 该指令的源操作数字段是寄存器相对基址变址寻址方式物理地址PA=(DS)16+(BX)+(SI)+25=1000H16+0200H+1010H+0019H=11229H2. 请指出下列指令中得错误:(1)MOV DS,12H (2)MOV AH,400(3)MOV BP,AL (4)MOV AX,SIDI(5)OUT 257H,AL
4、 (6)MOV BYTE PTRBX,1000(7)MOV BX,SI (8) MOV 4DI,02(9) MOV BX+SI+3,IP (10)PUSH BH解: (1)不能直接向DS中送立即数(2)400超过了一个字节的范围(3)寄存器类型不匹配(4)SI、DI不能同时使用(5)直接寻址的输出指令中,端口号只能在00FFH范围内(6)1000超过了一个字节的范围(7)源和目的操作数不能同时为存储器操作数(8)源操作数与目的操作数的类型不明确(9)IP不能作源和目的操作数(10)PUSH是字操作指令3. 请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态:
5、MOV AX,7896HADD AL,AHADD AH,ALADD AL,0F2H解: (1)MOV AX,7896H执行后,AX=7896H,即AH=78H,AL=96H,各标志位保持不变。 (2)ADD AL,AH执行后,AH=78H ,AL=0EH,即AX=780EH,所以各标志位状态为:CF=1,ZF=0,SF=0,OF=0,AF=0,PF=0。 (3)ADD AH,AL执行后,AH=86H,AL=0EH,即AX=860EH,所以各标志位状态为:CF=0,ZF=0,SF=1,OF=1,AF=1,PF=0。 (4)ADD AL,0F2H执行后,AH=86H,AL=00H,即AX=8600
6、H,所以各标志位状态为:CF=1,ZF=1,SF=0,OF=0,AF=1,PF=1。4. 、均为16位带符号数,请编写一个程序段计算表达式(X*Y+Z-1000)/70的值。解:假设X、Y和Z分别存放在名为DATAX、DATAY和DATAZ的变量单元中。计算结果保存在AX中,余数保存在DX中,则程序段如下: MOV AX,DATAX IMUL DATAY ;计算X*Y MOV CX,AXMOV BX,DX ;积保存到BX:CXMOV AX,DATAZCWD ;将DATAZ扩展成32位ADD AX,CX ;计算和ADC DX,BXSUB AX,1000 ;计算差SBB DX,0MOV CX,70
7、 ;计算商和余数IDIV CX汇编程序基本设计方法简单(顺序)程序例4-25 有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。程序清单:DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 00DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS ,AXLEA SI,XLEA DI,YMOV AX,SIADD AX,DIMOV Z,AXMOV AH,4CHINT 21HCODE ENDSEND START 例4-26把压缩BCD码表示的数M,转换为两个相应的AS
8、CII码,结果存在紧跟M后的两个内存单元,低位在前,高位在后。程序清单:DATA1 SEGMENT M DB ? N DB 2DUP(00)DATA1 ENDSCODE1 SEGMENT ASSUME DS:DATA1,CS:CODE1START:MOV AX, DATA1 MOV DS,AX LEA SI,M LEA DI,N MOV AL,SI AND AL,0FH ADD AL,30H MOV DI,AL MOV AL,SI MOV CL,4 SHR AL,CL ADD AL,30H MOV DI+1,AL MOV AH,4CH INT 21H CODE1 ENDSEND START分支
9、程序例4-27内存单元M有一个16位带符号数,求其绝对值,并将结果放回原处。程序清单:DATA2 SEGMENT M DW ?DATA2 ENDSCODE2 SEGMENT ASSUME DS:DATA2,CS:CODE2START:MOV AX, DATA2 MOV DS,AX LEA SI,M MOV AX,SI AND AX,AX JNS DONE NEG AXDONE: MOV SI,AX MOV AH,4CH INT 21H CODE2 ENDSEND START例4-28编写实现下列函数的程序。程序清单如下:DATA3 SEGMENT X DW ? Y DW ?DATA3 ENDS
10、CODE3 SEGMENTASSUME CS:CODE3,DS:DATA3START:MOV AX, DATA3 MOV DS,AX LEA SI,X MOV AX,SI AND AX,AX JNS LP1 MOV Y,0FFH JMP END1LP1: JNZ LP2 MOV Y,00H JMP END1LP2: MOV Y,01H END1:MOV AH,4CH INT 21HCODE3 ENDSEND START循环程序例4-29 以ARRY开始的字节数组有10个带符号数,求出它们的和,并将和送到SUM字单元中。程序清单如下:DATA4 SEGMENT ARRAY DB a1,a2,a3
11、,.a10 SUM DW ?DATA4 ENDSCODE4 SEGMENT ASSUME CS:CODE4,DS:DATA4START:MOV AX, DATA4 MOV DS,AX LEA SI,ARRAY XOR DX,DX MOV CX.10DONE: MOV AL,SI CBW ADD DX,AX INC SI LOOP DONE MOV SUM,DX MOV AH,4CH INT 21HCODE4 ENDSEND START例子4-30 统计数据段string字符串的字符个数,将统计值存入count单元,字符串是由字符$值为结束符的,统计时$不统计在内。程序清单如下:DATA5 SE
12、GMENT STRING DB How are you!,$ COUNT DW ?DATA5 ENDSCODE5 SEGMENT ASSUME CS:CODE5,DS:DATA5START:MOV AX, DATA5 MOV DS,AX MOV SI,OFFSET STRING XOR CX,CXAGAIN:MOV AL,SI CMP AL,$ JZ DONE INC CX INC SI JMP AGAINDONE: MOV COUNT,CX MOV AH,4CH INT 21HCODE5 ENDSEND START例4-31 数据段buffer数组有100个字数据,统计该数组中所有为“1”
13、的位的个数,统计结果存入result单元。程序清单如下:DATA6 SEGMENTBUFFER DW a1,a2,a3,.,a100COUNT EQU 100RESULT DW ?DATA6 ENDSCODE6 SEGMENT ASSUME CS: CODE6, DS:DATA6START: MOV AX, DATA6 MOV DS, AX MOV SI, OFFSET BUFFER MOV CH, COUNT MOV BX, 00HLOP1: MOV AX, SI MOV CL, 16LOP2: SHR AX, 1 JNC NEXT INC BXNEXT: DEC CL JNZ LOP2 I
14、NC SI INC SI DEC CH JNZ LOP1 MOV RESULT, BX MOV AH, 4CH INT 21HCODE6 ENDSEND START子程序例4-32 子程序SUM的功能是对字节数组求和,用寄存器传送参数,主程序两次调用子程序,对不同的数组求和。程序清单如下:DATA7 SEGMENT; ARRYA DB a1,a2,a3,.,am COUNTA EQU $-ARRYA SUMA DW ?; ARRYB DB b1,b2,b3,.,bn COUNTB EQU $-ARRYB SUMB DW ?DATA7 ENDS STACK1 SEGMENT STAK DB 10
15、0 DUP(?) TOP EQU 100STACK1 ENDSCODE7 SEGMENT ASSUME CS:CODE7,DS:DATA7,SS:STACK1MAIN: MOV AX, DATA7 MOV DS,AX MOV AX,STACK1 MOV SS,AX MOV SP,TOP LEA SI,ARRYA LEA DI,SUMA MOV CX,COUNTA CALL SUM MOV SI,OFFSET ARRYB MOV DI,OFFSET SUMB MOV CX,COUNTB CALL SUM MOV AH,4CH INT 21HCODE7 ENDS;子程序名为SUM,对字节数组求和;
16、SI=数组起始地址;CX=数组长度;DI=有效数组和目的地址SUM PROC NEAR PUSH AX PUSH BX MOV AX,00HAGAIN:MOV BL ,SI MOV BH,0 ADD AX,BX INC SI LOOP AGAIN MOV DI,AX POP BX POP AX RETSUM ENDP END MAIN存储器地址及其分配例5-1图为某一8088系统的存储器连接图,试确定其中各芯片的地址空间。片选:选中所用芯片(高位地址线)字选:选中所用存储单元(低位地址线)分析:对于芯片的使用 1、若使74LS138起作用,需满足:A17=1;A19=A18=0;A16=A15
17、=A14=0时选中 Y0 A16=1,A15=A14=0时选中Y4 2、若选中27128(16K EPROM,需14根地址线A13A0)需满足:1)Y0=0 (A16=A15=A14=0)A19A18A17A16A15A14A13A12A1127128:20000H23FFFHA0001000000011113、若选中1#6264(8K SRAM,需13根地址线A12A0)需满足:1)A13=0;2)Y4=0 (A16=1,A15=0,A14=0)A19A18A17A16A15A14A13A12A111#6264:30000H31FFFHA000110000001114、若选中2#6264需满
18、足:需满足:1)A13=1; 2)Y4=0 (A16=1,A15=0,A14=0)A19A18A17A16A15A14A13A12A112#6264:32000H33FFFHA00010001000111例5-2 设计某一16位微处理器系统,要求存储容量位8K的EPROM,采用2764芯片,地址为FE000HFFFFFH;RAM容量为16K,选用6264芯片,地址为F0000HF3FFFH。采用全译码方式。分析:1)2764 EPROM 8K8 (需1片);6264 SRAM 8K8 (需2片)2)对于2764: 地址范围FE000HFFFFFH,当A15=A14=A13=1时, 选中Y7,2
19、764片选端 CE使能。CBAA19A18A17A16A15A14A13A12A11A0111111100011111111113)对于6264:地址范围F0000HF3FFFH,(8K需13根地址线0000H1FFFH)2#6264:F0000H+1FFFH=F1FFFH(F0000HF1FFFH)1#6264:F2000H+1FFFH=F3FFFH(F2000HF3FFFH)当A15=A14=A13=0时,选中 Y0,2#6264片选端 CE使能当A15=A14=0,A13=1时,选中Y1,1#6264片选端 CE使能CBAA19A18A17A16A15A14A13A12A11A02#11
20、1100000011110001111#11110010001111001111例5-3 用存储器芯片SRAM 6116构成一个4KB的存储器,要求其地址范围在78000H78FFFH之间。分析::记住:210=1K (A9A8A7A0: .00 0000 0000 11 1111 1111 )1K:0000H03FFH3K:0000H0BFFH (1K+2K)2K:0000H07FFH4K:0000H0FFFH8K:0000H1FFFH题目要求:地址范围为78000H78FFFH的4KB内存空间,而6116为2K8故需2片。2K:78000H787FFH (78000H+07FFH=787F
21、FH)2K:78800H78FFFH (78800H+07FFH=78FFFH)CBAA19A18A17A16A15A14A13A12A11A10A001111000000Y00111100001101111000100Y101111000111思考:首地址为42000H,组成6K空间,末地址是多少?(答案:437FFH 提示:6K=4K+2K)8255的应用例7-3 利用8255作为打印机的连接接口,并通过该打印机接口打印字符串,字符串长度放在DS段的COUNT单元中,要打印的字符存放在从DATA单元开始的数据区中。8255与打印机的连接CPU通过8255接口将数据传送到打印机的D0D7端,
22、然后利用一个负脉冲STROBE(宽度1s)将数据锁存在打印机内部,以便打印机进行处理。同时,打印机的BUSY端送出高电平信号,表示其正忙。仅当BUSY端信号变低后,CPU才可以将下一个数据送给打印机。INT:MOV DX,0FBC3H;8255的控制寄存器端口地址送DXMOV AL,10000001B;A组方式0:A口输出,C口高4位输出;B组方式0:B口输出,C口低4位输入OUT DX,AL;方式控制字送控制寄存器MOV AL,00001101B;C口的按位操作控制字,使PC6初始状态置1OUT DX,AL;C口位操作控制字送控制寄存器下面是打印一批字符的程序段:MOV CX,COUNT;将
23、字符串长度作为循环次数MOV SI ,OFFSET DATA;取字符串首地址GOON:MOV DX,0FBC2H;0FBC2H为C口的地址IN AL,DX;从C口读入打印机的BUSY信号状态AND AL,02HJNZ GOON;若BUSY为高电平则循环等待MOV AL,SI;否则取一个字符MOV DX,0FBC0H;0FBC0H为A口的地址OUT DX,AL;输出一个字符到A口MOV DX,0FBC2H;准备在PC6上生成一个负脉冲MOV AL,0OUT DX,AL;因仅PC6接打印机,故由C口输出00H将使PC6变低MOV AL,40HOUT DX,AL;在使PC6变高,在PC6上生成一个STROBE负脉冲INC SI;指向下一个字符LOOP GOON;若未结束则继续HLT注:STROBE负脉冲也可以利用控制字对C口的按位置位/复位操作来实现。MOV DX,0FBC3HMOV AL,00001100B; PC6复位(=0)OUT DX,ALMOV AL,00001101B; PC6置位(=1)OUT DX,AL附 录1 许立梓等编 . 微型计算机原理及应用 . 北京:机械工业出版社, 20082 冯博琴主编 . 微型计算机原理与接口技术 . 北京: 清华大学出版社, 2002
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1