首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

错在那里?该如何处理

2012-03-19 
错在那里?内存中自TABLE开始的七个单元中连续存放着自然数0~7的立方值。任一个数X(0≤X≤6)在FIRST单元中。要

错在那里?
内存中自TABLE开始的七个单元中连续存放着自然数0~7的立方值。任一个数X(0≤X≤6)在FIRST单元中。要求查表找出X的立方值。
我的程序清单如下:
DATAS   SEGMENT
    MESSAGE   DB   'Please   input   0~6: ', '$ '
    TABLE   DB   0,1,8,27,64,125,216  
    FIRST   DB   ?
    SECOND   DB   ?
DATAS   ENDS
 
CODES   SEGMENT
        ASSUME   CS:CODES,DS:DATAS
START:
        MOV   AX,DATAS
        MOV   DS,AX
        MOV   DX,OFFSET   MESSAGE
        MOV   AH,09H               ;调用9号功能显示字符串Please   input   0~6:
        INT   21H
        MOV   AH,01H               ;调用1号功能从键盘输入要求方的数字
        INT   21H
        MOV   BX,OFFSET   TABLE          
        SUB   AL,30H
        MOV   FIRST,AL
        XOR   AH,AH
        XLAT                 ;查表
        MOV   SECOND,AL         ;查处的结果放入SECOND
        CMP   SECOND,10       ;判断结果是否大于10
        JAE   PRINT100         ;是的话转到PRINT100:输出有百位的数字
        ADD   SECOND,30H
        MOV   DL,SECOND
        MOV   AH,02H
        INT   21H
        JMP   SHORT   EXIT
PRINT100:
        CMP   SECOND,100     ;判断结果是否大于100
        JB   PRINT10             ;是的话转到PRINT10:输出有十位的数字
        MOV   AL,SECOND
        CBW
        MOV   CL,100            
        DIV   CL                     ;取百位
        MOV   DL,AL
        ADD   DL,30H
        MOV   SECOND,AH       ;保存十、个位数
        MOV   AH,02H
        INT   21H                   ;输出百位数
        MOV   AL,SECOND
        CBW
        MOV   CL,10               ;取十位数,并输出十位数
        DIV   CL
        MOV   DL,AL
        MOV   DH,AH
        MOV   AH,02H
        ADD   DL,30H
        INT   21H
        MOV   DL,DH                 ;输出个位数
        ADD   DL,30H
        INT   21H
        JMP   SHORT   EXIT
PRINT10:
        MOV   AL,SECOND           ;取十位数,并输出十位数


        CBW
        MOV   CL,10
        DIV   CL
        MOV   DL,AL
        MOV   DH,AH
        MOV   AH,02H
        ADD   DL,30H
        INT   21H
        MOV   DL,DH                 ;输出个位数
        ADD   DL,30H
        INT   21H
EXIT:
        MOV   AX,4C00H
        INT   21H
CODES   ENDS
        END   START
调试运行后可以输入0~5的数字,只是输入6后不能得到216,显示Divide   error,不知是什么原因,请高手帮忙,菜鸟弟不胜感激!

[解决办法]
...
PRINT100:
CMP SECOND,100 ;判断结果是否大于100
JB PRINT10 ;是的话转到PRINT10:输出有十位的数字
MOV AL,SECOND
CBW ;* 改为 mov ah, 0 试试?
...

热点排行