汇编_层层盒

8个立方体重叠的3d特效

 

;MASM6.11 编译方法:

;masm /l %1.asm
;link /tiny %1.obj
;

      Code Segment
      assume cs:code,ds:code,es:code
      .386P 
      Org 100h
      start:
      push cs
      pop ds
      mov ax,13h
      int 10h
      push 5000h
      pop   fs
      @main:push fs
      pop es
      xor eax,eax
      xor di,di
      mov ch,3eh
      rep stosd
      push cs
      pop   es
      mov cx,10
      mov zof,2400
      sh: push cx
      lea di, p1   ;对P1~P8分别赋值
      lea si, box
      mov cx,8
      so:call update
      loop so
      call drwline
      pop cx
      sub zof,200
      loop sh
      push fs
      push 0a000h
      pop es
      pop ds
      xor si,si
      xor di,di
      mov ch,3eh
      rep movsd
      push cs
      push cs
      pop   ds
      pop es
      call wtforVideo
      jmp short @main
      exit: mov ax,3
      int 10h
      mov ah,4ch
      int 21h
      ;==================
      wtforVideo:
      inc xrot
      inc yrot
      inc zrot
      mov dx,3dah
      ta: in al,dx
      test al,8
      jnz ta
      tb: in al,dx
      test al,8
      jz tb
      in al,60h
      cmp al,1
      je exit
      ret
      ;==================
      drwline:
      sl Macro a,b
      mov ax,[a]
      mov Xdot,ax
      mov ax,[a+2]
      mov Ydot,ax
      mov bx,[b]
      mov ax,[b+2]
      call line
      endm
      sl p1,p2
      sl p2,p3
      sl p3,p4
      sl p4,p1
      sl p5,p6
      sl p6,p7
      sl p7,p8
      sl p8,p5
      sl p1,p5
      sl p2,p6
      sl p3,p7
      sl p4,p8
      ret
      ;==================
      line:PUSHA ;input(Xdot=beginX Ydot=beginY bx=endX ax=endY)
      mov cx, 1
      mov dx, 140h
      @0: sub bx, Xdot ;BX=deX
      Jns @1
      neg cx
      neg bx
      @1: sub ax, Ydot ;AX=deY
      Jns @2
      neg dx
      neg ax
      @2: cmp bx, ax
      Ja @3
      Xchg cx,dx ;swap(sdx,sdy)
      Xchg ax,bx ;swap(dex,dey)
      @3: mov lcnt, bx ;save(count)
      cmp bx,1
      jl e
      cmp bx,379
      jg e
      shl ax, 1   ;2dY
      mov di, ax   ;save 2dY
      shl bx, 1   ;2dX
      mov si, bx   ;save 2dX
      mov bp,Ydot
      imul bp,140h
      add bp,Xdot
      @p:mov byte ptr fs:[bp],52h
      nodot: add bp,cx
      cmp ax,bx
      Jl @n
      add bp,dx
      sub ax, si
      @n:
      add ax, di
      dec lcnt
      Jnz @p
      e: POPA
      ret
      ;=====================
      sincos:
      fldpi
      fidiv rota
      fimul word ptr [xrot+bp]
      fst tan
      fsincos
      fxch
      fimul zp
      fistp zt
      fimul yp
      fisub zt
      fistp yt
      push yt
      fld tan
      fsincos
      fimul zp
      fistp zt
      fimul yp
      fiadd zt
      fistp zp
      pop yp
      ret
      resincos:
      add bp, 2
      mov ax, zp
      xchg ax,xp
      xchg ax,yp
      xchg ax,zp
      call sincos
      ret
      ;==================
      update:
      lodsw
      mov xp,ax
      lodsw
      mov yp,ax
      lodsw
      mov zp,ax
      xor bp,bp
      call sincos
      call resincos
      call resincos
      mov bx, zp
      add bx,zof
      mov ax,xp
      imul xof
      idiv bx
      add ax,Xpos
      stosw ;send x
      mov ax,yp
      imul yof
      idiv bx
      add ax,Ypos
      stosw ;send y
      mov ax,zp
      stosw ;send z ;di+=6
      ret
      ;=====================
      Xpos dw 160
      Ypos dw 100
      rota dw 180
      Xof dw 256
      Yof dw 256
      Zof dw 640
      box dw -o,-o,-o
      dw o,-o,-o
      dw o, o,-o
      dw -o, o,-o
      dw -o,-o,o
      dw o,-o,o
      dw o, o,o
      dw -o, o,o
      p1 dw ?,?,?
      p2 dw ?,?,?
      p3 dw ?,?,?
      p4 dw ?,?,?
      p5 dw ?,?,?
      p6 dw ?,?,?
      p7 dw ?,?,?
      p8 dw ?,?,?
      Xdot dw ?
      Ydot dw ?
      lcnt dw ?
      Xt dw ?
      Yt dw ?
      Zt dw ?
      Xp dw ?
      Yp dw ?
      Zp dw ?
      Xrot dw ?
      Yrot dw ?
      Zrot dw ?
      tan dd ?
      o equ 120
      ;=====================
      code ends
      end START

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值