微机原理与接口技术楼顺天第二版第四章习题解答.docx

上传人:b****5 文档编号:8322279 上传时间:2023-01-30 格式:DOCX 页数:63 大小:467.71KB
下载 相关 举报
微机原理与接口技术楼顺天第二版第四章习题解答.docx_第1页
第1页 / 共63页
微机原理与接口技术楼顺天第二版第四章习题解答.docx_第2页
第2页 / 共63页
微机原理与接口技术楼顺天第二版第四章习题解答.docx_第3页
第3页 / 共63页
微机原理与接口技术楼顺天第二版第四章习题解答.docx_第4页
第4页 / 共63页
微机原理与接口技术楼顺天第二版第四章习题解答.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

微机原理与接口技术楼顺天第二版第四章习题解答.docx

《微机原理与接口技术楼顺天第二版第四章习题解答.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术楼顺天第二版第四章习题解答.docx(63页珍藏版)》请在冰豆网上搜索。

微机原理与接口技术楼顺天第二版第四章习题解答.docx

微机原理与接口技术楼顺天第二版第四章习题解答

微机原理与接口技术(楼顺天第二版)习题解答

第4章汇编语言程序设计

4.1、已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。

答:

BUFDB"BONJOUR_BELLE"

BUFRDB100DUP(?

MOVCX,N

LEASI,BUF

LEADI,BUFR

ADDDI,CX

DECDI

L1:

MOVAL,[SI]

MOV[DI],AL

INCSI

DECDI

LOOPL1

4.2、利用移位、传送和相加指令实现AX的内容扩大10倍。

答:

将扩大后的结果放在DX:

AX中,注意到10×AX=8×AX+2×AX。

XORDX,DX

SHLAX,1

RCLDX,1

MOVBX,AX

MOVCX,DX

SHLAX,1

RCLDX,1

SHLAX,1

RCLDX,1

ADDAX,BX

ADCDX,CX

4.3、在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。

答:

VARDW1236,-432,3900

XORSI,,SI

MOVAX,VAR[SI]

CMPAX,VAR[SI+2]

JAEL1

XCHGAX,VAR[SI+2]

L1:

CMPAX,VAR[SI+4]

JAEL2

XCHGAX,VAR[SI+4]

L2:

MOVVAR[SI],AX

MOVAX,VAR[SI+2]

CMPAX,VAR[SI+4]

JAEL3

XCHGAX,VAR[SI+4]

L3:

MOVVAR[SI+2],AX

4.4、编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=1011011010011001B。

答:

利用移位指令完成。

XORDX,DX

MOVCX,8

L1:

SHRAL,1

RCRDX,1

SHRBL,1

RCRDX,1

LOOPL1

4.5、在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:

(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;

(2)当两数均为奇数时,两个变量的内容不变;

(3)当两数均为偶数时,两数缩小一倍后存入原处。

答:

当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。

DATASEGMENT

VAR1DB28

VAR2DB36

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAL,VAR1

MOVBL,VAR2

TESTAL,1

JZEVEN1

JMPOVER

EVEN1:

TESTBL,1

JZEVEN2

MOVVAR1,BL

MOVVAR2,AL

JMPOVER

EVEN2:

SHRAL,1

MOVVAR1,AL

SHRBL,1

MOVVAR2,BL

OVER:

MOVAH,4CH

MOVAL,0

INT21H

CODEENDS

ENDSTART

4.6、已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。

答:

在数据段中定义:

VAR1DW5A34H

VAR2DW5A35H

VAR3DW3A34H

在代码段中编写程序段:

MOVAX,-1

MOVBX,VAR1

CMPBX,VAR2

JZL2

CMPBX,VAR3

JZL1

MOVAX,BX

LEASI,VAR1

JMPOVER

L1:

MOVAX,VAR2

LEASI,VAR2

JMPOVER

L2:

CMPBX,VAR3

JZOVER

MOVAX,VAR3

LEASI,VAR3

OVER:

4.7、分析下列程序段的功能:

MOVCL,04

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

解:

程序段完成DX:

AX组成的32位无符号数左移4位,低位补零(也即除以16)。

4.8、阅读下列程序段,指出它完成什么运算。

CMPAX,0

JGEEXIT

NEGAX

EXIT:

答:

取AX的绝对值。

4.9、答:

将DX中的值转换为相应的ASCII码字符存入DISP对应的4字节存储单元中。

例如DX=3F0BH,则在DISP中存放'3','F','0','B'。

4.10、答:

将FIRST和SECOND数据相加,结果存入FIRST中,FIRST中的结果为:

10H,61H,01H。

4.11、答:

将从390H端口读入的数据的低4位转换为对应16进制数的ASCII码,然后往390H端口输出。

例如读入的数据为29H,则输出'9',读入的数据为1BH,则输出'B'。

4.12、答:

实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。

4.13、答:

完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。

4.14、答:

(1)AX=FFF3H,DX=FFFAH;

(2)AX=1FF2H,DX=0002H

4.15、答:

AX=FFFCH,BX=200AH,CX=0008H,DX=2010H,SI=2000H

4.16、答:

LEASI,BUFFERS

LEADI,BUFFERT

MOVCX,N

ADDDI,N

ADDDI,N

SUBDI,2

L1:

MOVAX,[SI]

MOV[DI],AX

ADDSI,2

SUBDI,2

LOOPL1

4.17、答:

ENCRPYTIONPROCNEAR

LEASI,ARRAY

XORDX,DX

MOVAX,[SI]

MOVBX,5

DIVBX

MOVCX,AX

ADDSI,2

L1:

MOVAX,[SI]

XORAX,0AAAAH

MOV[SI],AX

ADDSI,10

LOOPL1

RET

ENCRPYTIONENDP

4.18、答:

DATASEGMENT

ARRAYDB12,28,128,35,46,69,120,89,93,100,112,125,200

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

XORCX,CX

MOVCL,ARRAY;数据个数存入AX

MOVSI,OFFSETARRAY+1;SI存放第一个数的偏移地址

XORDX,DX

XORAX,AX;AX用来存放和,首先清零

XH:

XORBX,BX

MOVBL,[SI]

ADDAX,BX

JNCBUYICHU

ADDDX,1

BUYICHU:

INCSI

LOOPXH

CMPDX,0

JZOVER

MOVDX,-1

OVER:

HLT

CODEENDS

ENDSTART

4.19、答:

程序如下:

MOVCX,N

LEASI,BUF

MOVAX,[SI]

MOVDX,AX

ADDSI,2

L1:

CMPAX,[SI]

JBENOCHG1

XCHGAX,[SI]

NOCHG1:

CMPDX,[SI]

JAENOCHG2

XCHGDX,[SI]

NOCHG2:

ADDSI,2

LOOPL1

如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:

JBENOCHG1改成:

JLENOCHG1

JAENOCHG2改成:

JGENOCHG2

4.20、答:

设BUFFER中存放的是字节型数据。

采用双指针方法:

SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。

LEASI,BUFFER

XORCX,CX

MOVCL,[SI]

INCSI

MOVDI,SI

XORBH,BH

XORAL,AL

L1:

CMP[SI],AL

JZL2

MOVBL,[SI]

MOV[DI],BL

INCDI

INCBH

L2:

INCSI

LOOPL1

MOVBUFFER,BH

4.21、答:

MOVCX,N

MOVBX,BUF1

MOVSI,0

MOVDI,OFFSETPRODUCT

XH:

MOVAX,BUFN[SI]

PUSHAX

MULBX

MOV[DI],AX;乘积低位字

ADDDI,2

MOV[DI],DX;乘积高位字

POPAX

XORDX,DX

DIVBX

MOVQUOTIENT[SI],AX;商

MOVREMAINDER[SI],DX;余数

ADDSI,2

LOOPXH

4.22、答:

统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为:

COUNTBYTEPROCNEAR

PUSHAX

PUSHCX

MOVCX,8

XORBL,BL

COU1:

SHRAL,1

ADCBL,0

LOOPCOU1

POPCX

POPAX

RET

COUNTBYTEENDP

在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。

设BUF中有N个字节型数据,结果保持在BH中。

MOVCX,N

LEASI,BUF

XORBH,BH

L1:

MOVAL,[SI]

CALLCOUNTBYTE

CMPBL,4

JNZL2

INCBH

L2:

INCSI

LOOPL1

4.23、答:

4.24、答:

4.25、答:

;产生N个伪随机数

MOVCX,N

MOVSI,OFFSETNUM

XORAH,AH

MOVAL,23

XH:

MOV[SI],AL

PUSHAX

ADDAX,0

JNPFEIJISHU

INCCNT

ADDSUMODD,AX

FEIJISHU:

POPAX

ADDAL,17

INCSI

LOOPXH

4.26、答:

4.27、答:

4.28、答:

4.29、答:

4.30、答:

4.31、答:

4.32、答:

4.33、答:

STACKSEGMENTSTACK'STACK'

DW100HDUP(?

TOPLABELBYTE

STACKENDS

DATASEGMENT

BUFFERDB3;首字节为字符串长度

DB'ABC';字符串

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,STACK

MOVSS,AX

LEASP,TOP

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEADI,BUFFER

XORCX,CX

MOVCL,[DI]

INCDI

CALLSETEVEN

MOVAH,4CH;返回DOS

MOVAL,0

INT21H

SETEVENPROCNEAR;加偶校验子程序

PUSHAX

PUSHBX

PUSHCX

PUSHDI

SETEVEN1:

MOVAL,[DI]

CALLCOUNTBYTE

ANDBL,01H

JZSETEVEN2

ORAL,80H

MOV[DI],AL

SETEVEN2:

INCDI

LOOPSETEVEN1

POPDI

POPCX

POPBX

POPAX

RET

SETEVENENDP

COUNTBYTEPROCNEAR

PUSHAX

PUSHCX

MOVCX,8

XORBL,BL

COU1:

SHRAL,1

ADCBL,0

LOOPCOU1

POPCX

POPAX

RET

COUNTBYTEENDP

CODEENDS

ENDSTART

4.34、答:

MOVAX,SI[2*N]

TESTAX,8000H

JZOVER

MOVCX,N

XH:

MOVAX,[SI]

NEGAX

MOV[SI],AX

ADDSI,2

LOOPXH

OVER:

NOP

4.35、答:

设奖斐波那契数列存放在字变量RESULT中。

在数据段中定义

RESULTDW100HDUP(?

在代码段中编写子程序

FIBONACCIPROCNEAR

XORDI,DI

MOVRESULT[DI],1;前两个数为1

MOVRESULT[DI+2],1

ADDDI,4

MOVCX,N

L1:

MOVAX,RESULT[DI-4]

ADDAX,RESULT[DI-2]

MOVRESULT[DI],AX

ADDDI,2

LOOPL1

RET

FIBONACCIENDP

4.36、答:

在数据段中定义变量:

TABLEDWINFORM1,INFORM2,INFORM3,INFORM4,INFORM5

DWINFORM6,INFORM7,INFORM8,INFORM9,INFORM10

在代码段中编写程序段:

MOVCX,10

XORSI,SI

L1:

MOVDX,TABLE[SI]

MOVAH,9

INT21H

ADDSI,2

CALLWAIT

LOOPL1

这里,WAIT为延时子程序,用于在显示信息之间的停顿。

4.37、答:

先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。

DISPALDPROCNEAR

PUSHAX

PUSHCX

PUSHDX

XORAH,AH

MOVCL,100

DIVCL

PUSHAX

MOVDL,30H

ADDDL,AL

MOVAH,2

INT21H

POPAX

MOVAL,AH

XORAH,AH

MOVCL,10

DIVCL

PUSHAX

MOVDL,30H

ADDDL,AL

MOVAH,2

INT21H

POPAX

MOVDL,30H

ADDDL,AH

MOVAH,2

INT21H

POPDX

POPCX

POPAX

RET

DISPALDENDP

在此基础上,根据题目要求,需要用到3个指针:

SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。

MOVCX,20

XORDX,DX

LEASI,ARRAY

LEADI,ARRAYP

LEABX,ARRAYN

L1:

MOVAL,[SI]

ANDAL,AL

JSL2

MOV[DI],AL

INCDI

INCDL

JMPL3

L2:

MOV[BX],AL

INCBX

INCDH

L3:

INCSI

LOOPL1

MOVAL,DL

CALLDISPALD

MOVAL,DH

CALLDISPALD

4.38、答:

设BUFFER中存放的是有符号数。

MOVCX,100

LEASI,BUFFER

MOVAX,7FFFH

L1:

ANDWORDPTR[SI],1

JNZL2

CMP[SI],AX

JGEL2

MOVAX,[SI]

L2:

ADDSI,2

LOOPL1

4.39、答:

BL用于存放项数。

STACKSEGMENTSTACK'STACK'

DW100HDUP(?

TOPLABELWORD

STACKENDS

DATASEGMENT

DB100HDUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

LEASP,TOP

MOVBL,1

MOVCX,0

COUNT:

MOVAL,BL

MULBL

ADDCX,AX

CMPCX,2000

JAEXIT

INCBL

JMPCOUNT

EXIT:

4.40、答:

设数据段的段名为SEGNAME,则有

SEGINTODSMOCROSEGNAME

MOVAX,SEGNAME

MOVDS,AX

ENDM

SEGINTOESMOCROSEGNAME

MOVAX,SEGNAME

MOVES,AX

ENDM

4.41、答:

设输入字符串保存在BUFIN中,则有:

INSTRMACROBUFIN

MOVAH,10

LEADX,BUFIN

INT21H

ENDM

应该注意,BUFIN为键盘缓冲区,应该满足格式要求,详见INT21H的10号功能说明。

4.42、答:

CRLFMACRO

MOVAH,02

MOVDL,10

INT21H

MOVDL,13

INT21H

ENDM

4.43、答:

设DF=0

(1)L1:

MOVAL,[SI]

MOVES:

[DI],AL

INCSI

INCDI

LOOPL1

(2)L1:

MOVAL,[SI]

INCSI

LOOPL1

(3)L1:

MOVES:

[DI],AL

INCDI

LOOPL1

(4)L1:

MOVAL,[SI]

CMPAL,ES:

[DI]

INCSI

INCDI

LOOPL1

4.44、答:

STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。

(1)CLD

MOVCX,17

LEASI,STR1

LEADI,STR2

REPMOVSB

(2)MOVCX,17

LEASI,STR1

LEADI,STR2

ADDSI,CX

DECSI

L1:

MOVAL,[SI]

MOV[DI],AL

DECSI

INCDI

LOOPL1

(3)LEASI,STR1

MOVDX,[SI+6]

(4)MOVCX,17

LEASI,STR1

MOVAL,20H

L1:

CMP[SI],AL

JZL2

INCSI

LOOPL1

L2:

4.45、答:

STRING中保存了30个字符。

MOVCX,30

LEASI,STRING

MOVAL,’&’

L1:

CMP[SI],AL

JNZL2

MOVBYTEPTR[SI],’/’

L2:

INCSI

LOOPL1

4.46、答:

将缓冲区FIRST中100个字节传送到SECOND中。

4.47、答:

在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。

4.48、答:

设DS和ES均指向字符串OLDS和NEWS所在的段。

CLD

MOVCX,5

LEASI,OLDS

LEADI,NEWS

REPZCMPSB

JNZNEW_LESS

4.49、答:

设STRING中的字符个数为N。

MOVCX,N

LEASI,STRING

MOVAL,5FH

L1:

AND[SI],AL

INCSI

LOOPL1

4.50、答:

利用字符串操作指令比较方便,也可以采用循环完成。

(1)TASK1MOVCX,50

MOVAL,20H

LEADI,STUDENT_PRINT

REPSTOSB

(2)TASK2MOVCX,9

MOVAL,‘_’

LEADI,STUDENT_ADDR

REPNZSCASB

JZFOUND

NOT_FOUND:

……

FOUND:

……

(3)TASK3MOVCX,9

MOVAL,‘_’

LEADI,STUDENT_ADDR

ADDDI,CX

STD

REPNZSCASB

JZFOUND

NOT_FOUND:

……

FOUND:

……

(4)TASK4MOVCX,30

MOVAL,20H

LEADI,STUDENT_NAME

R

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

当前位置:首页 > 工作范文 > 行政公文

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

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