微机原理习 题 2.docx

上传人:b****7 文档编号:26238191 上传时间:2023-06-17 格式:DOCX 页数:22 大小:26.86KB
下载 相关 举报
微机原理习 题 2.docx_第1页
第1页 / 共22页
微机原理习 题 2.docx_第2页
第2页 / 共22页
微机原理习 题 2.docx_第3页
第3页 / 共22页
微机原理习 题 2.docx_第4页
第4页 / 共22页
微机原理习 题 2.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理习 题 2.docx

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

微机原理习 题 2.docx

微机原理习题2

习题2

2.18086/8088CPU分为哪两大功能部件?

其各自得主要功能就是什么?

8086/8088CPU中有哪些寄存器?

各有什么用途?

解:

从功能上来瞧,Intel8086/8088微处理器可分为两部分,即执行单元EU(Execution Unit)与总线接口单元BIU(BusInterfaceUnit)、

执行单元EU得功能就是负责指令得译码、执行,包括算术、逻辑运算,控制等。

总线接口单元BIU得功能就是负责8086/8088对存储器与I/O设备得所有访问操作。

具体包括:

负责从内存单元中预取指令,并将其送到指令队列缓冲器暂存;从内存单元或外设端口中读取操作数或者将指令得执行结果传送到指定得内存单元或外设端口;根据有效地址(EA)形成物理地址(PA)、

8086/8088有4个16位数据寄存器:

AX、BX,CX,DX,它们既可作为16位寄存器使用,存放数据或地址,也可以分别作为两个 8位寄存器使用。

8086/8088有2个16位变址寄存器:

SI、DI,通常与DS联用,为访问当前数据段提供段内偏移地址或偏移地址分量、

8086/8088有2个16位地址指针寄存器:

SP,BP,它们一般就是用来存放堆栈操作数得偏移地址。

总线接口单元(BIU)中设置有4个16位得段寄存器,分别就是代码段寄存器(CS),数据段寄存器(DS),堆栈段寄存器(SS)与附加段寄存器(ES)。

指令指针寄存器(InstructionPointer,IP) 用来存放下一条要执行得指令在当前代码段中得偏移地址。

标志寄存器也称程序状态字(PSW)寄存器,用来存放运算结果得特征与机器工作状态。

2.28086/8088CPU中标志寄存器有哪两类标志?

简述各标志位得含义、

解:

①(ZeroFlag,ZF)—-零标志。

若本次运算结果为0,则ZF=1,否则ZF=0。

②(SignF1agSF)——符号标志、此标志用于反映有符号数运算结果得符号就是正还就是负。

对于有符号数,用最高位表示数得符号,当本次运算结果最高位为1,表示结果为负数,则SF=1,否则SF=0。

③(ParityFlag,PF)——奇偶标志。

此标志就是反映运算结果中最低字节中含“1"得个数为0或偶数时,PF=1,为奇数时,PF=0。

注意,PF标志仅反映运算结果得最低8位中“1"得个数就是偶数或奇数,即使就是进行16位字操作也就是如此、

④(Auxiliary CarryFlag,AF)——辅助进位标志。

当进行8位数(字节)或16位数( 字)得低8位运算时,低4 位向高4位(即D3位向D4位)有进位或借位时,AF=1,否则AF=0。

AF标志主要供BCD码十进制算术指令判别就是否要进行十进制调整,用户一般不必关心。

⑤(CarryFlag,CF)——进位标志。

当本次算术运算结果使最高位产生进位(加法运算)或借位( 减法运算) 时,则此标志位置“1”,即CF=1;若加法运算结果最高位无进位,或减法运算结果最高位无借位,则CF=0。

⑥(OverflowFlag,OF)-—溢出标志。

当运算结果产生溢出时,使OF=1,否则OF=0。

2.3简述伪指令“EQU”与“=”之间有什么区别?

解:

“EQU”伪指令不能重复定义,而“="伪指令可以重复定义。

2.4画图说明下列语句分配得存储空间及初始化得数值

(1)FF1DB'0100’,2+5,?

’ABC'

(2)FF2DW2DUP(?

),'A','BC’,1000H,25H

(3)FF3ﻩDBﻩ2DUP(1,2 DUP(2,3),4)

偏移地址

内容

变量名

0000H

30H

FF1

0001H

31H

0002H

30H

0003H

30H

0004H

07H

0005H

00H

0006H

41H

0007H

42H

0008H

43H

0009H

00H

FF2

000AH

00H

000BH

00H

000CH

00H

000DH

41H

000EH

00H

000FH

43H

0010H

42H

0011H

00H

0012H

10H

0013H

25H

0014H

00H

0015H

01H

FF3

0016H

02H

0017H

03H

0018H

02H

0019H

03H

001AH

04H

001BH

01H

001CH

02H

001DH

03H

001EH

02H

001FH

03H

0020H

04H

2.5指出下列指令得错误。

ﻩA1ﻩDBﻩ?

ﻩA2ﻩDB10

K1ﻩEQU1024

(1)MOVK1,AXﻩ

(2)MOVA1,AX

(3)CMPA1,A2ﻩ(4)K1EQU2048

(5)MOVAX,BHﻩﻩﻩ(6)MOV [BP],[DI]

(7)XCHGCS,AXﻩﻩ(8)POPCS

解:

(1)立即数不能为目得操作数

(2)两个操作数得类型不一致

(3)两个操作数不能同时为存储器操作数

(4)K1不能用EQU重复定义

(5)两个操作数类型不匹配

(6)两个操作数不能同时为存储器操作数

(7)CS不能作为XCHG得操作数

(8)CS不能为目得操作数

2.6假设在数据段进行如下得定义:

DATAﻩﻩSegment

XXDB-50,71,5,65,0

ﻩYYDBﻩ200 DUP(’ABCD')

ZZDW100DUP(?

ﻩﻩWWﻩDW25H,1052H,370H,851H

 DATAﻩﻩENDS

(1)用一条指令将YY得偏移地址送入BX

(2)用一条伪指令给出该数据段占用所有字节长度

(3)用一条伪指令给出变量ZZ分配得字节数目

(4)编写一段程序将WW数组中得数据全部送入YY缓冲区

(5)将数组XX中得第二个数据与第五个数据进行调换

解:

(1)LEABX,YY

(2)在数据段得最后加上:

LEN EQU$-XX

(3)ZZLENEQUWW-ZZ

(4)MOV AX,WW

 MOV YY,AX

MOVAX,WW+2

 MOV YY+2,AX

MOVAX,WW+4

MOVYY+4,AX

MOV AX,WW+6

MOV YY+6,AX

(5)MOVAL,XX+1

 MOV XX+4,AL

2.7什么叫寻址方式?

8086/8088指令系统有哪些寻址方式?

解:

指令中操作数得寻找方法称为寻址方式。

8086/8088系统所支持得七种基本寻址方式:

立即寻址, 寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址与相对基址变址寻址、

2.8将首地址为BLOCK得字数组中得第100个数送入AX中,试写出相关指令序列,要求分别使用以下三种寻址方式:

(1)以BX寄存器得间接寻址

(2)以BX寄存器得相对寻址

(3)以BX、SI寄存器得基址变址寻址

解:

(1)MOVBX, OFFSET BLOCK+99*2

MOVAX, [BX]

(2)MOV BX,99*2

 MOVAX,BLOCK[BX]

ﻩﻩ或:

ﻩﻩLEABX,BLOCK

ﻩﻩMOVAX,[BX+99*2]

ﻩ(3)LEABX,BLOCKﻩ

ﻩMOVSI,99*2

ﻩﻩ MOVAX,[BX+SI]

或:

LEASI,BLOCK

ﻩMOVBX, 99*2

 MOVAX,[BX+SI]

2.9已知:

(BX)=1200H,(BP)=2400H,(SI)=0100H,(DI)=0200H,(SS)=1000H,(DS)=2000H,(ES)=3000H,变量VAR1对应地址为2000H,试分别指出下列指令中存储器得寻址方式及物理地址。

(1)MOVAL,[020H]

(2)MOVﻩAL,[BP+010H]

(3)MOVﻩ[BX+SI-20H],AX

(4)MOVBL,ES:

[BX+10H]

(5)MOVﻩVAR1[BX+DI],AL

解:

(1)直接寻址PA=(DS)*16+EA=20000h+020H=20020H

(2)寄存器相对寻址PA=(SS)*16+EA=10000H+2400H+010H=12410H

ﻩ(3)相对基址加变址寻址PA=(DS)*16+EA=20000H+1200H+0100H—20H=212E0H

(4)寄存器相对寻址PA=(ES)*16+EA=30000H+1200H+10H=31210H

ﻩ(5)相对基址加变址寻址PA=(DS)*16+EA=20000H+2000H+1200H+0200H=23400H

2.10设Block为字单元1000H:

001FH得符号地址(变量),该单元得内容就是01A1H,试问以下两条含有Block得指令有什么不同?

指令执行后BX得内容就是多少?

(1)MOVﻩBX,Block

(2)LEAﻩBX,Block

解:

(1)BX得内容为01A1H

(2)BX得内容为001FH

2.11什么叫堆栈?

采用堆栈得意义?

解:

2.12若在数据段中从字节变量TABLE相应得单元开始存放了0~15得平方值,试写出包含有XLAT指令得指令序列查找N(0~15)中得某个数得平方。

(设N得值存放在CL中)

解:

ﻩLEABX,TABLE

ﻩMOVAL, N

XLAT

2.13编写程序对存放在DX,AX中得双字节长数据得求补

解:

NOTDX;首先将(DX,AX)取反

NOTﻩAX

ADDﻩAX,1ﻩ;最低位加1,注意:

不能用INC指令

ADCﻩDX,0ﻩ;把进位(如果有)传递到高位

2.14写出实现下列计算得指令序列。

(假定X、Y、Z、W、R都为有符号数字变量)

(1)Z=(W*X)/(R+6)ﻩ

(2)Z=((W-X)/(5*Y))*2

(3)Z= (X+Y)/R- Wﻩ(4)Z=(X/Y+W)*100+R

解:

(1)ﻩMOVAX,W

ﻩﻩIMULﻩX

MOVBX,R

ADDBX,6

IDIVﻩBX

MOVZ, AX

MOVR,DX

(2)MOVﻩAX,Y

MOVBX,5

ﻩﻩIMULﻩBX

ﻩMOVﻩBX,AX

ﻩMOVﻩAX,W

ﻩﻩSUBﻩAX, X

MOVﻩCX, 2

ﻩﻩIMULﻩCX

ﻩIDIVﻩBX

ﻩMOVﻩZ,AX

(3)MOVﻩAX, X

ﻩADD ﻩAX,Y

ﻩﻩCWDﻩ

ﻩIDIVR

ﻩSUBAX,W

ﻩﻩMOVﻩZ,AX

(4)ﻩMOVAX,X

ﻩﻩCWD

ﻩIDIVﻩY

ﻩADDﻩAX,W

MOVBX,100

ﻩﻩIMULﻩBX

ﻩﻩMOVBX,AX

ﻩMOVCX,DX

ﻩMOVﻩAX,R

ﻩCWD

ﻩﻩﻩADDAX,BX

ﻩﻩADCﻩDX,CX

ﻩﻩ;结果存放在DX、AX中

2.15设在AX、BX、CX、DX中均存放得就是用压缩得BCD码表示得4位十进制数,试编写程序完成以下得计算:

(1)(AX)+(BX)→AX

(2)(DX)-(CX) →DX

解:

(1)ADD AL, BL

 DAA

   XCHG AL, AH

ﻩADC AL, BH

ﻩDAA

XCHG AL,AH

(2)MOVﻩAL,DL

SUBAL,CL

DAS

MOVﻩDL,AL

MOVAL,DH

SBBﻩAL,CH

DAS

MOVDH,AL

2.16简述指令得“DAA”与“DAS”对BCD码运算后进行调整得规则、

解:

DAA得调整规则:

if(AL低4位>9或 AF=1)then

AL=AL+06H ;

AF=1;

endif

if(AL高4位〉9或CF=1)then

ﻩAL=AL+60H;

ﻩCF=1;

endif

DAS得调整规则:

if (AL低4位>9 或 AF=1)then

AL=AL-06H;

ﻩAF=1;

endif

if(AL高4位>9或CF=1)then

ﻩAL=AL—60H ;

CF=1;

 Endif

2.17用程序段实现对存入在BX,AX得双字进行左移5位。

解:

ﻩSHLAX,1

ﻩRCLBX,1

SHLﻩAX,1

RCLBX,1

SHL AX,1

ﻩRCLBX,1

SHL ﻩAX,1

RCLBX,1

SHLﻩAX,1

ﻩRCLﻩBX,1

2.18试分析下列程序完成什么功能?

MOVﻩCL,4

 SHLDX,CL

MOVﻩBL,AH

 SHLﻩAX,CL

ﻩSHRﻩBL,CL

ﻩORﻩﻩDL,BL

解:

把32位二进制代码(DX, AX)联合左移4位、

2.19已知程序段如下:

ﻩﻩMOVAX,1234H

ﻩMOVCL,4

ﻩﻩROLﻩAX,CL

ﻩﻩDECﻩAX

ﻩﻩMOVCX,4

ﻩMULﻩCX

试问:

(1)每条指令执行后,AX寄存器得内容就是什么?

(2)每条指令执行后,CF,SF及ZF得值分别就是什么?

(3)程序运行结束时,AX及DX寄存器得值为多少?

解:

ﻩMOVAX,1234H;AX内容为1234H,CF、SF、ZF得值保留初值

ﻩMOVCL,4ﻩﻩﻩ;AX内容为1234H,CF、SF、ZF同上

ROLAX,CLﻩ;AX内容为2341H,CF=1、SF=0、ZF=0

DECAXﻩﻩ;AX内容为2340H,CF=1、SF=0、ZF=0

ﻩMOVﻩCX,4ﻩ;AX内容为2340H,CF=1、SF=0、ZF=0

MULCXﻩﻩ;AX内容为8D00H,CF=0、SF=0、ZF=0

2.20程序中得“转移”就是个什么概念?

CPU执行转移指令就是如何实现转移得?

解:

程序中得“转移”就是指改变程序得顺序执行过程,某条指令执行完后,不就是紧接着执行该指令后面得指令,而就是执行其它得指令。

CPU就是通过改变CS与IP指令指针得值来实现转移得、

2.21设(DS)=2000H,(BX)=0030H,(SI)=0202H,(20232H)=00H,(200233H)=06H,分别执行下述两条指令后,实际转移得目标地址物理地址多少?

(1)JMPﻩBX

(2)JMPWord PTR[BX+SI]ﻫ解:

(1)目得地址为0030H

(2)转移得目标地址为:

由[BX+SI]寻址得存储单元得地址为20232H,目得地址为0600H。

2.22编写指令序列,实现下述要求

(1)使AX寄存器得低 4位清零,其余位不变。

(2)使BX寄存器得低4 位置1,其余位不变。

(3)测试BX中得位0与位4,当这两位同时为零时,将AL置1,否则AL置0。

解:

(1)ANDAX,0FFF0H

(2)OR ﻩAX, 000FH

(3)TESTAX,0011H

JZNEXTﻩ;ZF=1,表明这两位同时为0,转走将AL置1

ﻩ MOVAL,0ﻩﻩ;ZF=0,表明这两位不同时为0,将AL清0

ﻩﻩJMPEXIT

NEXT:

ﻩ MOVAL,1

EXIT:

2.23下面程序段在什么情况下执行结果就是(AH)=0?

BEGIN:

INAL,60H 

ﻩTESTAL,80H

ﻩﻩJZ  BRCH1

ﻩXOR  AX, AX 

JMPSTOP

BRCH1:

MOV AH,0FFH

STOP:

……

解:

从60H端口读到就是数据最高位为1时,使(AH)为0;数据最高位为0时,使(AH)为0FFH。

2.24“CALL"指令与“JMP”指令相同之处就是什么?

不同之处就是什么?

解:

相同之处:

“CALL”指令与“JMP”指令都能实现程序得控制转移,改变程序顺序指令得过程。

不同之处:

“CALL”指令执行时,使程序转移到子程序中执行,执行完子程序后,还就是会回到调用程序,继续执行紧跟在“CALL"指令之后得那条指令。

但“JMP”指令执行完后一般不会去执行紧跟在“JMP”指令之后得那条指令。

2.25叙述8086/8088CPU执行指令“CALL DWORDPTR[100H]”得步骤。

2.26设下列程序执行前,栈顶指针SS:

SP为1000H:

0220H,试求:

ﻩPOPﻩCX

POPBX

ﻩPOPﻩAX

RET4

(1)画出该程序执行后得堆栈存储情况示意图。

解:

使堆栈指针加10,上面得5个字得内容出栈,图略、

(2)给出当前栈顶SS与SP得值、

(SS)=1000H, (SP)=022AH

2.27一双字长得带符号数放在X与X+2中(X为变量),试编写一程序对这个数求其绝对值。

解:

ﻩﻩTEST[X+2],8000Hﻩ;测试最高位,判断正负,负数好取绝对值

ﻩﻩJZﻩDONE

ﻩMOVAX,X

ﻩMOVDX,[X+2]

ﻩﻩNOTﻩAX

ﻩNOT ﻩDX

ﻩADDﻩAX,1

ﻩADCﻩDX,0

ﻩMOVﻩ[X],AX

ﻩMOVﻩ[X+2],DX

DONE:

2.28试编写一个汇编语言程序,要求将键盘输入得小写字母用大写字母显示出来。

解:

CODESEGMENT

ﻩASSUMECS:

CODE

ﻩﻩSTART:

MOVﻩAH,01H

ﻩINT ﻩ21H

ﻩﻩﻩCMPﻩAL,0DH;输入回车推出程序

ﻩﻩﻩJZﻩﻩEXIT

ﻩORAL,20H

ﻩﻩMOVﻩAH, 02H

ﻩﻩINT21H

ﻩﻩJMPﻩSTART

ﻩEXIT:

ﻩMOVﻩAX,4C00H

ﻩﻩﻩﻩINTﻩ21H

CODEENDS

ﻩﻩENDSTART

2.29试编写程序实现例236得功能,但就是不要使用字符串操作指令、

解:

LEASI,STRING1-1

LEAﻩDI, STRING2-1

ﻩﻩﻩMOVﻩCX,20

ﻩAGA:

ﻩINCSI

ﻩﻩINCﻩDI

MOVAL,[SI]

ﻩCMPﻩAL,ES:

[DI]

ﻩﻩLOOPZAGA

2.30试编写程序实现例 2﻾37得功能,但就是不要使用字符串操作指令。

解:

ﻩLEAﻩDI,STRING2

ﻩMOVAL,‘A’

ﻩﻩMOVﻩCX,20

ﻩAGA:

ﻩCMPﻩAL,ES:

[DI]

JZﻩﻩEXIT

ﻩﻩINCﻩﻩDI

ﻩﻩLOOPﻩAGA

EXIT:

2.31在使用“REPNZCMPSB”指令时,应事先做好哪些工作?

解:

将源串得偏移地址送入SI,目得串得偏移地址送入DI,方向标志DF清0,比较得字节数送入CX、

2.32已知在以ARRAY为首地址得内存区域存放了100个字节数,试编写相关得程序段用以完成将该数据传送到BUFF为首地址得存储区域中、分别用以下不同方法实现。

(1)用一般数据传送指令“MOV”实现。

(2)用字符传送指令“MOVSB”实现。

(3)用重复操作前缀传送指令“REPMOVSB”实现。

(4)用LODSB/STOSB实现。

解:

(1)

ﻩﻩLEA SI,ARRAY

ﻩLEAﻩDI,BUFF

ﻩMOVﻩCX,100

ﻩAGA:

ﻩMOVAL,[SI]

MOV[DI],AL

INCﻩﻩSI

ﻩINCDI

ﻩLOOPﻩAGA

(2)

LEASI,ARRAY

ﻩLEADI,BUFF

ﻩﻩMOVﻩAX, DS

ﻩMOV ﻩES,AX

ﻩMOVﻩCX,100

ﻩCLD

AGA:

ﻩMOVSB

ﻩﻩﻩLOOPﻩAGA

(3)LEAﻩSI,ARRAY

ﻩﻩLEAﻩDI, BUFF

MOVﻩAX,DS

ﻩﻩﻩMOVES,AX

ﻩﻩMOV CX, 100

ﻩﻩﻩCLD

ﻩﻩREPMOVSB

(4)

LEA ﻩSI,ARRAY

LEAﻩﻩDI,BUFF

ﻩMOVﻩAX,DS

MOVES,AX

ﻩﻩMOVCX,100

ﻩCLD

ﻩAGA:

ﻩLODSB

ﻩﻩﻩSTOSB

ﻩﻩLOOPﻩAGA

2.33判断STRING1与STRING2为首地址得内存区域存放了二个长度为20得字符串就是否相等。

若相等将SIGN单元置1,反之,将SIGN单元置0。

分别用以下不同方法实现。

(1)用比较条件转移指令实现。

(2)用重复操作前缀搜索指令实现。

解:

(1)

LEAﻩSI, STRING1—1

ﻩﻩLEAﻩﻩDI, STRING2—1

ﻩMOVﻩCX,20

AGA:

ﻩINCﻩﻩSI

ﻩINCﻩﻩDI

MOVﻩAL,[SI] 

ﻩCMPAL[DI]

ﻩﻩLOOPZﻩAGA

ﻩﻩJZﻩEQ

ﻩﻩMOVﻩSIGN,0

ﻩJMPEXIT

ﻩEQ:

ﻩMOVﻩSIGN,1

ﻩEXIT:

(2)

LEASI, STRING1

ﻩﻩLEAﻩDI,STRING2

MOVﻩAX, DS

ﻩﻩﻩMOV ﻩES,AX

ﻩﻩMOV CX, 20

ﻩﻩCLD

ﻩﻩREPECMPSB

ﻩJZEQ

MOVSIGN,0

ﻩﻩJMPﻩEXIT

ﻩEQ:

ﻩMOVSIGN,1

ﻩEXIT:

2.34试用其她指令序列来代替完成以下指令得功能:

(1)LOOPNEXT

(2)LDSBX,[100H]

(3)XLAT

(4)LOOPZNEXT

(5)LAHF

(6)XCHGAX,[BX]

(7)NEGWord PTR[1000H]

(8)ADC ﻩAL,[SI+BX]

(9)TESTAL,00001111B

(10)MOVSW(DF=0)

(11)REPZCMPSB(DF=0)

解:

(1)DECﻩCXﻩ

ﻩﻩJNZﻩNEXT

(2)MOVBX,[100H]

ﻩMOVﻩDS,[102H]

(3)MOVﻩAH,0

ADDBX, AX

MOV AL,[BX]

(4)  JNZEIXT

LOOPNEXT

EXIT:

(5)题目好像不对

(6)MOVCX, [BX]

MOV [BX],AX

MOVﻩﻩAX,CX

(7)MOV AX,0

SUBﻩAX, [1000H]

MOVﻩ[1000H],AX

(8) ﻩJNCﻩNEXT

ADDAL,[SI+BX]

INCﻩAL

JMPﻩDONE

NEXT:

ADDﻩAL,[SI+BX]

DONE:

(9)MOVﻩBL,AL

ANDﻩﻩBL,00001111B

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

当前位置:首页 > 医药卫生 > 基础医学

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

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