微机原理.docx

上传人:b****5 文档编号:3798279 上传时间:2022-11-25 格式:DOCX 页数:29 大小:24.54KB
下载 相关 举报
微机原理.docx_第1页
第1页 / 共29页
微机原理.docx_第2页
第2页 / 共29页
微机原理.docx_第3页
第3页 / 共29页
微机原理.docx_第4页
第4页 / 共29页
微机原理.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

微机原理.docx

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

微机原理.docx

微机原理

《微机原理及应用》习题答案

第一章

⏹1.11请完成下列数制转换:

(1)将174.66D转换为对应的二进制和十六进制形式。

(2)将100011101011.01011B转换为对应的十进制和十六进制形式。

(3)将F18A6.6H转换为对应的二进制和十进制形式。

答:

174.66D=10101110.1010B=AE.AH

100011101011.01011B=2283.34375D=8EB.58H

F18A6.6H=989350.375D

⏹1.12请写出与数据+37和-37对应的8位机器数原码、反码和补码,并分别用二进制和十六进制表示出来。

答:

-37D=(10100101B)原=(11011010B)反=(11011011B)补

⏹1.138位机器数46H,若作为无符号数和补码有符号数,其对应的真值各是什么?

若作为BCD码和ASCII码,其对应的又是什么?

答:

无符号数46H=70,补码46H=+70BCD码46H=46,ASCII码46H=“F”

期末考试考的《微机原理于接口技术》有几道题求高手给解决!

急求!

1、已知DS=2000H,(21000H)=2234H,(21002H)=5566H,试区别以下多条指令,并求出ST的值?

MOV、SI、[1000H]、[EAS]、[1000H]、2PS、SI、[1000H]

2、用一指令完成下列各题。

a用BX寄存器间接寻址把寄存器中的一个内存单元加上AX的内容并加上CF后,结果选入段内存单元。

bAL内容加上12H,结果送入AL。

cAX的内容减去BX的内容,试结果送入AX.

3、简述堆栈的性质,如果SS=PB9FH,SP=200H连接执行2条PUSH指令后,栈顶的物理地址是?

SS、SP值?

再执行一条POP指令后,栈顶的物理地址?

SP、SP值?

(过程)

1,st不解

2,adcwordptr[bx],ax

addal,12H

subax,bx

3,执行2条PUSH指令后,sp=sp-2=01FEH,sp’=sp-2=01FCH

结果:

ss=0B9FH,sp=01FCH

(你的ss有问题,P不在A到F之间。

我假设为0B9FH)

物理地址为0B9F:

01FC=(0BBEC)H

再执行一条POP指令后,sp''=sp'+2=01FEH,ss不变=0B9FH,sp=01FEH

物理地址为0B9F:

01FE=(0BBEE)H

 

第二章

●2.5什么是8088中的逻辑地址和物理地址?

逻辑地址如何转换成物理地址?

1MB最多能分成多少个逻辑段?

请将如下逻辑地址用物理地址表达:

(1)FFFFH:

0H

(2)40H:

17H(3)2000H:

4500H(4)B821H:

4567H

答:

⑴FFFFH:

0H=FFFF0H

⑵40H:

17H=00417H

⑶2000H:

4500H=24500H

⑷B821H:

4567H=BC777H

●2.8已知DS=2000H,BX=0100H,SI=0002,存储单元[20100H]~[20103H]依次存放12H,34H,56H,78H,[21200H]~[21203H]依次存放2AH,4CH,87H,65H,说明下列每条指令执行完后AX寄存器的内容以及源操作数的寻址方式?

答:

⑴AX=1200H,立即数寻址;

⑵AX=0100H,寄存器寻址;

⑶AX=4C2AH,直接寻址;

⑷AX=3412H,寄存器间接寻址;

⑸AX=4C2AH,寄存器相对寻址;

⑹AX=7865H,基址变址寻址;

⑺AX=65B7H,基址变址相对寻址。

●2.9说明下面各条指令的具体错误原因:

(1)movcx,dl

(2)movip,ax(3)moves,1234h(4)moves,ds

(5)moval,300(6)mov[sp],ax(7)movax,bx+di(8)mov20h,ah

答:

⑴操作数类型不同;

⑵不能手工修改IP;

⑶不能将立即数直接MOV到段寄存器;

⑷不能在段寄存器之间直接MOV数据;

⑸300大于AL所能存放的数据的范围;

⑹寄存器间接寻址只能用BX/BP/SI/DI之一;

⑺MOVAX,[BX+DI];

⑻目的操作数不能是立即数。

●2.10已知数字0~9对应的格雷码依次为:

18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H,它存在于以table为首地址(设为200H)的连续区域中。

请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。

leabx,table

moval,8

xlat

答:

leabx,table;bx=0200h

moval,8;al=08h

xlat;al=12h

●2.11给出下列各条指令执行后的AL值,以及CF,ZF,SF,OF和PF的状态:

moval,89h

addal,al

addal,9dh

cmpal,0bch

subal,al

decal

incal

答:

⑴al=89h

⑵al=12h,CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1

⑶al=afh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=0

⑷al=afh,CF=1,ZF=0,SF=1,OF=1,PF=1,AF=0

⑸al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=0

⑹al=ffh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=1

⑺al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=1

●2.12请分别用一条汇编语言指令完成如下功能:

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。

(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加并把结果送到AL中。

(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。

(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。

(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。

答:

⑴adddx,bx;

⑵addal,[bx+si];

⑶add[bx+00b2h],cx

⑷addwordptr[0520h],3412h

⑸addal,0a0h

●2.13设X,Y,Z,V均为16位带符号数,分别装在X,Y,Z,V存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。

movax,x

imuly

movcx,ax

moxbx,dx

movax,z

cwd

addcx,ax

adcbx,dx

subcx,540

abbbx,0

movax,v

cwd

subax,cx

abbdx,bx

idivx

答:

(V-(X*Y+Z-540))/X

●2.14给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

movax,1470h

andax,ax

orax,ax

xorax,ax

notax

testax,0f0f0h

答:

⑴ax=1470h

⑵ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0

⑶ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0

⑷ax=0000h,CF=0,ZF=0,SF=0,OF=1,PF=1

⑸ax=0ffffh,CF=0,ZF=0,SF=0,OF=1,PF=1

⑹ax=0ffffh,CF=0,ZF=0,SF=1,OF=0,PF=1

●2.16假设DS=2000H,BX=1256H,TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?

答:

⑴1256h;⑵3280h

●2.17判断下列程序段跳转的条件

(1)xorax,leleh

jeequal

(2)testal,10000001b

jnzthere

(3)cmpcx,64h

jbthere

答:

⑴ax=1e1eh;⑵al=1******1b;⑶cx<64h

●2.18如下是一段软件延时程序,请问NOP指令执行了多少次?

xorcx,cx

delay:

nop

loopdelay

答:

65536

●2.19有一个首地址为array的20个字的数组,说明下列程序段的功能。

movcx,20

movax,0

movsi,ax

sumlp:

addax,array[si]

addsi,2

loopsumlp

movtotal,ax

答:

将array数组的20个字(无进位)累加,其和存入total单元。

●2.20按照下列要求,编写相应的程序段:

(1)由string指示的起始地址的主存单元中存放一个字符串(长度大于6),把该字符串的第1个和第6个字符(字节量)传送给DX寄存器。

(2)有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX←buffer1-buffer2功能。

(3)编写一个程序段,在DX高4位全为0时,使AX=0;否则,使AX=-1。

(4)把DX.AX中的双字右移4位。

(5)有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。

答:

⑴movdl,string

movdh,string+5

⑵movax,wordptrbuffer1

subax,wordptrbuffer2

movdx,wordptrbuffer1+2

sbbdx,buffer2+2

⑶testdx,0f0h

jet1

movax,-1

jmpdone

t1:

movax,0

done:

…..

⑷movax,1234h

movdx,5678h

movcx,4

lp1:

shrdx,1

rcrax,1

looplp1

⑸leabx,array

movcx,100

lp1:

sub[bx],1

incbx

looplp1

●2.25编写一个程序段:

先提示输入数字“InputNumber:

0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!

”,继续等待输入数字。

答:

.modelsmall

.stack100h

.data

messagedb“InputNumber:

0~9”,0dh,0ah,“$”

errordb“Error!

”,0dh,0ah,“$”

.code

.startup

movdx,offsetmessage

movah,09h

int21h

begin1:

movah,01h

int21h

cmpal,“0”

jberr1

cmpal,“9”

jaerr1

movdl,al

movah,02h

int21h

.exit

err1:

movoffseterror

movah,09h

int21h

jmpbegin1

end

第三章

3.11请设置一个数据段,按照如下要求定义变量:

(1)my1b为字符串变量,表示字符串“PersonalComputer”。

(2)my2b为用十进制数表示的字节变量,这个数的大小为20。

(3)my3b为用十六进制数表示的字节变量,这个数的大小为20。

(4)my4b为用二进制数表示的字节变量,这个数的大小为20。

(5)my5w为20个未赋值的字变量。

(6)my6c为100的符号常量。

(7)my7c为字符串常量,代替字符串“PersonalComputer”。

答:

my1bdb“PersonalComputer”

my2bdb20

my3bdb14h

my4bdb00010100b

my5wdw20dup(?

my6cequ100

my7cequ

3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:

;数据段

org100h

varwdw1234h,5678h

varbdb3,4

varddd12345678h

buffdb10dup(?

messdb‘hello’

;代码段

movax,offsetmess

movax,typebuff+typemess+typevard

movax,sizeofvarw+sizeofbuff+sizeofmess

movax,lengthofvarw+lengthofvard

答:

offsetvarb=0104h

offsetmess=0114h

typebuff=1;typemess=1;

typevard=4

sizeofvarw=4;sizeofbuff=10;

sizeofmess=5

lengthofvarw=2;lengthofvard=1

3.15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。

(1)movbyteptr[bx],1000

(2)movbx,offsetmyword[si]

(3)cmpmybyte1,mybyte2

(4)movmybyte1,al+1

(5)subal,myword

(6)jnzmyword

答:

⑴1000大于字节变量所能表示的范围

⑵OFFSET只能用于简单变量

⑶双操作数不能同时为存储器操作数

⑷数值表达式应为运算符加常量

⑸两操作数类型不一致

⑹条件跳转只能是短跳转

3.17已知用于LED数码管的显示代码表为:

LEDtabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

db80h,90h,88h,83h,0c6h,0c1h,86h,8eh

它依次表示0~9,A~F这16个数码的显示代码。

现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。

答:

stacksegmentstack

db100hdup(?

stackends

datasegment

ledtabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

db80h,90h,88h,83h,0c6h,0c1h,86h,8eh

lednumdb3

dataends

codesegment'code'

assumecs:

code,ss:

stack,ds:

data

start:

movax,data

movds,ax

leabx,ledtable

moval,lednum

xlat

movax,4c00h

int21h

codeends

endstart

3.18编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。

假设变量存放的是8位有符号数。

答:

datasegment

xdb13

ydb-3

zdb?

dataends

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

moval,x

movah,y

cmpal,ah

jbechange

movz,ah

jmpdone

change:

movz,al

done:

movax,4c00h

int21h

codeends

endstart

3.19设变量bufX为有符号数16位数,请将它的符号状态保存在signX,即:

如果变量值大于等于0,保存0;如果X小于0,保存-1.编写该程序。

答:

datasegment

buffxdw13

signxdw?

dataends

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movax,buffx

cmpax,0

jbechange

movsignx,0

jmpdone

change:

movsignx,-1

done:

movax,4c00h

int21h

codeends

endstart

3.20bufX、bufY和bufZ是3个有符号十六进制数,编写一个比较相等关系的程序:

(1)如果这3个数都不相等,则显示0。

(2)如果这3个数中有两个数相等,则显示1。

(3)如果这3个数都相等,则显示2。

答:

datasegment

bufxdb13

bufydb-3

bufzdb-3

dataends

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

moval,bufx

movbl,bufy

movcl,bufz

cmpal,bl

jecac

cmpal,cl

jeview1

cmpbl,cl

jeview1

movdl,'0'

jmpview

cac:

cmpal,cl

jeview2

view1:

movdl,'1'

jmpview

view2:

movdl,'2'

view:

movah,02h

int21h

movax,4c00h

int21h

codeends

endstart

3.21例3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?

答:

datasegment

numberdb78h

addrsdwoffsetfun0,offsetfun1,offsetfun2,offsetfun3,

offsetfun4,offsetfun5,offsetfun6,offsetfun7

dataends

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movdh,number

movcx,8

movbx,0

lp1:

shrdh,1

jcnext

again:

incbx

incbx

looplp1

jmpdone

next:

jmpaddrs[bx]

fun0:

movdl,'0'

jmpview

fun1:

movdl,'1'

jmpview

fun2:

movdl,'2'

jmpview

fun3:

movdl,'3'

jmpview

fun4:

movdl,'4'

jmpview

fun5:

movdl,'5'

jmpview

fun6:

movdl,'6'

jmpview

fun7:

movdl,'7'

jmpview

view:

movah,02h

int21h

jmpagain

done:

movax,4c00h

int21h

codeends

endstart

3.22编制程序完成12H,45H,F3H,6AH,20H,FEH,90H,C8H,57H和34H共10个无符号字节数据之和,并将结果存入字节变量SUM中(不考虑进位)。

答:

datasegment

numdb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h

sumdb?

dataends

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movcx,10

leabx,num

again:

moval,[bx]

addsum,al

incbx

loopagain

movax,4c00h

int21h

codeends

endstart

3.23求主存0040H:

0开始的一个64KB物理段中共有多少个空格?

答:

stacksegmentstack

db100dup(?

stackends

codesegment'code'

assumecs:

code,ss:

stack

start:

movax,0040h

moves,ax

movdi,0

movcx,0

movbx,0

moval,''

again:

scasb

jnenext

incbx

next:

deccx

jneagain

movax,4c00h

int21h

codeends

endstart

3.24编写计算100个正整数之和的程序。

如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow!

’。

答:

datasegment

numdw100dup(800)

sumdw?

msgdb'Overflow!

',13,10,'$'

dataends

stacksegmentstack

db100dup(?

stackends

codes

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

当前位置:首页 > 小学教育 > 语文

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

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