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

📄 sincex2.asm

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


 ;采用小键盘修改曲线y=a*sin(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         ;参数变量a
        NUMB  DB        1H          ;参数变量b
         NUM  DW        20H
      UFFER1  DB        0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H,77H
        SUB1  DB        0H
; 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:
;************** sub program for display ******************
              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       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       TEMP
    TLABAL1:  JMP       LABAL1
      TEMIS:  JMP       IS41

         _D:  CALL      CRTSET
              LEA       DX,MESS2
              MOV       AH,09H
              INT       21H
      RESET:  CALL      ADCDIS      ;调用画点子程序

         _C:  CALL      DELAY       ;调用延时子程序,此处可以改变周期
              CALL      READ        ;小键盘扫描
              CMP       SUB1,0EEH
              JZ        SHOWA       ;为0键则参数a加一
              CMP       SUB1,0DEH
              JZ        SHOWA1      ;为0键则参数a减一
              CMP       SUB1,0BEH
              JZ        SHOWB       ;为0键则参数b加一
              CMP       SUB1,7EH
              JZ        SHOWB1      ;为0键则参数b减一
              MOV       DL,0FFH
              MOV       AH,06H
              INT       21H         ;读键盘,
              JZ        _A          ;a,d,w,s分别控制参数a,b的递增和递减
              CMP       AL,77H
              JZ        SHOWA
              CMP       AL,61H
              JZ        SHOWB
              CMP       AL,73H
              JZ        SHOWA1
              CMP       AL,64H
              JZ        SHOWB1      ;;
              CMP       AL,35H
              JZ        TLABAL1
         _A:  CMP       SI,73H
              JZ        TEMIS       ;画完一个周期si清零
              INC       SI
              JMP       DD1
       TEMP:  JMP       QUIT
      SHOWA:                        ;参数a加1
              CMP       NUMA,0FFH
              JZ        _A
              ADD       NUMA,1
              CALL      DIPA        ;调用参数a显示处理子程序
              MOV       NUM ,20
              JMP       _D
     SHOWA1:                        ;参数a减1
              CMP       NUMA,0
              JZ        _A
              SUB       NUMA,1
              CALL      DIPA
              MOV       NUM ,20
              JMP       _D
      SHOWB:                        ;参数b加1
              CMP       NUMB,0FFH
              JZ        _A
              ADD       NUMB,1
              CALL      DIPB        ;调用参数a显示处理子程序
              MOV       NUM ,20
              JMP       _D
     SHOWB1:                        ;参数b减1
              CMP       NUMB,1H
              JZ        _A
              SUB       NUMB,1
              CALL      DIPB
              MOV       NUM ,20
              JMP       _D
       QUIT:                        ;CALL      CRTRST
              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
       INCB:
              INC       BX
              LOOP      INCB
              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       AH,0
              MOV       CX,AX
       NEXT:  CALL      DELAY1
              LOOP      NEXT
              POP       BX
              POP       AX
              POP       CX
              RET
       DELAY  ENDP

        DIPA  PROC      NEAR        ;调用参数a显示处理子程序
              PUSH      AX          ;将16进制a变为10进制
              PUSH      BX
              MOV       AL,NUMA
              MOV       AH,0
              MOV       BL,100      ;模100处理
              DIV       BL
              MOV       WA,AL
              ADD       WA,30H
              MOV       AL,AH
              MOV       AH,0
              MOV       BL,10       ;模10处理
              DIV       BL
              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
        READ  PROC      NEAR        ;小键盘扫描子程序
              PUSH      AX
              PUSH      DX
              PUSH      CX
        LO1:
              MOV       DX,283H
              MOV       AL,10010011B
              OUT       DX,AL
              MOV       DX,282H
              MOV       AL,0H
              OUT       DX,AL
              MOV       DX,282H
              IN        AL,DX
              AND       AL,0FH
              CMP       AL,0FH
              JZ        _Q
              CALL      DELAY1
              IN        AL,DX
              AND       AL,0FH
              CMP       AL,0FH
              JZ        _Q
              MOV       CL,AL
              MOV       DX,283H
              MOV       AL,10011010B
              OUT       DX,AL
              MOV       DX,282H
              MOV       AL,0H
              OUT       DX,AL
              MOV       DX,282H
              IN        AL,DX
              AND       AL,0F0H
              ADD       CL,AL
              MOV       SUB1,CL
              JMP       _Q1
         _Q:  MOV       SUB1,0
        _Q1:  POP       CX
              POP       DX
              POP       AX
              RET
        READ  ENDP
        CODE  ENDS
              END       START

⌨️ 快捷键说明

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