求助:用汇编编写一个输出“hello world”的动画
时间:2010-04-17
来源:互联网
作者: qijiba 发布时间: 2010-04-17
有汇编动画的例子,可以参考一下
作者: mydo 发布时间: 2010-04-17
www.aogosoft.com
有汇编动画的例子,可以参考一下
额。。。没找到。。能具体点?
作者: qijiba 发布时间: 2010-04-17
http://hi.baidu.com/blueglass2/blog/item/bd5b6c16ad500b4221a4e97f.html
史上最强的HelloWord[3D旋转]2009-03-28 18:02;HelloWorld [旋转的3D文字]
;编译方法: Tasm /x/t hello.asm Tlink /x/t hello.obj
;上下左右键移动 pgdown扩大 pgup缩小 esc退出
Code Segment
assume cs:code,ds:code,es:code
.386P
ORG 100H
START:
mov ax,13h
int 10h
lea dx,msg
mov ah,9
int 21h
;==========================
push 0a000h
pop es
xor bp,bp
mov pcnt,0
mov di,140h*8*4
mov si,140h*8
@scan:
cmp byte ptr es:[si],0
jz @1
mov ax,di
call addxy
inc ax
call addxy
add ax,140h
call addxy
dec ax
call addxy
@1: sub di, 2
dec si
jnz @scan
;==========================
@main: call drawing
inc Zrot
test Zrot,8
jnz norot
inc Xrot
inc Yrot
norot: call scankey
jmp short @main
exit: mov ax,3
int 10h
int 20h
;=================
addxy: push ax
xor dx,dx
mov bx,140h
div bx
sub ax,60
sub dx,60
sal ax, 1
sal dx, 1
mov [400h+bp+0],ax
mov [400h+bp+2],dx
inc pcnt
add bp,4
pop ax
ret
;==================
scankey:
mov dx,3dah
ta: in al,dx
test al,8
jnz ta
tb: in al,dx
test al,8
jz tb
in al,60h
k0: cmp al, 75
Jne k1
sub xx, 8
k1: cmp al, 77
Jne k2
add xx, 8
k2: cmp al, 72
Jne k3
sub yy, 6
k3: cmp al, 80
Jne k4
add yy, 6
k4: cmp al, 73
jne k5
add zof,12
k5: cmp al, 81
jne k6
sub zof,12
k6: cmp al, 1
je exit
ret
;=================
drawing:push cx
mov bp,2400h
mov cx,pcnt
mov si,400h ;读取静态库
stext:lodsw
mov Yp,ax
lodsw ;si+=4
mov Xp,ax
mov ax,-20 ;<------!
mov Zp,ax
xor di,di
call sincos
call resincos
call resincos
mov di,[bp]
xor ax,ax
stosb
mov bx,zp
add bx,Zof
mov ax,256
imul xp
idiv bx
add ax,XX ;get Screen X
cmp ax,1
jl e
cmp ax,318
jg e
mov di, ax
mov ax,256
imul yp
idiv bx
add ax,YY ;get Screen Y
cmp ax,1
jl e
cmp ax,200
jg e
imul ax,140h
add di, ax
mov [bp],di
mov al,52h
stosb
e: add bp, 2
loop stext
pop cx
ret
;=================
sincos:
fldpi
fidiv rrr
fimul word ptr [xrot+di]
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 di, 2
mov ax, zp
xchg ax,xp
xchg ax,yp
xchg ax,zp
call sincos
ret
;===========================
msg db 'HelloWord$' ;要显示其它字符直接改这里,但长度不要超过10个字符
rrr dw 180d
Zof dw 300
YY dw 100
XX dw 160
Xrot dw ?
Yrot dw ?
Zrot dw ?
pcnt dw ?
Yp dw ?
Xp dw ?
Zp dw ?
xt dw ?
yt dw ?
zt dw ?
tan dd ?
code ends
end START
类别:3d特效 网友评论:4
breakan 2009-05-24 09:24 | 回复 一定要用tasm编译吗?
blueglass2 2010-01-13 23:18 | 回复 嗯
Real_Launcelot 2010-04-08 23:09 | 回复
回复blueglass2:我觉得其他汇编也可以吧...只是语法稍有不同,能完成的功
能不会少的。你真厉害,一个盒子竟然能让你做出这么多东西。。。
Real_Launcelot 2010-04-08 23:09 | 回复 回复blueglass2:你有计算机图形
学基础吧?
©2010 Baidu
作者: dididu1515 发布时间: 2010-04-18
START:
后添上
push cs
pop ds
将 int 20h 改成
mov ah,4ch
int 21h
编译方法:
masm hello.asm
link /tiny hello.obj
作者: dididu1515 发布时间: 2010-04-18
;80x86汇编屏保程序_翻卷式旋转_Hello_world!
;
code Segment
.386P
org 100h
assume cs:code,ds:code,es:code
start:
push cs
pop ds
push ds
pop es
call csh
mov ax,13h
int 10h
mov ax,1300h
mov bx,000eh ;BH=页码 BL=属性(若AL=00H或01H)
mov cx,cnt ;0014h ;CX=显示字符串长度
mov dx,100h ;010ah ;DH,DL=起始行,列
mov bp,offset hello ;ES:BP=显示字符串的地址
int 10h
call read
call clear
kll:
mov bp,1000h
hhh:call write
mov ah,1
int 16h
jz ppp
mov ah,0
int 16h
cmp al,1bh
jz exit
ppp:call delay
call delay
add bp,2
cmp bp,1000h+360*2
jbe hhh
jmp kll
exit:
mov ax,3
int 10h
mov ah,4ch
int 21h
csh:
cld
MOV DI,1000H
MOV CX,360
@csh:
INC ROT
FLDPI
FIDIV RRR
FIMUL ROT
FSINCOS
FIMUL RX
FISTP XX
FIMUL RY
FISTP YY
ADD XX, 160 ;120
ADD YY, 90 ;100
MOV AX, YY
imul ax,320
add ax,XX
stosw
LOOP @csh
ret
;===========
color DB 2
RRR DW 180
YY DW 100
XX DW 160
RX DW 110 ;120
RY DW 60 ;90
ROT DW ?
;------------
Delay:
push dx
push ax
t_a: mov dx,3dah
in al, dx
test al, 8
Jnz t_a
t_b: in al, dx
test al, 8
Jz t_b
pop ax
pop dx
ret
clear:
mov ax,0a000h
mov es,ax
xor di,di
mov ax,di
mov cx,320*200
rep stosb
ret
;----------------
read:
mov ax,0a000h
mov ds,ax
push cs
pop es
cld
mov di,2000h
xor si,si
mov bx,14*8 ;字符串长度
nt1: push si
mov cx,20 ;字符高度
nt2:
lodsb
stosb
add si,320-1
loop nt2
pop si
inc si
dec bx
jnz nt1
ret
;
;----------------
write:
push cs
pop ds
mov ax, 0a000h
mov es, ax
mov bx,bp
mov dx,14*8 ;字符串长度
mov si,2000h
wr1: push bx
mov di,[bx]
mov cx,20 ;字符高度
wr2: lodsb
stosb
add di,320-1
loop wr2
pop bx
add bx,2
cmp bx,1000h+359*2
jbe rrp
mov bx,1000h
rrp:
dec dx
jnz wr1
ret
;--------------
hello db ' Hello World! '
cnt equ $- hello
code ends
end start
作者: dididu1515 发布时间: 2010-04-20
作者: wslmsx 发布时间: 2010-04-20
作者: DrsExplorer 发布时间: 2011-10-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28