;用汇编语言编写程序。
;先建立一数据表,表中存放0~9的平方,查表求某数字的平方。
;悬赏分:5 | 解决时间:2011-5-16 12:37
;========================================================
最佳答案:
;查表方法,适用性很广,在下面给出的程序中,分别存放了平方表和立方表。
;读者稍加改动,该程序就可以查出平方或立方值。
;程序运行时,需要键入0~9,该程序立即就会输出对应的平方值(或立方值)。
;按ESC退出程序。
;以下是查表输出的完整程序。
;--------------------------------------------------------------------
DATA SEGMENT
;数据表格如下:
TABLE DW 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
; TABLE DW 0, 1, 8, 27, 64, 125, 6*6*6, 7*7*7, 8*8*8, 9*9*9
;上面两行,分别是平方表和立方表,读者应该任选其一
DATA ENDS
;--------------------------
STACK SEGMENT
DW 128 DUP(0)
STACK ENDS
;--------------------------
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, SS: STACK
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
M_LOOP:
; MOV AH, 1 ;读键盘,有显示
MOV AH, 7 ;读键盘,无显示
INT 21H ;按键后,AL为其ASCII码
CMP AL, 1BH ;是ESC键吗?
JZ EXIT ;是则退出程序
CMP AL, 30H ;判断是否小于0
JL M_LOOP
CMP AL, 39H ;判断是否大于9
JG M_LOOP
SUB AL, 30H ;变换为二进制数
MOV DL, AL ;送到DL
CALL OUT_ASC ;显示其ASCII码
;------------------------------
MOV BX, TABLE ;表首地址
PUSH CX
SHL AL, 1 ;乘以2
MOV AH, AL ;暂存
XLAT ;查出低字节
MOV CL, AL ;存
INC AH ;查高字节
MOV AL, AH
XLAT ;查出
MOV CH, AL ;存
MOV AX, CX ;查出来的字,存放到AX
POP CX
;------------------------------
CALL CR_LF ;显示回车换行
CALL OUT_AX ;显示AX中的内容
CALL CR_LF ;显示回车换行
JMP M_LOOP ;循环
;------------------------------
EXIT:
MOV AH, 4CH ;结束程序
INT 21H
;--------------------------------------------
OUT_AX PROC NEAR ;以10进制显示AX中的内容
PUSH BX
MOV DL, 0
CALL OUT_ASC ;显示0
;对于本题目,AX中的内容不超过1000,所以千位显示0
MOV BL, 100
DIV BL
MOV DL, AL
CALL OUT_ASC ;显示百位
MOV AL, AH
XOR AH, AH
MOV BL, 10
DIV BL
MOV DL, AL
CALL OUT_ASC ;显示十位
MOV DL, AH
CALL OUT_ASC ;显示个位
POP BX
RET
OUT_AX ENDP
;--------------------------------------------
OUT_ASC PROC NEAR
ADD DL, 30H ;把数字变换为ASCII
CALL OUT_DL ;显示
RET
OUT_ASC ENDP
;--------------------------------------------
CR_LF PROC NEAR
MOV DL, 10 ;换行的ASCII码
CALL OUT_DL ;显示
MOV DL, 13 ;回车的ASCII码
CALL OUT_DL ;显示
RET
CR_LF ENDP
;--------------------------------------------
OUT_DL PROC NEAR
PUSH AX
MOV AH, 2 ;显示DL中的ASCII码
INT 21H
POP AX
RET
OUT_DL ENDP
;--------------------------------------------
CODE ENDS
END START ;程序结尾,从START开始执行
------------------------------------------------------------------
原题网址:
http://zhidao.baidu.com/question/267138186.html提问者对于答案的评价:谢谢