汇编语言第六章答案.doc
文本预览下载声明
6.1 下面的程序段有错吗?若有,请指出错误。
CRAY PROC
PUSH AX
ADD AX, BX
RET
ENDP CRAY
答:程序有错。改正如下:
CRAY PROC
ADD AX, BX
RET
CRAY ENDP ;CRAY是过程名,应放在ENDP的前面
6.2 9BH
F7H
57H
80HF0A0:00B0H先PUSH,SP-2再PUSH,SP-2POP, SP+26.2 题堆栈及SP内容的变化过程已知堆栈寄存器SS的内容是0F0A0H,堆栈指示器SP的内容是00B0H,先执行两条把8057H和0F79BH分别入栈的PUSH指令,然后执行一条POP指令。试画出示意图说明堆栈及SP内容的变化过程。
答:变化过程如右图所示:
6.3 分析下面的程序,画出堆栈最满时各单元的地址及内容。
;********************************************
S_SEG SEGMENT AT 1000H ;定义堆栈段
DW 200 DUP (?) ;200*2=190H
TOS LABEL WORD
S_SEG ENDS
;********************************************
C_SEG SEGMENT ;定义代码段
ASSUME CS: C_SEG, SS: S_SEG
START: MOV AX, S_SEG
(FLAGS)
(AX)
T_ADDR
0000
(DS)1000:0184
:0186
:0188
:018A
:018C
:018E
SP:01866.3 题堆栈最满时各单元的地址及内容MOV SS, AX
MOV SP, OFFSET TOS
PUSH DS
MOV AX, 0
PUSH AX
┇
PUSH T_ADDR
PUSH AX
PUSHF
┇
POPF
POP AX
POP T_ADDR
RET
;--------------------------------------------------------------------------
C_SEG ENDS ;代码段结束
;******************************************
END START ;程序结束
答:堆栈最满时各单元的地址及内容如右图所示:
6.4 分析下面的程序,写出堆栈最满时各单元的地址及内容。
;********************************************
STACK SEGMENT AT 500H ;定义堆栈段
DW 128 DUP (?)
TOS LABEL WORD
STACK ENDS
;********************************************
CODE SEGMENT ;定义代码段
MAIN PROC FAR ;主程序部分
ASSUME CS: CODE, SS: STACK
START: MOV AX, STACK
MOV SS, AX
MOV SP, OFFSET TOS
PUSH DS
SUB AX, AX
PUSH AX
;MAIN PART OF PROGRAM GOES HERE
MOV AX, 4321H
CALL HTOA
RET
MAIN ENDP ;主程序部分结束
;--------------------------------------------------------------------
HTOA PROC NEAR ;HTOA子程序
CMP AX, 15
JLE B1
PUSH AX
0500:00EC
:00EE
:00F0
:00F2
:00F4
:00F6
:00F8
:00FA
:00FC
:00FE
SP:00EE
返回POP BP地址
0003H
返回POP BP地址
0002H
返回POP BP地址
0001H
主程序返回地址
0000
(DS)6.4 题堆栈最满时各单元的地址及内容
PUSH BP
MOV BP, SP
MOV BX, [BP+2]
AND BX, 000FH
MOV [BP+2], BX
POP BP
MOV CL, 4
SHR AX, CL
CALL HTOA
POP BP
B1: ADD AL, 30H
CMP AL, 3AH
JL PRINTIT
ADD AL, 7H
PRINTIT: MOV DL, AL
MOV AH, 2
INT 21H
RET
HOTA ENDP ;HOTA子程序结束
;--------------------------------------------------------------------
显示全部