微机原理作业及答案讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理作业
第三章汇编语言程序设计
题3.1A
在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOV AL,10H
MOV CX,1000H
MOV BX,2000H
MOV [CX],AL BH XCHG CX,BX
MOV DH,[BX] CL
MOV DL,01H
XCHG CX,BX CL
MOV [BX],DL
HLT DL AL=1OH
BL=OOH
BH=2OH
CL=OOH
CH=1OH
DH=1OH
(10O0H)=lOH
(200OH)=0lH
题 3.1B DL
要求同题3.1A程序如下;
MOV AL,50H AL
MOV BP,1000H
MOV BX,2000H
MOV [BP],AL
MOV DH,20H
MOV [BX],DH
MOV DL,01H
MOV DL,[BX]
MOV CX,3000H
HLT
AL=5OH
BL=OOH
BH=20H
CL=OOH
CH=30H
DL=20H
DH=2OH
BP=100OH
(10OOH)=5OH
(20OOH)=20H
题3.2,如在自1000H单元开始有一个100个数的数椐块。要把它传送到自2000H开始的存储区中去,用以下三种方法,分别编制程序;
1;不用数据块转送指令;
2;用单个转送的数据块转送指令;
3;用数据块成组转送指令;
(1) LEA SI, 1OOOH
LEA DI, 200OH
MOV CX, 100
L1: MOV AX, [SI]
MOV[DI],AX
LOOPLl
HLT
(2) LEASI,100OH
LEADI,2000H
MOVCX,100
CLD
L1: MOVSB
LOOP L1
HLT
(3) LEASI, 100OH
LEADI, 200OH
MOVCX, 100
CLD
REP MOVSB
HLT
题3.3A 利用变址寄存器遍一个程序,把自1000H单元内开始的100个数转送到自1070H开始的存储区中去,
LEASI,100OH
LEADI,1070H
MOVCX,100
CLD
REP MOVSB
HLT
题3.3B 要求用3.3A,源地址为2050H,目的地址为2000H,数据块长度为50,
LEASI,205OH
LEADI,200OH
MOVCX,50
CLD
REPMOVSB
HLT
题3.4 编一个程序,把自1000H单元开始的100个数转送至1050H开始的存储区中(注意数据区有重叠)。
LEASI, 100OH
LEADI,1050H
ADDSI, 63H
ADDDI, 63H
MOVCX, 100
STD
REPMOVSB
HLT
题3.5A 在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。
LEA SI, 050OH
LEA DI, 10OOH
MOV CX, 100
N1: MOV AL, [SI]
CMP AL, 0
JZ N2
MOV[DI],AL
INC SI
INC DI
LOOPN1
N2: HLT
题3.5B 条件同题3.5A,但在传送过程中检查数的值,零不传送,不是零则传送至目的区。
题3.6 把在题3.5A中指定的数据块中的正数,传送到自1000H开始的存储区。
题3.7 把在题3.5A中指定的数据块中的正数,传送到自1000H开始的存储区;而把其中的负数,传送到自1100H开始的存储区。且分别统计正数和负数的个数,分别存入1200H和1201H 单元中。
HLT
题3.8A 自0500H单元开始,有10个无符号数,编一个程序求10个数的和(用8个位数运算指令),把和放到050A及050B单元中(和用两个字节表示),且高位在050B单元。
题3.8B 自0200H单元开始,有100个无符号数,编一个程序求这100个数的和(用8位数运算指令),把和放在0264H 和0265H单元(和用两字节表示),且高位在0265H单元。
题3.9 题同3.8,只是在累加时用16位运算指令编程序。
题3.10A 若在0500H单元中有一个数x:
1.利用加法指令把它乘2,且送回原存储单元(假定x*2后仍为一个字节);
2.x*4;
3.x*10 (假定x*10 ≤255)。
(1) LEA BX, 050OH
MOV AL, [BX]
ADD AL, AL
MOV[BX],AL
(2) LEA BX, 0500H
MOV AL, [BX]
ADD AL, AL
ADD AL, AL
MOV[BX],AL
(3)LEABX, 050OH
MOV AL, [BX]
ADDAL, AL
MOVDL, AL
ADDAL, AL
ADD AL,AL
ADDAL, DL
MOV[BX],AL
题3.10B
题意与要求同题3.10A,只是x*2后可能为两个字节。
题3.11
若在存储器中有两个数a和b(它们所在地址用符号表示,下同),编一个程序实现a*10+b (a*10以及“和”用两字节表示)。
题3.12
若在存储中有数a,b,c,d(它们连续存放),编一个程序实现
((a*10+b)*10+c)*10+d (和≤65535)