查表程序c8051汇编语言,用汇编语言编写查表程序

;用汇编语言编写程序。

;先建立一数据表,表中存放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提问者对于答案的评价:谢谢

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值