汇编语言程序设计答案+廖建明-chap6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章习题答案
6.1 C
6.2 D
6.3 D
6.4 C
6.5 B
6.6 错。在L0: MOV AL,0语句后面加上RET语句
6.7
段内调用:保存IP内容入栈;更新IP内容
段间调用:保存CS,IP内容入栈;更新CS,IP内容
6.8
段内返回:从栈中弹出一个字的内容送入IP寄存器;SP=(SP)+n(如果带有操作数n) 段间返回:从栈中弹出两个字的内容分别送入IP,CS;SP=(SP)+n(如果带有操作数n)
6.9
从栈中弹出两个字的内容分别送入IP,CS;SP=(SP)+4
6.10
在需要和主程序共享寄存器的时候需要保护寄存器
6.11
寄存器传递参数;堆栈传递参数;地址表传递参数
6.12
相同点:都进行一次程序跳转
不同点:CALL会保存原地址IP入栈,而JMP不会
6.13
错误:子程序是FAR类型的,CALL时用的是NEAR
6.14
BX;(BX);SHIFT
6.15
图略
6.16
DATA SEGMENT
N DB 5
DATA ENDS
STACK SEGMENT
DW 20H DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN:
MOV AX,DATA
MOV DS,AX
MOV AL,N
CALL FACT;调用阶乘子程序计算5!
MOV RESULT,DX
DEC N
MOV AL,N
CALL FACT;调用阶乘子程序计算4!
ADD RESULT,DX
DEC N
MOV AL,N
CALL FACT;调用阶乘子程序计算3!
ADD RESULT,DX
MOV AH,4CH
INT 21H
FACT PROC NEAR;阶乘子程序
MOV DX,1
CMP AL,0
JZ DONE
PUSH AX
DEC AL
CALL FACT
POP AX
MUL DL
MOV DX,AX
DONE:
RET
FACT ENDP
CODE ENDS
END BEGIN
6.17
略
6.18
(1)寄存器传值
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET NUM
MOV CX,COUNT
MOV DX,0
CALL F
MOV AH,4CH
INT 21H
F PROC
LOP:
MOV DI,OFFSET NUM20
ADD DI,DX
INC DX
XOR BL,BL
MOV AX,[SI]
LOP20:
CMP AX,20
JC SUB5
SUB AX,20
INT BL
JMP LOP20
SUB5:
MOV [DI],BL
XOR BL,BL
LOP5:
CMP AX,5
JC SUB2
SUB AX,5
INT BL
JMP LOP5
SUB2:
ADD DI,COUNT; DI=DI+2*COUNT
MOV [DI],BL
XOR BL,BL
LOP2:
CMP AX,2
JC SUB1
SUB AX,2
INT BL
JMP LOP2
SUB1:
ADD DI,COUNT SHL 1;DI=DI+2*COUNT MOV [DI],BL
XOR BL,BL
LOP1:
CMP AX,1
JC DONE
SUB AX,1
INT BL
JMP LOP1
DONE:
ADD DI,COUNT
ADD DI,COUNT
ADD DI,COUNT;DI=DI+3*COUNT
MOV [DI],BL
ADD SI,2
LOOP LOP
RET
F ENDP
EODE ENDS
(2)堆栈传值
BEGIN:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET NUM
MOV DI OFFSET NUM20
MOV CX,COUNT
PUSH SI
PUSH DI
PUSH CX
CALL F
MOV AH,4CH
INT 21H
F PROC
PUSH AX
PUSH BX
PUSH CX
PUSH SI
PUSH DI
MOV BP,SP
MOV CX,12[BP]