微机原理第9章习题与答案.docx

上传人:b****8 文档编号:28562298 上传时间:2023-07-19 格式:DOCX 页数:16 大小:52.27KB
下载 相关 举报
微机原理第9章习题与答案.docx_第1页
第1页 / 共16页
微机原理第9章习题与答案.docx_第2页
第2页 / 共16页
微机原理第9章习题与答案.docx_第3页
第3页 / 共16页
微机原理第9章习题与答案.docx_第4页
第4页 / 共16页
微机原理第9章习题与答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微机原理第9章习题与答案.docx

《微机原理第9章习题与答案.docx》由会员分享,可在线阅读,更多相关《微机原理第9章习题与答案.docx(16页珍藏版)》请在冰豆网上搜索。

微机原理第9章习题与答案.docx

微机原理第9章习题与答案

习题

一、选择题

1.对8255A的C口执行按位置位/复位操作时,写入的端口地址是______。

A.端口AB.端口BC.端口CD.控制口

答案:

D

2.要将8255A的3个8位的I/O端口全部设定为方式0的输入,其设置的方式控制字为____。

答案:

D

3.当8255A的A口工作在方式1,B口工作在方式1时,C口仍然可按基本的输入输出方式工作的端口线有_________条。

答案:

B

4.当8255A端口PA、PB分别工作在方式2、方式1时,其PC端口引脚为_______。

答案:

C

5.如果8255A的端口A工作在双向方式,这时还有_____根I/O线可作其他用。

答案:

A

4~PC7全部为输出线时,表明8255A的A端口工作方式是______。

答案:

A

7.8255A中既可以作为数据输入、输出端口,又可以提供控制信息、状态信息的端口是____。

A.端口AB.端口BC.端口CD.控制口

答案:

C

8.8255A的端口A和端口B工作在方式1输出时,与外部设备的联络信号将使用____信号。

A.INTRB.

C.INTED.IBF

答案:

B

二、填空题

1.当8255A的A口工作于方式1输入,B口工作于方式0时,C口的_____位可以作为输入输出口使用。

答案:

5位

2.若要求8255A的A、B口工作在方式1,作为输入,C口作为输出,则输入8255A控制口的控制字为______。

答案:

B6H

3.若8255A的端口B工作在方式1,并为输出口,置位PC2的作用为______。

答案:

允许端口B输出中断

4.当数据从8255A的端口C往数据总线上读出时,8255的几个控制信号

、A1、A0、

分别是__________________。

答案:

01001

5.8255A在方式0工作时,端口A、B和C的输入输出可以有_______种组合。

答案:

16

三、问答题

8255A和外设之间有几个数据端口?

在结构上有什么区别?

答案:

3个数据端口

这3个端口与外设的数据接口都是8位,但功能不完全相同。

A口有3种工作方式,B口有2种工作方式,C口有1种工作方式。

C口可以分两部分使用,常用来配合A口和B口工作,C口的高四位PC7~PC4常用来配合A口工作,C口的低四位PC3~PC0常用来配合B口工作。

各端口在结构上有所不同:

端口A包含1个8位的数据输入锁存器,1个8位的数据输出锁存器;

端口B包含1个8位的数据输入缓冲器,1个8位的数据输出锁存器;

端口C包含1个8位的数据输入缓冲器,1个8位的数据输出锁存器。

2.8255A的地址信号线是什么?

共占用几个端口地址?

答案:

地址信号端A1、A0,有4种组合:

A1A0=00,选中端口A的寄存器;

A1A0=01,选中端口B的寄存器;

A1A0=10,选中端口C的寄存器;

A1A0=11,选中控制字寄存器。

3.A口工作于方式0,输入,B口工作于方式1,输出,C口的PC1作为输出联络口,PC2作为输入联络口,8255A占用的4个端口地址为80H~83H,编写初始化程序,画出端口地址的译码电路。

答案:

控制字:

1001010094H

MOVAL,94H

OUT83H,AL

4.8255A的A口和B口都工作于方式0,PC6作为输入联络口,PC2作为输出联络口。

当检测到PC6为“1”时,A口输出数据46H,并且PC2输出“1”。

设8255A的4个端口地址为108H~10EH,试编写以上操作程序段。

答案:

控制字:

1000100088HA口方式0输出C口高4位输入

PC2输出10000010105H

MOVDX,10EH

MOVAL,88H

OUTDX,AL;控制字

DECDX

NEXT:

INAL,DX

TESTAL,40H;测试PC6

JZNEXT;为0,继续查询

MOVDX,108H

MOVAL,46H

OUTDX,AL;A口输出

MOVAL,05H

MOVDX,10EH

OUTDX,AL;PC2输出

5.如题图9.1所示电路,当A口连接的开关闭合时,相应的B口连接的发光二极管亮。

(1)写出8255A的4个端口地址;

(2)编写程序完成以上操作。

题图9.1硬件电路连接

答案:

地址:

208H~20BH

控制字:

10010000A口发生0输入B口方式0输出

MOVDX,20BH

MOVAL,90H

OUTDX,AL

MOVDX,108H

INAL,DX;读A口

INCDX

OUTDX,AL;写B口

6.如题图9.2所示电路,B口工作于方式1输出,作为CPU和打印机之间的并行接口电路。

设8255A的端口地址为90H~93H,编写程序完成将RUF开始的1000个字节的数据打印。

题图9.2B口方式1输出

答案:

控制字1000010084HB口方式1输出

允许B口中断,可以查询中断指示状态:

PC2置1,00000101

MOVAL,84H

OUT93H,AL;写控制字

MOVAL,05H

OUT93H,AL;写中断允许

LEASI,RUF

MOVCX,1000

L1:

MOVAL,[SI];将数据传送至AL

OUT91H,AL;从A口输出数据,

使

变为低电平

L2:

INAL,92H;从C口读取状态字

;打印机取走数据后,

变为低电平,并将

变为高电平

ANDAL,01H;判断B口是否提出中断申请

JZL2;如果没有,继续检测状态字

INCSI;

DECCX

JNZL1

HLT

 

习题3答案

1.指出下列指令的错误原因。

(1)ANDAX,DL;类型不匹配

(2)ADDCS,DX;CS不能作为目的操作数

(3)MOVAX,IP;IP不能作为指令的操作数

(4)MOV[BP][SI],[SI];两个操作数不能同时为内存操作数

(5)SUB[BP][SI],ES:

DX;段超越前缀只能用在内存操作数之前

(6)XCHGAL,[SI][DI];没有[SI][DI]这种操作数形式

(7)JGEAX;条件转移指令的操作数只能是标号

(8)PUSHDL;对堆栈不能进行字节操作

2.用一条指令将BX清0。

(请给出3种方法)

方法1:

MOVBX,0

方法2:

SUBBX,BX

方法3:

ANDBX,0;将BX和0做与,可以将BX清零

方法4:

XORBX,BX

3.写出实现下列功能的指令序列。

(1)判断AX的值,若AX等于0,则转到标号LABEL处。

(请写出3种方法)

方法1:

CMPAX,0

JZLABEL;如果ZF=0,说明AX为0,因为CMP指令是做减法,但是不写回结果

;因此指令执行后AX内容不会受到破坏

方法2:

TESTAX,0FFH

JZLABEL;如果ZF=0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。

;和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已

;经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏

方法3:

ANDAX,0FFH;这个方法的原理和方法2其实是完全一致的

JZLABEL

(2)将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。

MOVAH,AL

ANDAL,0FH;AL高4位通过与清零,而低4位保持不变

MOVCL,4

SHRAH,CL;这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零

(3)若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。

TESTAX,01H;TEST做与运算,通过与来检测AX的最低位

JNZCONTINUE;如果ZF=1,说明AX的最低位是0,那么AX中的数是偶数,就跳转,否则,

;说明AX中的是奇数,而BX中的是偶数,符合结果要求,不用动了

XCHGAX,BX

CONTINUE:

….

4.分析下列指令序列完成什么功能。

MOVCL,4

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

答案:

将DX.AX中的32位数整体逻辑左移4位。

5.给出下列各条指令执行后AL以及CF、OF、SF、和ZF的值。

指令

AL

CF

OF

SF

ZF

备注

MOVAL,100

100/64H

XORAL,AL

100/64H

0

0

1

0

XOR后CF=OF=0,其余据结果设置

MOVAL,-1

-1/0FFH

0

0

1

0

MOV指令不影响标志位

INCAL

0

0

0

0

1

INC不影响CF,其余据结果设置

NOTAL

0FFH

0

0

0

1

NOT指令不影响标志位

SHLAL,1

0FEH

1

0

1

0

SHL据移出的位设CF,据结果设SF,ZF,一位移动,据移位前后最高位是否变化设置,有变化OF=1,无变化OF=0

CMPAL,10

0FEH

0

0

1

0

CMP指令根据结果设置6个标志位

SUBAL,7FH

7FH

0

0

0

0

SUB根据俄结果设置6个标志位

SHLAL,1

0FEH

0

1

1

0

解释同上

6.比较AX,BX和CX中无符号数的大小,将最小数放入AX中。

答案:

CMPAX,BX

JCBBB;如果AX<=BX,跳转

XCHGAX,BX;否则,交换AX和BX的值,将两者中的小值放到AX中去

BBB:

CMPAX,CX

JCCCC;如果AX<=CX,跳转

XCHGAX,CX;否则,交换AX和CX的值,将两者中的小值放到CX中去

CCC:

INT20H;返回DOS

7.变量定义伪指令与符号定义伪指令的主要作用是什么?

答案:

变量定义伪指令:

主要用来为某种类型(比如字节型、字型)的内存单元的地址指定一个可以引用的名字标识。

符号定义伪指令:

其实就是定义一个宏替换常量,用定义的符号代表一个文本串或者一个数值,在程序中遇到定义的符号时用相应的文本串或者数值去替换。

8.设有下列段定义:

DSEGSEGMENT

XDW1,3

DSEGENDS

给出下列两组指令序列分别执行后AX的值。

(1)MOVAX,DSEG

MOVDS,AX

MOVAX,X+1

(2)MOVAX,SEGX

MOVES,AX

MOVAX,ES:

X

INCAX

答案:

(1)(AX)=2

(2)(AX)=2

备注:

这两小段程序实现的功能是相同的,都是给子类型的变量X的值加1。

第二段程序采用了段超越方式来寻址操作数。

9.设有如下定义的数据段:

DATASEGMENT

ORG100

V1DW2DUP(20),$+10

BUF1DB‘100’,5

DD0

BUF2DW1,2,2A9H

LENEQUBUF2–BUF1

VADWBUF1

DATAENDS

则V1+1中存放的字节数据为(0),V1+4中存放的字数据为(114/72H),VA的内容为(106/6AH),LEN的值为(8)。

10.在数据段定义的两个变量S1和S2,要求设计一个完整的程序,将以S1为首地址的50个字节依次传送到以S2为首地址的内存单元中。

datasgsegment

s1db25dup('12')

s2db50dup(0)

datasgends

codesgsegment

assumecs:

codesg,ds:

datasg

start:

movax,datasg

movds,ax

moves,ax

movsi,offsets1

movdi,offsets2

movcx,50

repmovsb

movax,4c00h

int21h

codesgends

endstart

11.从键盘读入一个字符串(长度<50),统计其字母、数字及其他字符的个数。

F

datasgsegment

buff1db50;最大能容纳的字符个数

countdb(?

);实际输入的字符个数

buff2db50dup(?

);实际字符缓冲区

lettersdb0;输入的字母个数

digitsdb0;输入的数字个数

othersdb0;输入的其他字符的个数

datasgends

codesgsegment

assumecs:

codesg,ds:

codesg

start:

movax,datasg

movds,ax

movdx,offsetbuff1;为0AH号系统功能调用准备输入参数DS:

DX指向输入缓冲区的首地址

movah,0ah

int21h

xoral,al

movch,0

movcl,count;CX中存放循环次数

movsi,offsetbuff2;为lodsb准备源地址,DS:

SI指向实际的字符串地址

cld

check:

lodsb;取一个数据到AL

cmpal,'A'

jcx1

cmpal,'Z'

jncx1

incletters;将字符串中的大写字母个数统计到letters变量中

jmpnext

x1:

cmpal,'a'

jcx2

cmpal,'z'

jncx2

incletters;将字符串中的小写字母个数统计到letters变量中

jmpnext

x2:

cmpal,'1'

jcx3

cmpal,'9'

jncx3

incdigits;将字符串中的数字字符统计到digits变量中

jmpnext

x3:

incothers;统计其他字符个数

next:

loopcheck

movax,4c00h

int21h

codesgends

endstart

12.设计一个程序,求10个无符号数中的最大值。

并将最大值存入变量MAX中。

datasgsegment

arraydb20,12,16,14,13,90,45,32,67,100;字节型数组

maxdb0

datasgends

codesgsegment

assumecs:

codesg,ds:

datasg

start:

movax,datasg

movds,ax

leasi,array;数组首地址

movcx,10;数组元素个数

cld;让地址值不断增大

lodsb;将第一个数组元素放到AL中

movmax,al

deccx

next:

lodsb;取下一个数组元素到AL中

cmpal,max

jcgoon;(al)<=max则max中的值不变

movmax,al;否则max=(al)

goon:

loopnext

movax,4c00h

int21h

codesgends

endstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1