用汇编语言编写查表程序

2019-04-15 18:22发布

;用汇编语言编写程序。
;先建立一数据表,表中存放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
提问者对于答案的评价:谢谢