电子科大教材-第五章作业解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.程序如下:(但不是唯一答案)
答案一:
MOV BL,AL
MOV CL,4
ROL BL,CL
AND BL,0FH
MOV DL,AH
MOV CL,4
ROL DL,CL
AND DL,0FH
MOV CL,AH
AND CL,0FH
AND AL,0FH
答案二:
MOV DL,AH
AND DL,0F0H
MOV CL,4
SHR DL,CL
MOV BL,AL
AND BL,0F0H
MOV CL,4
SHR BL,CL
AND AL,0FH
MOV CL,AH
AND CL,0FH
5.答:段内无条件转移指令针对的目标地址和JMP指令本身在同一个代码段内,跳转时仅修改IP寄存器,把目标地址的偏移量送到IP保存;段间无条件转移指令针对的目标地址可以和JMP指令本身不在同一个代码段内,跳转时修改CS、IP两个寄存器,把目标地址的段基值送CS保存,把目标地址的偏移量送IP保存。
只用JMP指令无法实现分支,因为JMP指令会无条件的修改程序的执行流程,执行JMP 指令后CPU下一条将要执行的指令地址是固定不变的,不会根据任何条件判断来决定是否转移。
因此,仅使用JMP指令是无法实现分支结构的。
如果要在程序中实现分支结构,必须使用条件转移指令。
7.注意分析程序,首先注意到:
TEST AL,0AAH
这条指令用于实现第一个分支结构的判断条件。
这条指令的含义是测试(AL)的第1、3、6、7位中有没有为“1”的数据位
1)如果没有,即ZF=1,执行:
AND AL,0AAH
这条指令把(AL)的第2、4、6、8位清0,由于1、3、5、7位本身就为0,所以这样处理
后(AL)=0。
然后,程序流程会转向分支的出口END1,保存结果。
得出这个分支的结论:如果V AR的第1,3,5,7位中没有为“1”的数据位,那么(RES)=0。
2)如果有,即ZF=0,程序流程转到NEXT入口
这里有一条指令:
JNS PLUS
由这条指令实现第二个分支,其含义是判断(AL)最高位是否为1
1)如果为1,即SF=1,那么程序顺序执行:
DEC AL
然后程序流程转向分支出口END1,保存结果。
得出这个分支的结论:如果V AR的第1,3,5,7位中有为“1”的数据位,并且第7位是“1”,那么(RES)=(AL)-1
2)如果为0,即SF=1,那么程序流程转移到PLUS入口:
INC AL
然后程序流程转向分支出口END1,保存结果
得出这个分支的结论:如果V AR的第1,3,5,7位中有为“1”的数据位,并且第7位不是“1”,那么(RES)=(AL)+1
9.完整程序如下:(不是唯一正确答案,仅供参考)
DA TA SEGMENT
A DW ?
B DW ?
C DW ?
BIG DW ?
ADR DW ?
DA TA ENDS
STACK1 SEGMENT STACK
DW 30H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME DS:DA TA,SS:STACK1,CS:CODE
BEGIN:MOV AX,DA TA
MOV DS,AX
MOV AX,A
LEA BX,A
MOV CX,2
MOV SI,2
LOP1:CMP AX,A[SI]
JG G1
MOV AX,A[SI]
LEA BX,A[SI]
G1:ADD SI,2
LOOP LOP1
MOV BIG,AX
MOV ADR,BX
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
11.完整程序如下:(不是唯一答案,仅作参考)
DA TA SEGMENT
DAB1 DB ?
DAB2 DB ?
DA TA ENDS
STACK1 SEGMENT STACK
DW 30H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME DS:DA TA,SS:STACK1,CS:CODE
BEGIN:MOV AX,DA TA
MOV DS,AX
LEA SI,DAB1
MOV CX,2
LOP1:TEST [SI],1
JNZ NO1
ADD [SI],1
NO1:INC SI
LOOP LOP1
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
15.解:
首先读懂程序,仿佛这个程序模拟了一个十进制进位调整,其实不然,这种题目只能按照程
序流程每步把它算好。
累加十次,累加的数据按顺序为:1,3,5,7,1,3,5,7,1,3
按照顺序给出各次循环的处理:
1)(AX)= 0001H
2)(AX)= 0004H
3)(AX)= 0009H
4)(AX)= 0000H
5)(AX)= 0001H
已经进入重复状态了
6)(AX)= 0004H
7)(AX)= 0009H
8)(AX)= 0000H
9)(AX)= 0001H
10)(AX)= 0004H
程序段执行完毕后(AX)= 04H
如果把LOOP指令替换为LOOPNE指令,那么在第一次循环时就会退出循环,
(AX)=0001H,(CX)=9
17.程序如下:(不是唯一答案)
DA TA SEGMENT
ARYW 10 DUP(?)
DA TA ENDS
STACK1 SEGMENT STACK
DW 30H DUP(0)
STACK1 ENDS
;AL中存放最大数,AH中存放最小数
CODE SEGMENT
ASSUME DS:DA TA,SS:STACK1,CS:CODE
BEGIN:MOV AX,DA TA
MOV DS,AX
MOV SI, OFFSET ARYW
MOV CX, 9
MOV AL, [SI]
MOV AH,[SI]
LOP: INC SI
CMP AL, [SI]
JL L1
JMP L2
L1:MOV AL,[SI]
JMP CON
L2:CMP AH,[SI]
JL CON
MOV AH,[SI]
CON:ADD SI,2
LOOP LOP
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
21.程序如下:(不是唯一答案)
DASEG SEGMENT
V A1 DW 10 DUP(?)
V A2 DW 10 DUP(?)
CUNT DB 3 DUP(0)
DASEG ENDS
STACK1 SEGMENT STACK
DW 30H DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME DS:DASEG,SS:STACK1,CS:CODE BEGIN:MOV AX,DASEG
MOV DS,AX
MOV CX,10
LEA SI,V A1
LEA DI,V A2
LOP1:MOV AX,[SI]
CMP AX,[DI]
JG L1
JL L2
INC CUNT+2
JMP CON
L1:INC CUNT
JMP CON
L2:INC CUNT+1
CON:LOOP LOP1
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN。