初学汇编之第三个程序(扩展一个二进制数)

来源:互联网 发布:炉石传说 秋日淘宝店 编辑:程序博客网 时间:2024/05/23 02:29
Code:
  1. MLENGTH=128   
  2. SSEG    SEGMENT PARA    STACK       ;堆栈段   
  3.     DB  256 DUP (0)   
  4. SSEG    ENDS   
  5.   
  6. DSEG    SEGMENT   
  7. TAB DW  0000000000000011B,0000000000001100B   
  8.     DW  0000000000110000B,0000000011000000B   
  9.     DW  0000001100000000B,0000110000000000B   
  10.     DW  0011000000000000B,1100000000000000B   
  11. MESS0   DB  'PLEASE INPUT A NUMBLE OF 8TH:$'  
  12. BUFF    DB  MLENGTH   
  13.     DB  ?   
  14.     DB  10  DUP (0)   
  15.   
  16. DSEG    ENDS   
  17. ;   
  18. CSEG    SEGMENT   
  19.     ASSUME  DS:DSEG,CS:CSEG,SS:SSEG   
  20. START:  MOV AX,DSEG   
  21.     MOV DS,AX   
  22.     MOV DX,OFFSET   MESS0   
  23.     CALL    DISPMESS   
  24.     MOV DX,OFFSET   BUFF     ;接收一个八位二进制数   
  25.     MOV AH,10   
  26.     INT 21H   
  27.     CALL    NEWLINE   
  28.     MOV SI,0        ;地址指针   
  29.     MOV DL,0        ;放结果的地方   
  30.     MOV CL,8        ;总长度   
  31.     INC SI   
  32. QQQ:    MOV DH,[BUFF+SI+1]  ;得到第一个字符   
  33.     SUB DH,'0'     
  34.     CALL    XIONG   
  35.     XOR AH,AH   
  36.     MUL DH   
  37.     ADD DL,AL   
  38.     INC SI   
  39.     DEC CL   
  40.     CMP CL,0   
  41.     JNBE    QQQ     ;这段运行完再dl得到二进制真数   
  42.     MOV AL,DL   
  43.     CALL    CCC     ;bx得到扩展后的数   
  44.     CALL    ECHO   
  45.     MOV AH,4CH   
  46.     INT 21H   
  47.        
  48.   
  49.   
  50. CCC PROC   
  51.     MOV CL,8        ;八位计八次数   
  52.     MOV SI,0        ;查表指针   
  53.     MOV BX,0        ;结果存放   
  54. QI: SHR AL,1        ;右移位   
  55.     JNC YAO     ;cf=0就跳   
  56.     MOV DX,TAB[SI]  ;查表   
  57.     OR  BX,DX   
  58. YAO:    INC SI   
  59.     INC SI   
  60.     DEC CL   
  61.     CMP CL,0   
  62.     JNBE    QI   
  63.     RET   
  64. CCC ENDP   
  65. ;   
  66. ECHO    PROC   
  67.     MOV CL,16   
  68. JJ: SHL BX,1   
  69.     JNC KK   
  70.     MOV DL,'1'  
  71.     CALL    ECHOCH   
  72.     JMP OO   
  73. KK: MOV DL,'0'  
  74.     CALL    ECHOCH   
  75. OO: DEC CL   
  76.     CMP CL,0   
  77.     JNBE    JJ   
  78.     RET   
  79. ECHO    ENDP   
  80. ;   
  81. NEWLINE PROC   
  82.     PUSH    AX   
  83.     PUSH    DX   
  84.     MOV DL,0DH   
  85.     MOV AH,2   
  86.     INT 21H   
  87.     MOV DL,0AH   
  88.     MOV AH,2   
  89.     INT 21H   
  90.     POP DX   
  91.     POP AX   
  92.     RET   
  93. NEWLINE ENDP   
  94. ;   
  95. XIONG   PROC   
  96.     PUSH    CX   
  97.     CMP CL,1   
  98.     JE  LI   
  99.     DEC CL   
  100.     MOV AL,1   
  101. AA: SHL AL,1   
  102.     LOOP    AA   
  103.     JMP BAO   
  104. LI: MOV AL,1   
  105. BAO:    POP CX   
  106.     RET   
  107. XIONG   ENDP   
  108. ;   
  109. DISPMESS    PROC   
  110.     MOV AH,9   
  111.     INT 21H   
  112.     RET   
  113. DISPMESS    ENDP   
  114. ;   
  115. ECHOCH      PROC   
  116.     MOV AH,2   
  117.     INT 21H   
  118.     RET   
  119. ECHOCH  ENDP   
  120. CSEG    ENDS   
  121.     END START