当前位置: 代码迷 >> 汇编语言 >> 错在那里?该如何处理
  详细解决方案

错在那里?该如何处理

热度:6840   发布时间:2013-02-26 00:00:00.0
错在那里?
内存中自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           ;取十位数,并输出十位数
  相关解决方案