⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axbx.asm

📁 基于8086的一段汇编代码
💻 ASM
字号:

;  此段代码是显示曲线y=ax^3+bx^2+cx+d
        DATA  SEGMENT
       MESS1  DB        0FFH,'press 4 to show ax^3+bx^2+cx+d',0DH,0AH
              DB        0FFH,0FFH,'     ANYKEY TO PAUSE' ,0DH,0AH
              DB        0FFH,0FFH,'     5 TO QUIT',0DH,0AH  ;显示提示信息
              DB        ' parameter a =  0.'
        NUMA  DB        31H,0DH,0AH
              DB        ' parameter b =  0.'
        NUMB  DB        31H,0DH,0AH
              DB        ' parameter c =  '
        NUMC  DB        31H,0DH,0AH
              DB        ' parameter d =  '      ;显示四个参数a,b,c,d的当前数值
        NUMD  DB        31H,0DH,0AH         ,'$'
         SUM  DB        121 DUP(?), 0DH,0AH
     TEMPNUM  DB        121 DUP(?),'$'          ;零时累加器,用以暂时存储几项求和的值

          WA  DB        ' enter the value ', 61H,':','$'    ;显示a参数修改提示信息
          WB  DB        ' enter the value ', 62H,':','$'    ;显示b参数修改提示信息
          WC  DB        ' enter the value ', 63H,':','$'    ;显示c参数修改提示信息
          WD  DB        ' enter the value ', 64H,':','$'    ;显示d参数修改提示信息

         NUM  DW        50H
;************** x table (totally 121 sample values for each parameter)
;x^3数值表,共121个值
      AXBUF3  DB        216D,205D,195D,185D,176D,166D,157D,149D,141D,133D
              DB        125D,118D,111D,104D,97D, 91D, 85D, 80D, 74D,  69D
              DB        64D,59D,55D,51D,47D,43D,39D,35D,33D,30D
              DB        27D,24D,22D,20D,18D,16D,14D,12D,11D,9D
              DB        8D,7D,6D,5D,4D,3D,3D,2D,2D,1D
              DB        1D,1D,1D,0D,0D,0D,0D,0D,0D,0D
              DB        0
              DB        0D, 0D, 0D, 0D ,0D, 0D, 0D, 1D, 1D, 1D          ;;;x=0.1
              DB        1D, 2D, 2D, 3D, 3D, 4D, 5D, 6D, 7D, 8D
              DB        9D,  11D, 12D, 14D, 16D, 18D, 20D, 22D, 24D, 27D
              DB        30D, 33D, 36D, 39D, 43D, 47D, 51D, 55D, 59D, 64D
              DB        69D,  74D,  80D,  85D,  91D,  97D,  104D, 111D, 118D, 125D
              DB        133D, 141D, 149D, 157D, 166D, 176D, 185D, 195D, 205D, 216D
 ;x^2数值表,共121个值
      BXBUF2  DB        36D,35D,34D,32D,31D,30D,29D,28D,27D,26D
              DB        25D,24D,23D,22D,21D,20D,19D,18D,18D,17D
              DB        16D,15D,14D,14D,13D,12D,12D,11D,10D,10D
              DB        9D,8D,8D,7D,7D,6D,6D,5D,5D,4D
              DB        4D,4D,3D,3D,3D,2D,2D,2D,1D,1D
              DB        1D,1D,1D,0D,0D,0D,0D,0D,0D,0D
              DB        0D
              DB        0D,0D,0D,0D,0D,0D,0D,1D,1D,1D
              DB        1D,1D,2D,2D,2D,3D,3D,3D,4D,4D
              DB        4D,5D,5D,6D,6D,7D,7D,8D,8D,9D
              DB        10D,10D,11D,12D,12D,13D,14D,14D,15D,16D
              DB        17D,18D,18D,19D,20D,21D,22D,23D,24D,25D
              DB        26D,27D,28D,29D,30D,31D,32D,34D,35D,36D
;x^1数值表,共121个值
      CXBUF1  DB        120D,118D,116D,114D,112D,110D,108D,106D,104D,102D
              DB        100D,98D,96D,94D,92D,90D,88D,86D,84D,82D
              DB        80D,78D,76D,74D,72D,70D,68D,66D,64D,62D
              DB        60D,58D,56D,54D,52D,50D,48D,46D,44D,42D
              DB        40D,38D,36D,34D,32D,30D,28D,26D,24D,22D
              DB        20D,18D,16D,14D,12D,10D,8D,6D,4D,2D
              DB        0
              DB        2D,4D,6D,8D,10D,12D,14D,16D,18D,20D
              DB        22D,24D,26D,28D,30D,32D,34D,36D,38D,40D
              DB        42D,44D,46D,48D,50D,52D,54D,56D,58D,60D
              DB        62D,64D,66D,68D,70D,72D,74D,76D,78D,80D
              DB        82D,84D,86D,88D,90D,92D,94D,96D,98D,100D
              DB        102D,104D,106D,108D,110D,112D,114D,116D,118D,120D

        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,ES:DATA
      START:

              MOV       AX,DATA
              MOV       DS,AX
              MOV       ES,AX
              CALL      CRTSET      ;显示模式设置
              LEA       DX,MESS1    ;显示提示信息
              MOV       AH,09H
              INT       21H
      LABAL:  MOV       DL,0FFH     ;读键盘
              MOV       AH, 06H
              INT       21H
              MOV       BL,AL
              CMP       BL,34H      ;是4否?,是则显示曲线
              JZ        COUNT
              CMP       BL,35H      ;是5则退出
              JZ        TEMP
              JMP       LABAL
      COUNT:  MOV       SI,0
              MOV       CL,121
       TCOU:  MOV       TEMPNUM[SI],100         ;累加器初始值为100是显示位置调整 ,坐标提高
              INC       SI
              LOOP      TCOU
              MOV       SI,0
              MOV       AH,0
              MOV       CL,121
      NEXTC:  MOV       AL,AXBUF3[SI]           ;取x^3表值到AL
              MOV       BL,NUMA     ;取系数a 与之相乘
              SUB       BL,30H
              MUL       BL
              MOV       BL,10
              DIV       BL          ;将乘积缩小10倍
              MOV       AH,0
              CMP       SI,60       ;前60个值作负数处理
              JLE       DJIAN       ;跳至负数处理段
              ADD       TEMPNUM[SI],AL          ;后61个值直接加到累加器
     _DJIAN:
              MOV       AL,BXBUF2[SI]           ;取x^2表值到AL
              MOV       BL,NUMB     ;取系数b 与之相乘
              SUB       BL,30H
              MUL       BL
              MOV       BL,10
              DIV       BL          ;将乘积缩小10倍
              MOV       AH,0
              ADD       TEMPNUM[SI],AL          ; 将值加到累加器
              MOV       BL,NUMD     ;取参数d的值
              SUB       BL,30H
              ADD       TEMPNUM[SI],BL
              MOV       AL,CXBUF1[SI]           ;取x^1表值到AL
              MOV       BL,NUMC     ;取系数c 与之相乘
              SUB       BL,30H
              MUL       BL
              MOV       BL,20
              DIV       BL          ;将乘积缩小20倍
              CMP       SI, 60      ;前60个值作负数处理
              JL        DJIAN1
              ADD       TEMPNUM[SI],AL          ;后61个值直接加到累加器
              JMP       PJIAN
       TEMP:  JMP       TEMP1
      DJIAN:  SUB       TEMPNUM[SI],AL          ;x^3负数处理段
              JMP       _DJIAN      ;跳至处理x^2
     DJIAN1:  SUB       TEMPNUM[SI],AL          ;x^1负数处理段
              JMP       PJIAN
      PJIAN:
              INC       SI
              LOOP      NEXTC       ;处理下一个值
              JMP       IS2         ;累加完之后至显示部分

      TEMP1:  JMP       QUIT
     _LABAL:  JMP       LABAL

        IS2:  MOV       SI, 0
        DD1:  MOV       AL,TEMPNUM[SI]          ;取各项累加的值
              JMP       RESET       ;画点

         _D:  CALL      CRTSET      ;清屏
              LEA       DX,MESS1
              MOV       AH,09H
              INT       21H
              JMP       COUNT       ;重新累加
      RESET:  CALL      ADCDIS      ;调用画点子程序

         _C:  MOV       DL,0FFH     ;读键盘
              MOV       AH,06H
              INT       21H
              JZ        _A
              CMP       AL,35H
              JZ        _LABAL      ;是5 则跳至上一菜单
              CMP       AL,61H
              JZ        SHOWA       ;是a 则跳至参数a处理段
              CMP       AL,62H
              JZ        SHOWB       ;是b 则跳至参数b处理段
              CMP       AL,63H
              JZ        SHOWC       ;是c 则跳至参数c处理段
              CMP       AL,64H
              JZ        SHOWD       ;是d 则跳至参数d处理段
              JMP       LABAL
         _A:  CMP       SI,78H      ;是否画完120个点
              JZ        _C          ;若画完则只扫描键盘
              INC       SI
              JMP       DD1         ;取下一个值

      SHOWA:  LEA       DX,WA       ;显示提示信息
              MOV       AH,09H
              INT       21H
         _B:  MOV       DL,0FFH
              MOV       AH,06H
              INT       21H
              JZ        _B          ;读键盘值
              CMP       AL,31H
              JL        _B
              CMP       AL,39H      ;取0至9之间的数
              JG        _B
              MOV       NUMA,AL     ;修改系数a的值
              MOV       NUM ,50H    ;重新设置横坐标的起始值为80
              MOV       SI,0
              JMP       _D
      SHOWB:  LEA       DX,WB       ;显示提示信息
              MOV       AH,09H
              INT       21H
        _B1:  MOV       DL,0FFH
              MOV       AH,06H
              INT       21H         ;读键盘值
              JZ        _B1
              CMP       AL,31H
              JL        _B1
              CMP       AL,39H
              JG        _B1         ;取0至9之间的数
              MOV       NUMB,AL     ;修改系数b的值
              MOV       NUM ,50H    ;重新设置横坐标的起始值为80
              MOV       SI,0
              JMP       _D
      SHOWC:  LEA       DX,WC       ;显示提示信息
              MOV       AH,09H
              INT       21H
        _C1:  MOV       DL,0FFH
              MOV       AH,06H
              INT       21H
              JZ        _C1         ;读键盘值
              CMP       AL,31H
              JL        _C1
              CMP       AL,39H      ;取0至9之间的数
              JG        _C1
              MOV       NUMC,AL     ;修改系数c的值
              MOV       NUM ,50H    ;重新设置横坐标的起始值为80
              MOV       SI,0
              JMP       _D
      SHOWD:  LEA       DX,WB       ;显示提示信息
              MOV       AH,09H
              INT       21H
        _B2:  MOV       DL,0FFH
              MOV       AH,06H
              INT       21H         ;读键盘值
              JZ        _B2
              CMP       AL,31H
              JL        _B2
              CMP       AL,39H
              JG        _B2         ;取0至9之间的数
              MOV       NUMD,AL     ;修改系数d的值
              MOV       NUM ,50H    ;重新设置横坐标的起始值为80
              MOV       SI,0
              JMP       _D
       QUIT:
              MOV       AH,4CH
              INT       21H

      CRTSET  PROC      NEAR        ;显示设置子程序
              PUSH      AX
              MOV       AH,0
              MOV       AL,06H
              INT       10H
              POP       AX
              RET
      CRTSET  ENDP

      ADCDIS  PROC      NEAR        ;画点子程序
        S12:  PUSH      DX
              PUSH      CX
              PUSH      AX
              PUSH      BX
              XOR       AH,AH
              MOV       DL,160
              MUL       DL
              MOV       DL,255
              DIV       DL
              XOR       AH,AH
              MOV       DX,AX
              MOV       AX,160
              SUB       AX,DX
              ADD       AX,20
              MOV       DX,AX
              MOV       AX,NUM
              MOV       BX,AX
              MOV       CX,BX
              MOV       AH,0CH
              MOV       AL,1
              INT       10H
              INC       BX
              MOV       NUM,BX
              CMP       BX,0C9H
              JNZ       DISEND
              MOV       BX,50H
              MOV       NUM,BX
     DISEND:  POP       BX
              POP       AX
              POP       CX
              POP       DX
              RET
      ADCDIS  ENDP

      CRTRST  PROC      NEAR        ;显示重设置子程序
              PUSH      AX
              MOV       AH,0
              MOV       AL,3
              INT       10H
              POP       AX
              RET
      CRTRST  ENDP

        CODE  ENDS
              END       START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -