无系统 nasm汇编贪吃蛇demo草稿
来源:互联网 发布:生有涯而知无涯意思 编辑:程序博客网 时间:2024/05/16 15:57
开发系统centos 6.5 64位,利用系统时钟中断和键盘中断
源码文件snake.s
org 7c00hglobal startstart: jmp entry# db 0x00# db "helloOSX"# dw 512# db 1# dw 1# db 2# dw 224# dw 2880# db 0xf0# dw 9# dw 18# dw 2# dd 0# dd 2880# db 0,0,0x29# dd 0xffffffff# db "myosudisk "# db "fat12 "# times 18 db 0keyboard_interrupt: in al,0x60 and al,0x80mov ah,alcmp ah,byte [forbiden]jz keyboard_interrupt_exit cmp ah,0x50jz gotkeycmp ah,0x4bjz gotkeycmp ah,0x4djz gotkeycmp ah,0x48jnz keyboard_interrupt_exitgotkey:mov byte[dir],ahkeyboard_interrupt_exit:iret handler:nopmov al,byte [counter]inc almov byte [counter],alcmp al,10jnz handler_exitmov al,0mov byte [counter],alpremove:mov bx,word [snake]mov ah,byte [dir]cmp ah,0x48jz upcmp ah,0x50jz downcmp ah,0x4bjz leftcmp ah,0x4djz rightjmp move up:mov byte [forbiden],0x50dec bhjmp movedown:mov byte [forbiden],0x48incbhjmp moveleft:mov byte [forbiden],0x4ddec bljmp moveright:mov byte [forbiden],0x4binc blmove:call deadcheckmov di,snakeadd di,word [snakelen]add di,word [snakelen]sub di,2moveloop:sub di,2mov ax,word [es:di]add di,2mov word [es:di],axsub di,2cmp di,snakejnz moveloopmov word [snake],bxcall clearcall putsnakehandler_exit:mov al,20hout 20h,aliretsetuptimer:mov ax,0 ;在8*4内存地址处注册中断处理程序的入口地址mov ds,axmov bx,32mov word [bx],handler-$$mov word [bx+2],07c0hint 8h;mov bx,36;mov word [bx],keyboard_interrupt-$$;mov word [bx+2],keyboard_interrupt-$$;int 8hstiretentry:nopmov ax,csmov es,ax; set video modemov ah,0mov al,3int 10hcall clearcall gamestartcall getcharcall clearcall putsnakecall setuptimerloop:jmp $putchar:push bpmov bp,sppush axpush bxpush cxpush dxmov AH,02hmov BH,0hmov dx,[bp+4]int 10hmov AH,09hmov AL,03hmov BH,0;mov BL,77hmov bx,13mov bh,0mov CX,1int 10hpop dxpop cxpop bxpop axmov sp,bppop bpretputsnake:push axpush cxpush dimov cx,word [snakelen]mov di,snakeputloop:mov ax,[es:di]push axcall putcharadd sp,2add di,2dec cxjnz putlooppop dipop cxpop axretgetchar: mov ah, 1 int 16h jz getchar_clear_read ; ///< 键盘缓冲区都空了, 可以转"读键盘输入" mov ah, 0 int 16h jmp getchar ; ///< 继续清键盘缓冲区 getchar_clear_read: mov ah, 1 int 16h jz getchar_clear_read ; ///< 如果没有键盘输入,继续死等键盘输入 mov ah, 0 ; ///< al是键盘输入 int 16h ret clear:push axpush bxpush cxpush dxmov bh,7mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79int 10hpop dxpop cxpop bxpop axretgamestart:mov si,bpmov bp,startstr;es:bp 指向的内容就是我们要显示的字符串地址了mov cx,word [startlen];显示的字符串长度mov dh,12;显示的行号mov dl,36;显示的列号mov bh,0;显示的页数mov al,1;显示的是串结构mov bl,0ch;显示的字符属性mov ah,13h;明确调用13h子程序int 10hmov bp,siretgameover:mov bp,endstr;es:bp 指向的内容就是我们要显示的字符串地址了mov cx,word [endlen];显示的字符串长度mov dh,12;显示的行号mov dl,36;显示的列号mov bh,0;显示的页数mov al,1;显示的是串结构mov bl,0ch;显示的字符属性mov ah,13h;明确调用13h子程序int 10hjmp $deadcheck:cmp bl,79JG gameovercmp bh,24jg gameovercmp bl,0jz gameovercmp bh,0jz gameoverretcounter: db 0dir:db 0x4dforbiden: db 0x4bstartstr: db "press s to start"startlen: dw $-startstrendstr: db"Game Over!"endlen dw$-endstrsnake: dw 0509h,0508h,0507h,0506h,0505hsnakelen: dw 5 times 510-($-$$) db 0dw 0xaa55
all:nasm -o snake.o snake.sdd if=./snake.o of=snake.img bs=512 count=1dd if=/dev/zero of=snake.img seek=1 count=2879sz snake.imglinux:nasm -f elf64 -g -F stabs -o snake.o snake.s -l snake.lld -o snake snake.oclean:rm -f *.o *.img
0 0
- 无系统 nasm汇编贪吃蛇demo草稿
- 贪吃蛇汇编代码
- 贪吃蛇汇编
- NASM Demo
- 贪吃蛇 demo
- 贪吃蛇小demo
- 8086汇编 贪吃蛇 源代码
- 贪吃蛇(纯汇编版)
- 8086汇编 贪吃蛇 源代码
- C# 学习--贪吃蛇demo
- 贪吃蛇小游戏(Linux Demo)
- NASM汇编笔记
- NASM 汇编笔记
- nasm反汇编
- NASM汇编指令复习
- NASM汇编指令复习
- nasm汇编之 BITS
- NASM汇编笔记
- android 开源网站
- ReactiveCocoa 基本用法
- 实模式与保护模式
- grunt应用
- 关于Arduino问题查找的自我总结
- 无系统 nasm汇编贪吃蛇demo草稿
- 从java到web前端再到php,一路走来的小总结
- AC自动机
- mvp初探
- 开博客,记录一下自己的学习过程
- Android用属性动画拖动view到任意位置
- android studio配置ndk开发环境
- 加密算法
- mysql语句大全