收藏 分销(赏)

微机原理期末考试习题选讲.doc

上传人:仙人****88 文档编号:12071843 上传时间:2025-09-06 格式:DOC 页数:18 大小:774.04KB 下载积分:10 金币
下载 相关 举报
微机原理期末考试习题选讲.doc_第1页
第1页 / 共18页
微机原理期末考试习题选讲.doc_第2页
第2页 / 共18页


点击查看更多>>
资源描述
微机原理习题选讲 江苏大学机械学院测控系 2011年9月存储器数据组织 : : : VAR1 32H 41H ‘A’ 42H ‘B’ 43H ‘C’ VAR2 34H 1234H 12H 40H 0040H 00H 42H ‘B’ 41H ‘A’ 78H 12345678H 56H 34H 12H -- 预留的存储单元 C3H 11000011B ARRY1 00H 第一组字节方式的0,1 01H 00H 第二组字节方式的0,1 01H ARRY2 -- 第一组字方式的?,1 -- 01H 00H -- 第二组字方式的?,1 -- 01H 00H : : : 例4-3 VAR1 DB 32H, ’ABC’ VAR2 DW 1234H,40H, ’AB’ DD 12345678H DB ?,11000011B ARRY1 DB 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=1000H×16+2400H=12400H (2) 该指令的源操作数字段是寄存器间接寻址方式 物理地址PA=(SS)×16+(BP)=1100H×16+0600H=11600H (3) 该指令的源操作数字段是寄存器相对寻址方式 物理地址PA=(ES)×16+(BP)+10=2000H×16+0600H+000AH=2060AH (4) 该指令的源操作数字段是寄存器相对基址变址寻址方式 物理地址PA=(DS)×16+(BX)+(SI)+25 =1000H×16+0200H+1010H+0019H=11229H 2. 请指出下列指令中得错误: (1)MOV DS,12H (2)MOV AH,400 (3)MOV BP,AL (4)MOV AX,[SI][DI] (5)OUT 257H,AL (6)MOV BYTE PTR[BX],1000 (7)MOV [BX],[SI] (8) MOV 4[DI],02 (9) MOV [BX+SI+3],IP (10)PUSH BH 解: (1)不能直接向DS中送立即数 (2)400超过了一个字节的范围 (3)寄存器类型不匹配 (4)SI、DI不能同时使用 (5)直接寻址的输出指令中,端口号只能在0~0FFH范围内 (6)1000超过了一个字节的范围 (7)源和目的操作数不能同时为存储器操作数 (8)源操作数与目的操作数的类型不明确 (9)IP不能作源和目的操作数 (10)PUSH是字操作指令 3. 请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态: MOV AX,7896H ADD AL,AH ADD AH,AL ADD 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=8600H,所以各标志位状态为:CF=1,ZF=1,SF=0,OF=0,AF=1,PF=1。 4. X、Y、Z均为16位带符号数,请编写一个程序段计算表达式(X*Y+Z-1000)/70的值。 解:假设X、Y和Z分别存放在名为DATAX、DATAY和DATAZ的变量单元中。计算结果保存在AX中,余数保存在DX中,则程序段如下: MOV AX,DATAX IMUL DATAY ;计算X*Y MOV CX,AX MOV BX,DX ;积保存到BX:CX MOV AX,DATAZ CWD ;将DATAZ扩展成32位 ADD AX,CX ;计算和 ADC DX,BX SUB AX,1000 ;计算差 SBB DX,0 MOV CX,70 ;计算商和余数 IDIV CX 汇编程序基本设计方法 简单(顺序)程序 例4-25 有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。 程序清单: 被加数 → AX 被加数 +加数→ AX 初始化 取段基址 →DS 源操作数指针 →SI 目的操作数指针→DI 开始 结果送Z 结束 DATA SEGMENT X DW 3456H Y DW 0ABCDH Z DW 00 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS ,AX LEA SI,X LEA DI,Y MOV AX,[SI] ADD AX,[DI] MOV Z,AX MOV AH,4CH INT 21H CODE ENDS END START 取BCD码 → AL 高4位清零 初始化 取段基址 →DS 源操作数指针 →SI 目的操作数指针→DI 开始 清零后的数加30H 转换成ASCII码 低位数送低位内存 再取BCD码→AL 右移4位,高位补零 加30H转化ASCII码 高位数送高位内存 结束 例4-26把压缩BCD码表示的数M,转换为两个相应的ASCII码,结果存在紧跟M后的两个内存单元,低位在前,高位在后。 程序清单: DATA1 SEGMENT M DB ? N DB 2DUP(00) DATA1 ENDS CODE1 SEGMENT ASSUME DS:DATA1,CS:CODE1 START: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 ENDS END START 分支程序 例4-27内存单元M有一个16位带符号数,求其绝对值,并将结果放回原处。 程序清单: DATA2 SEGMENT M DW ? 将带符号数送AX 初始化 取段基址送DS 取操作数指针送SI 开始 将求绝对值的数 送回原内存 结束 求补 小于零吗? Y N DATA2 ENDS CODE2 SEGMENT ASSUME DS:DATA2,CS:CODE2 START:MOV AX, DATA2 MOV DS,AX LEA SI,M MOV AX,[SI] AND AX,AX JNS DONE NEG AX DONE: MOV [SI],AX MOV AH,4CH INT 21H CODE2 ENDS END START 例4-28编写实现下列函数的程序。 将X的值送AX 初始化 取段基址送DS 取X的指针送SI 开始 AX≥0? Y N Y=-1 Y=0 AX>0? Y N 结束 Y=1 Y= 1 (当X>0) 0 (当X=0) -1 (当X<0) 程序清单如下: DATA3 SEGMENT X DW ? Y DW ? DATA3 ENDS CODE3 SEGMENT ASSUME CS:CODE3,DS:DATA3 START:MOV AX, DATA3 MOV DS,AX LEA SI,X MOV AX,[SI] AND AX,AX JNS LP1 MOV Y,0FFH JMP END1 LP1: JNZ LP2 MOV Y,00H JMP END1 LP2: MOV Y,01H END1:MOV AH,4CH INT 21H CODE3 ENDS END START 循环程序 取加数送AL 初始化 取段基址送DS 取操作数指针送SI 累加器DX清零 累加次数10送循环计数器 开始 保存结果 结束 DX+AX→DX CX-1→CX=0? Y N 带符号数扩展成16位数送AX 修改数据指针 SI+1→SI 例4-29 以ARRY开始的字节数组有10个带符号数,求出它们的和,并将和送到SUM字单元中。 程序清单如下: DATA4 SEGMENT ARRAY DB a1,a2,a3,...a10 SUM DW ? DATA4 ENDS CODE4 SEGMENT ASSUME CS:CODE4,DS:DATA4 START:MOV AX, DATA4 MOV DS,AX LEA SI,ARRAY XOR DX,DX MOV CX.10 DONE: MOV AL,[SI] CBW ADD DX,AX INC SI LOOP DONE MOV SUM,DX MOV AH,4CH INT 21H CODE4 ENDS END START 例子4-30 统计数据段string字符串的字符个数,将统计值存入count单元,字符串是由字符$值为结束符的,统计时$不统计在内。 程序清单如下: DATA5 SEGMENT STRING DB 'How are you!','$' 取字符送AL 初始化 取段基址送DS 设置数据块指针SI 设置字符计数器CX=0 开始 统计值CX送COUNT 结束 CX+1→CX AL=$? N Y SI+1→SI COUNT DW ? DATA5 ENDS CODE5 SEGMENT ASSUME CS:CODE5,DS:DATA5 START:MOV AX, DATA5 MOV DS,AX MOV SI,OFFSET STRING XOR CX,CX AGAIN:MOV AL,[SI] CMP AL,'$' JZ DONE INC CX INC SI JMP AGAIN DONE: MOV COUNT,CX MOV AH,4CH INT 21H CODE5 ENDS END START 例4-31 数据段buffer数组有100个字数据,统计该数组中所有为“1” 的位的个数,统AX右移1位 外循环初始化 设置计“1”计数器BX,初值=0 设置地址指针SI 设置外循环次数CH=100 开始 CF=1? Y N BX+1→BX Y N 结束 将统计结果BX送RESULT 内循环初始化 取字数据送AX 设置内循环次数CL=16 CL-1→CL 修改字指针 SI+2→SI CH-1→CH CH=0? CL=0? N Y LOP1 LOP2 计结果存入result单元。 程序清单如下: DATA6 SEGMENT BUFFER DW a1,a2,a3,...,a100 COUNT EQU 100 RESULT DW ? DATA6 ENDS CODE6 SEGMENT ASSUME CS: CODE6, DS:DATA6 START: MOV AX, DATA6 MOV DS, AX MOV SI, OFFSET BUFFER MOV CH, COUNT MOV BX, 00H LOP1: MOV AX, [SI] MOV CL, 16 LOP2: SHR AX, 1 JNC NEXT INC BX NEXT: DEC CL JNZ LOP2 INC SI INC SI DEC CH JNZ LOP1 MOV RESULT, BX MOV AH, 4CH INT 21H CODE6 ENDS END 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 100 DUP(?) TOP EQU 100 STACK1 ENDS CODE7 SEGMENT ASSUME CS:CODE7,DS:DATA7,SS:STACK1 MAIN: 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 21H CODE7 ENDS ;子程序名为SUM,对字节数组求和 ;SI=数组起始地址 ;CX=数组长度 ;DI=有效数组和目的地址 SUM PROC NEAR PUSH AX PUSH BX MOV AX,00H AGAIN:MOV BL ,[SI] MOV BH,0 ADD AX,BX INC SI LOOP AGAIN MOV [DI],AX POP BX POP AX RET SUM ENDP END MAIN 存储器地址及其分配 例5-1图为某一8088系统的存储器连接图,试确定其中各芯片的地址空间。 片选:选中所用芯片(高位地址线) 字选:选中所用存储单元(低位地址线) 分析:对于芯片的使用 1、若使74LS138起作用,需满足: A17=1;A19=A18=0;A16=A15=A14=0时选中 Y0 A16=1,A15=A14=0时选中Y4 2、若选中27128(16K EPROM,需14根地址线A13~A0) 需满足:1)Y0=0 (A16=A15=A14=0) A19 A18 A17 A16 A15 A14 A13 A12 A11 …… 27128: 20000H~23FFFH A0 0 0 1 0 0 0 0 0 0 …… 0 1 1 1 …… 1 3、若选中1#6264(8K SRAM,需13根地址线A12~A0) 需满足:1)A13=0; 2)Y4=0 (A16=1,A15=0,A14=0) A19 A18 A17 A16 A15 A14 A13 A12 A11 …… 1#6264: 30000H~31FFFH A0 0 0 1 1 0 0 0 0 0 …… 0 1 1 …… 1 4、若选中2#6264需满足: 需满足:1)A13=1; 2)Y4=0 (A16=1,A15=0,A14=0) A19 A18 A17 A16 A15 A14 A13 A12 A11 …… 2#6264: 32000H~33FFFH A0 0 0 1 0 0 0 1 0 0 …… 0 1 1 …… 1 例5-2 设计某一16位微处理器系统,要求存储容量位8K的EPROM,采用2764芯片,地址为FE000H~FFFFFH;RAM容量为16K,选用6264芯片,地址为F0000H~F3FFFH。采用全译码方式。 分析:1)2764 EPROM 8K×8 (需1片);6264 SRAM 8K×8 (需2片) 2)对于2764: 地址范围FE000H~FFFFFH,当A15=A14=A13=1时, 选中Y7,2764片选端 CE使能。 C B A A19 A18 A17 A16 A15 A14 A13 A12 A11 …… A0 1 1 1 1 1 1 1 0 0 …… 0 1 1 1 1 1 1 1 1 1 …… 1 3)对于6264:地址范围F0000H~F3FFFH,(8K需13根地址线0000H~1FFFH) 2#6264:F0000H+1FFFH=F1FFFH→(F0000H~F1FFFH) 1#6264:F2000H+1FFFH=F3FFFH→(F2000H~F3FFFH) 当A15=A14=A13=0时,选中 Y0,2#6264片选端 CE使能 当A15=A14=0,A13=1时,选中Y1,1#6264片选端 CE使能 C B A A19 A18 A17 A16 A15 A14 A13 A12 A11 …… A0 2# 1 1 1 1 0 0 0 0 0 …… 0 1 1 1 1 0 0 0 1 1 …… 1 1# 1 1 1 1 0 0 1 0 0 …… 0 1 1 1 1 0 0 1 1 1 …… 1 例5-3 用存储器芯片SRAM 6116构成一个4KB的存储器,要求其地址范围在78000H~78FFFH之间。 0 0 1 1 1 1 分析:: 记住:210=1K (A9A8A7…A0: ...00 0000 0000 ~ …11 1111 1111 ) 1K:0000H~03FFH 3K:0000H~0BFFH (1K+2K) 2K:0000H~07FFH 4K:0000H~0FFFH 8K:0000H~1FFFH 题目要求:地址范围为78000H~78FFFH的4KB内存空间,而6116为2K×8故需2片。 ①2K:78000H~787FFH (78000H+07FFH=787FFH) ②2K:78800H~78FFFH (78800H+07FFH=78FFFH) C B A A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 …… A0 0 1 1 1 1 0 0 0 0 0 …… 0 ① Y0 0 1 1 1 1 0 0 0 0 1 …… 1 0 1 1 1 1 0 0 0 1 0 …… 0 ② Y1 0 1 1 1 1 0 0 0 1 1 …… 1 思考:首地址为42000H,组成6K空间,末地址是多少? (答案:437FFH 提示:6K=4K+2K) 8255的应用 例7-3 利用8255作为打印机的连接接口,并通过该打印机接口打印字符串,字符串长度放在DS段的COUNT单元中,要打印的字符存放在从DATA单元开始的数据区中。 8255与打印机的连接 CPU通过8255接口将数据传送到打印机的D0~D7端,然后利用一个负脉冲STROBE(宽度≥1μs)将数据锁存在打印机内部,以便打印机进行处理。同时,打印机的BUSY端送出高电平信号,表示其正忙。仅当BUSY端信号变低后,CPU才可以将下一个数据送给打印机。 INT: MOV DX,0FBC3H ;8255的控制寄存器端口地址送DX MOV AL,10000001B ;A组方式0:A口输出,C口高4位输出 ;B组方式0:B口输出,C口低4位输入 OUT DX,AL ;方式控制字送控制寄存器 MOV AL,00001101B ;C口的按位操作控制字,使PC6初始状态置1 OUT DX,AL ;C口位操作控制字送控制寄存器 下面是打印一批字符的程序段: MOV CX,COUNT ;将字符串长度作为循环次数 MOV SI ,OFFSET DATA ;取字符串首地址 GOON: MOV DX,0FBC2H ;0FBC2H为C口的地址 IN AL,DX ;从C口读入打印机的BUSY信号状态 AND AL,02H JNZ GOON ;若BUSY为高电平则循环等待 MOV AL,[SI] ;否则取一个字符 MOV DX,0FBC0H ;0FBC0H为A口的地址 OUT DX,AL ;输出一个字符到A口 MOV DX,0FBC2H ;准备在PC6上生成一个负脉冲 MOV AL,0 OUT DX,AL ;因仅PC6接打印机,故由C口输出00H将使PC6变低 MOV AL,40H OUT DX,AL ;在使PC6变高,在PC6上生成一个STROBE负脉冲 INC SI ;指向下一个字符 LOOP GOON ;若未结束则继续 HLT 注:STROBE负脉冲也可以利用控制字对C口的按位置位/复位操作来实现。 MOV DX,0FBC3H MOV AL,00001100B; PC6复位(=0) OUT DX,AL MOV AL,00001101B; PC6置位(=1) OUT DX,AL 附 录 1 许立梓等编 . 微型计算机原理及应用 . 北京:机械工业出版社, 2008 2 冯博琴主编 . 微型计算机原理与接口技术 . 北京: 清华大学出版社, 2002
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服