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

📄 sincex3.asm

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


;用电位器调节曲线y=asin(bx)参数
        DATA  SEGMENT
       MESS1  DB        0DH,0AH,0DH,0AH,0FFH,' Press 4 to show asin(bx)',0DH,0AH,'        5 TO QUIT',0DH,0AH,0FFH,0FFH,'      Anykey to pause'
              DB        0DH,0AH,0DH,0AH,0DH,0AH,0FFH,0FFH,'      zhouyaoxin  (08003128)',0DH,0AH ,'$'
       MESS2  DB        ' parameter a =   '
          WA  DB        31H,30H,30H,'/255A (V)',0DH,0AH
              DB        ' parameter b = 0.054/'
          WB  DB        30H,30H,31H,'T',0DH,0AH,'$'
        NUMA  DB        0AH
        NUMB  DB        1H
         NUM  DW        20H
; sin table (totally 116 sample values)
      SINBUF  DB        128D,135D,141D,148D,155D,161D,167D,174D,180D,186D
              DB        192D,198D,203D,209D,214D,219D,223D,227D,231D,235D
              DB        239D,242D,245D,248D,250D,252D,253D,254D,255D
              DB        255D,254D,253D,252D,250D,248D,245D,242D,239D
              DB        235D,231D,227D,223D,219D,214D,209D,203D,198D,192D
              DB        186D,180D,174D,167D,161D,155D,148D,141D,135D,128D
              DB        121D,115D,108D,101D, 95D, 89D, 82D, 76D, 70D
              DB        64D, 58D, 53D, 47D, 42D, 37D, 33D, 29D, 25D, 21D
              DB        17D, 14D, 11D, 08D, 06D, 04D, 03D, 02D, 01D, 00D
              DB        00D, 01D, 02D, 03D, 04D, 06D, 08D, 11D, 14D, 17D
              DB        21D, 25D, 29D, 33D, 37D, 42D, 47D, 53D, 58D, 64D
              DB        70D, 76D, 82D, 89D, 95D,101D,108D,115D,121D
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,ES:DATA
      START:
              MOV       AX,DATA
              MOV       DS,AX
              MOV       ES,AX
     LABAL1:  CALL      CRTSET      ;显示模式设置
              MOV       NUM,20
              LEA       DX,MESS1
              MOV       AH,09H
              INT       21H         ;显示提示信息
      LABAL:  MOV       DL,0FFH
              MOV       AH, 06H
              INT       21H         ;读键盘
              MOV       BL,AL
              CMP       BL,34H
              JZ        IS4         ;为4则画曲线
              CMP       BL,35H
              JZ        TEMP0       ;为5则退出
              JMP       LABAL
        IS4:  CALL      CRTSET      ;清屏
              LEA       DX,MESS2
              MOV       AH,09H
              INT       21H         ;显示当前参数值
       IS41:  MOV       SI, 0
        DD1:
              MOV       DX,298H     ;启动A/D转换
              OUT       DX,AL
              CALL      DELAY3
              IN        AL,DX       ;读转换值
              CMP       NUMA,AL     ;比较是否有参数变化
              JNZ       SHOWA       ;有则修改参数 a,刷新参数显示值
        T_D:
              MOV       DX,299H     ;启动A/D转换
              OUT       DX,AL
              CALL      DELAY3
              IN        AL,DX       ;读转换值
              CMP       NUMB,AL     ;比较是否有参数变化
              JNZ       SHOWB       ;有则修改参数 b,刷新参数显示值
        T_B:  MOV       AL,SINBUF[SI]           ;读表值
              MOV       AH,0
              MOV       CL,NUMA
              MUL       CL
              MOV       DL,255
              DIV       DL          ;为控制显示范围,缩小255倍
              MOV       DX,29CH
              OUT       DX,AL
              INC       DX
              OUT       DX,AL       ; 启动D/A转换,输出制示波器
              MOV       BL,AL       ;;
              MOV       AX,128      ;;
              MUL       CL          ;;
              MOV       DL,255      ;;
              DIV       DL          ;;
              MOV       CL,128      ;;
              SUB       CL,AL       ;;
              MOV       AL,BL       ;;
              ADD       AL,CL       ;坐标调整,使曲线在中间显示
              CMP       NUM,620     ;画满一屏幕就不画点,但继续循环
              JLE       RESET
              JMP       _C

      TEMP0:  JMP       QUIT
    TLABAL1:  JMP       LABAL1
      TEMIS:  JMP       IS41

         _D:  CALL      CRTSET
              LEA       DX,MESS2
              MOV       AH,09H
              INT       21H
              JMP       T_D

      RESET:  CALL      ADCDIS      ;调用画点子程序
         _C:
              CALL      DELAY       ;调用延时子程序,此处可以改变周期
              MOV       DL,0FFH
              MOV       AH,06H
              INT       21H         ;读键盘
              JZ        _A
              CMP       AL,35H
              JZ        TLABAL1     ;为5则跳至上一菜单

         _A:  CMP       SI,73H
              JZ        TEMIS       ;画完一个周期si清零
              INC       SI
              JMP       DD1
      SHOWA:                        ;修改参数a
              MOV       NUMA,AL
              CALL      DIPA        ;调用a显示修改子程序
              MOV       NUM ,20
              JMP       _D

      SHOWB:                        ;修改参数b
              MOV       NUMB,AL
              CALL      DIPB        ;调用a显示修改子程序
              MOV       NUM ,20
              CALL      CRTSET
              LEA       DX,MESS2
              MOV       AH,09H
              INT       21H         ;刷新参数显示值
              JMP       T_B


       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
              MOV       CL,NUMB
              MOV       CH,0
              ADD       BX,CX
              MOV       NUM,BX      ;修改横坐标
              CMP       BX,640
              JNZ       DISEND
              MOV       BX,00H
              MOV       NUM,BX
     DISEND:  POP       BX
              POP       AX
              POP       CX
              POP       DX
              RET
      ADCDIS  ENDP

       DELAY  PROC      NEAR        ;延时子程序,可根据参数b的值改变延时长度
              PUSH      CX
              PUSH      AX
              PUSH      BX
              MOV       AL,NUMB
              MOV       BL,10
              MUL       BL          ;将参数b的值扩大10倍,使之变化明显
              MOV       CX,AX
       NEXT:  CALL      DELAY1
              LOOP      NEXT
              POP       BX
              POP       AX
              POP       CX
              RET
       DELAY  ENDP
        DIPA  PROC      NEAR        ;将16进制a变为10进制
              PUSH      AX
              PUSH      BX
              MOV       AL,NUMA
              MOV       AH,0
              MOV       BL,100
              DIV       BL          ;模100处理
              MOV       WA,AL
              ADD       WA,30H
              MOV       AL,AH
              MOV       AH,0
              MOV       BL,10
              DIV       BL          ;模10处理
              MOV       WA[1],AL
              ADD       WA[1],30H
              MOV       WA[2],AH
              ADD       WA[2],30H
              POP       BX
              POP       AX
              RET
        DIPA  ENDP
        DIPB  PROC      NEAR        ;将16进制b变为10进制
              PUSH      AX
              PUSH      BX
              MOV       AL,NUMB
              MOV       AH,0
              MOV       BL,100
              DIV       BL          ;模100处理
              MOV       WB,AL
              ADD       WB,30H
              MOV       AL,AH
              MOV       AH,0
              MOV       BL,10
              DIV       BL          ;模10处理
              MOV       WB[1],AL
              ADD       WB[1],30H
              MOV       WB[2],AH
              ADD       WB[2],30H
              POP       BX
              POP       AX
              RET
        DIPB  ENDP

      DELAY1  PROC      NEAR        ;延时子程序
              PUSH      CX
              MOV       CX,300H
      NEXT1:  LOOP      NEXT1
              POP       CX
              RET
      DELAY1  ENDP

      DELAY3  PROC      NEAR        ;ADDA延时子程序
              PUSH      CX
              MOV       CX,0FFFH
      NEXT3:  LOOP      NEXT3
              POP       CX
              RET
      DELAY3  ENDP

        CODE  ENDS
              END       START       ;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

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