王爽 <<汇编语言>> 课程设计1

 忽然发现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


运行结果

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值