微机原理及应用习题答案Word格式文档下载.docx

上传人:b****1 文档编号:4461385 上传时间:2023-05-03 格式:DOCX 页数:33 大小:23.84KB
下载 相关 举报
微机原理及应用习题答案Word格式文档下载.docx_第1页
第1页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第2页
第2页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第3页
第3页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第4页
第4页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第5页
第5页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第6页
第6页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第7页
第7页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第8页
第8页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第9页
第9页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第10页
第10页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第11页
第11页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第12页
第12页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第13页
第13页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第14页
第14页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第15页
第15页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第16页
第16页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第17页
第17页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第18页
第18页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第19页
第19页 / 共33页
微机原理及应用习题答案Word格式文档下载.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理及应用习题答案Word格式文档下载.docx

《微机原理及应用习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理及应用习题答案Word格式文档下载.docx(33页珍藏版)》请在冰点文库上搜索。

微机原理及应用习题答案Word格式文档下载.docx

●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

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

sub[bx],1

incbx

●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

cmpal,“0”

jberr1

cmpal,“9”

jaerr1

movdl,al

movah,02h

.exit

err1:

movoffseterror

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<

PersonalComputer>

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

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位有符号数。

xdb13

ydb-3

zdb?

db100dup(?

code,ds:

data,ss:

stack

moval,x

movah,y

cmpal,ah

jbechange

movz,ah

jmpdone

change:

movz,al

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

如果变量值大于等于0,保存0;

如果X小于0,保存-1.编写该程序。

buffxdw13

signxdw?

movax,buffx

cmpax,0

movsignx,0

movsignx,-1

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

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

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

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

bufxdb13

bufydb-3

bufzdb-3

moval,bufx

movbl,bufy

movcl,bufz

cmpal,bl

jecac

cmpal,cl

jeview1

cmpbl,cl

movdl,'

0'

jmpview

cac:

jeview2

view1:

1'

view2:

2'

view:

movah,02h

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

numberdb78h

addrsdwoffsetfun0,offsetfun1,offsetfun2,offsetfun3,

offsetfun4,offsetfun5,offsetfun6,offsetfun7

movax,data

movds,ax

movdh,number

movcx,8

movbx,0

shrdh,1

jcnext

again:

incbx

looplp1

next:

jmpaddrs[bx]

fun0:

movdl,'

fun1:

fun2:

fun3:

3'

fun4:

4'

fun5:

5'

fun6:

6'

fun7:

7'

movah,02h

jmpagain

movax,4c00h

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

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

sumdb?

movcx,10

leabx,num

moval,[bx]

addsum,al

loopagain

3.23求主存0040H:

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

code,ss:

movax,0040h

moves,ax

movdi,0

movcx,0

moval,'

'

scasb

jnenext

deccx

jneagain

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

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

’。

numdw100dup(800)

sumdw?

msgdb'

Overflow!

'

13,10,'

$'

movcx,100

movax,0

addax,[bx]

jcerr

movsum,ax

err:

movdx,offsetmsg

movah,09h

3.25编制程序完成将一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。

转换算法可以是:

用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;

一次用余数除以100、10和1,得到“百位”、“十位”和“个位”。

bnumdw19982

dnumdb5dup(?

),'

sta

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2