当前位置:文档之家› 汇编语言程序设计答案+廖建明-chap6

汇编语言程序设计答案+廖建明-chap6

第六章习题答案
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]
MOV DI,14[BP]
MOV SI,16[BP]
LOP:
XOR BL,BL
MOV AX,[SI]
LOP20:
CMP AX,20
JC SUB5
SUB AX,20
INC BL
JMP LOP20
SUB5:
MOV [DI],BL
XOR BL,BL
LOP5:
CMP AX,5
JC SUB2
SUB AX,5
INC BL
JMP LOP5
SUB2:
MOV [DI+COUNT],BL
XOR BL,BL
LOP2:
CMP AX,2
JC SUB1
SUB AX,2
INC BL
JMP LOP2
SUB1:
MOV [DI+COUNT+COUNT],BL
XOR BL,BL
LOP1:
CMP AX,1
JC DONE
SUB AX,1
INC BL
JMP LOP1
DONE:
MOV [DI+COUNT+COUNT+COUNT],BL ADD SI,2
INT DI
LOOP LOP
RET
F ENDP
CODE ENDS
END BEGIN。

相关主题