+ -
当前位置:首页 → 问答吧 → 帮忙看下什么问题好么?

帮忙看下什么问题好么?

时间:2011-10-27

来源:互联网

小弟正在写一段汇编程序
编写计算Y=X^2+6*X+9的程序。

代码如下:
Assembly code
DATA SEGMENT
X DB 04H
Y DB ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
PUSH DATA
XOR AX,AX
XOR CX,CX
PUSH AX
MOV AX,DATA
MOV DS,AX

MOV AL,X
MOV CL,X
MUL CL    
MOV BX,AX    ;实现X*X,结果存入BX
MOV AX,X
MOV CL,1
SHL AX,CL
MOV DX,AX
SHL AX,CL
ADD DX,AX    ;实现6*X,结果存入DX
MOV AX,BX
ADD AX,DX
ADD AX,9
MOV Y,AX

MOV AX,Y
MOV DL,AL
AND DL,0F0H
MOV CL,04H
SHR DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,Y
ADD DL,0FH
ADD DL,30H
ADD AH,02H
INT 21H
CODE ENDS
END START



结果,在MASM 5.0编译出错误:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [cc33.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
cc33.asm(9): error A2056: Immediate mode illegal
cc33.asm(20): warning A4031: Operand types must match
cc33.asm(29): warning A4031: Operand types must match
cc33.asm(31): warning A4031: Operand types must match

50734 + 450386 Bytes symbol space free

3 Warning Errors
1 Severe Errors

求解释啊,求解释

作者: cc199026   发布时间: 2011-10-27

cc33.asm(9): error A2056: Immediate mode illegal 不该用立即数的你用了
cc33.asm(20): warning A4031: Operand types must match 类型不匹配
cc33.asm(29): warning A4031: Operand types must match
cc33.asm(31): warning A4031: Operand types must match

Assembly code

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    编写计算Y=X^2+6*X+9的程序。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
X DB 04H
Y DB ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
;把你那两个PUSH删掉了
MOV AX,DATA
MOV DS,AX

MOV AL,X
MOV CL,X
MUL CL    
MOV BL,AL    ;实现X*X,结果存入BX
MOV AL,X
MOV CL,1
SHL AL,CL
MOV DL,AL
SHL AL,CL
ADD DL,AL    ;实现6*X,结果存入DX
MOV AL,BL
ADD AL,DL
ADD AL,9
MOV Y,AL

MOV DL,Y
AND DL,0F0H
MOV CL,04H
SHR DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,Y
AND DL,0FH
ADD DL,30H
MOV AH,02H
INT 21H

;没转化成10进制输出了
MOV DL,'H'      ;我加的
MOV AH,2
INT 21H

MOV AH,7        ;我加的  
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START

作者: DiamondCG   发布时间: 2011-10-27

Assembly code
MOV AH,7        ;我加的  
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START


这一段求解释,尤其是那个MOV AH,7
实在看不明白

作者: cc199026   发布时间: 2011-10-27

引用 2 楼 cc199026 的回复:

Assembly code
MOV AH,7 ;我加的
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START


这一段求解释,尤其是那个MOV AH,7
实在看不明白

MOV AH,7 ;21号中断7号子功能:输入不回显,这里起程序中断作用,防止你一运行该程序,还没看到结果一闪就没了.
INT 21H
MOV AX,4C00H ;21号中断4c号子功能:返回系统
INT 21H

作者: DiamondCG   发布时间: 2011-10-27