忽然发现CSDN博客改版了。文章首页显得清新了些,文章管理也比以前看起来只管了。不错。
先说说今天的1件大事吧,媳妇来这里面试了。本来以为游戏策划这个职位,笔试完了一轮面试就算哦了,
结果今天的消息是面试过了,还要有一个手绘的关卡设计。。。虽然我觉得这个东西比较有挑战性,但是我相信
通过媳妇的努力,肯定能够设计出一个让面试官满意的关卡的。
不知道面试官玩没玩过《时空幻境》,那个游戏真的超赞啊!没玩过那个游戏的话,照着《时空幻境》设计关卡,
估计问题就不大。
我的感觉横板过关这种东西,总是脱离不了超级玛丽的模式,自己真是想象力很匮乏啊~
最近上班的工作,是继续改AOW的界面。虽然用的是udk脚本,没啥通用性,但是里面还是有一些东西是和其他语言通用的。
比如最近想用一个关于delegate的东西,得看看怎么搞。
好像C#里就有这么个东东,用于处理1件事情之后的下一件事情的安排。C语言里面也有个叫函数指针的东西,也是处理
类似的东西的。
突然发现自己现在的状态就是传说中的“逻辑程序员”,相比负责网络SOCKET方面和引擎渲染方面还有游戏性能方面的
程序员来说,逻辑程序员的工作应该算是最底层的了吧。
尽量把自己的平凡的事情做好,这样才能赢得别人的信任,才能接触到更多,学到更多吧。
最近因为犯懒,业余时间也比较紧张,再加上自己惰性所致,在《汇编语言》那本书第10章的课程设计那里停留了
两周多的时间,一直没啥进展。昨天下午,媳妇在边上准备面试,我也终于得以踏实下来认真看看那个课程设计怎么搞。
从下午2点半,到5点多,晚上到家10点半,到12点,终于搞定了这个课程设计。
从这个课程设计里,学到了不少东西,把之前点的知识都巩固了一遍,从实践里了解了更多。
主要是理解了相对复杂的寻址方式的灵活运用,
还有每个子程序都有自己的堆栈这个概念,
还有在出现jmp out of range这种问题的时候如何处理。
过了这个坎,这本书终于可以往下继续看了,哈~
恩,流水账就记录这么多吧。希望小静静能够尽快地把她的关卡策划案搞定!
附一个王爽《汇编语言》第10章课程设计1的源代码,算是一个纪念吧。
assume cs:code
data segment
; YEAR 4*21 = 84
db '1975','1976','1977','1978','1979','1980','1980','1981','1982'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
; INCOME (54H,4*21 = 84)
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
; COUNT OF EMPLOYEE 这里定义为dw时,寻址会出现问题
dd 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dd 11542,14430,15257,17800
data ends
buffer segment
db 32 dup(0)
buffer ends
stack segment
dw 32 dup(0)
stack ends
code segment
start: mov ax,data ; init ds,ss
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32
; bx--num of group si--point to Year,Income,Employee di--display position
mov bx,0
mov si,0
mov di,0
mov cx,21
lp: push cx
;--------------------------------------------------------
; show Year
mov cx,4
mov si,bx
call show_str
;--------------------------------------------------------
;--------------------------------------------------------
; show Income
mov si,bx
add si,84 ; pointer to income
call dtoc
push ax ; pointer to data src
push ds
push si
push di
mov ax,buffer
mov ds,ax
mov si,0
add di,40
call show_str
pop di
pop si
pop ds
pop ax
;--------------------------------------------------------
;--------------------------------------------------------
; show Employee
mov si,bx
add si,84
add si,84 ; pointer to employee 当employee定义为dd时,才能如此寻址,dw时,寻址不正确
call dtoc2
push ax ; pointer to data src
push dx
push si
push di
mov ax,buffer
mov ds,ax
mov si,0
add di,80
call show_str
pop di
pop si
pop ds
pop ax
jmp mcon
;--------------------------------------------------------
help: jmp lp
;--------------------------------------------------------
; show Ave
mcon: mov ax,data
mov ds,ax
mov si,bx ; init num1
add si,84
mov ax,ds:[si]
add si,2
mov dx,ds:[si]
mov si,bx ; init num2
add si,84
add si,84 ; 当employee定义为dd时,才能如此寻址,dw时,寻址不正确
mov cx,ds:[si]
call divdw
push ds ; save div result
push si
push di
push cx
push ax
mov ax,buffer
mov ds,ax
mov si,0
pop ax
mov ds:[si],ax
add si,2
;inc si ?
mov ds:[si],dx
mov si,0
call dtoc
add di,120 ; display result
call show_str
pop cx
pop di
pop si
pop ds
;--------------------------------------------------------
add di,160
;inc bx
add bx,4
pop cx
loop help
finish: mov ax,4c00H
int 21H
;-----------------------------------------------------------------------------
;- dtoc2 -
;- params ds,si--src num (num1 16 bit) -
;- return Buffer Segment save num cx--num Length -
;-----------------------------------------------------------------------------
dtoc2: push ds
push si
push ax
push bx
dc2: mov bx,0 ; save length
mov ax,ds:[si] ; init num1
mov dx,0
dccon2: mov cx,10 ; init num2
call divdw
add cx,30H
push cx ; save extra
inc bx
push ax
or ax,dx
mov cx,ax
pop ax
jcxz dcok2
jmp dccon2
dcok2: mov cx,bx
mov ax,buffer
mov ds,ax
mov si,0
dcsav2: pop ds:[si]
inc si
loop dcsav2
mov cx,bx ; result cx--length
pop bx
pop ax
pop si
pop ds
ret
;-----------------------------------------------------------------------------
;- dtoc -
;- params ds,si--src num (num1 32 bit) -
;- return Buffer Segment save num cx--num Length -
;-----------------------------------------------------------------------------
dtoc: push ds
push si
push ax
push bx
dc: mov bx,0 ; save length
mov ax,ds:[si] ; init num1
add si,2
mov dx,ds:[si]
dccon: mov cx,10 ; init num2
call divdw
add cx,30H
push cx ; save extra
inc bx
push ax
or ax,dx
mov cx,ax
pop ax
jcxz dcok
jmp dccon
dcok: mov cx,bx
mov ax,buffer
mov ds,ax
mov si,0
dcsav: pop ds:[si]
inc si
loop dcsav
mov cx,bx ; result cx--length
pop bx
pop ax
pop si
pop ds
ret
;-----------------------------------------------------------------------------
;- show_str -
;- params cx--length of str ds,si--src di--destination pos -
;-----------------------------------------------------------------------------
show_str: push es
push ax
push si
push di
push bx
push cx
mov ax,0b800H ; destination pos
mov es,ax
mov bl,2 ; color
sstr: mov al,ds:[si]
mov es:[di],al
inc di
mov es:[di],bl
inc di
inc si
loop sstr
pop cx
pop bx
pop di
pop si
pop ax
pop es
ret
;-----------------------------------------------------------------------------
;- divdw -
;- params num1--dx,ax num2--cx -
;- result result--dx,ax extra--cx -
;-----------------------------------------------------------------------------
divdw: push bx
ddw: push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
jmp ddw_ok
ddw_ok: pop bx
ret
code ends
end start
运行结果