汇编样例程序_第1页
汇编样例程序_第2页
汇编样例程序_第3页
汇编样例程序_第4页
汇编样例程序_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、stack segmentdb 512 dup(?)stack endsdata segmentinfol db 0dh,0ah,'input 1,2,3:(1:bird,2:che,3:exit) $'data endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov ah,0;设置显示方式为320*200彩色图形方式mov al,04hint 10h;设置显示方式mov ah,0bh;设置背景色mov bh,0;非0为没有背景色mov bl,1;背景为蓝色int 10hlea

2、dx,infolmov ah,9int 21hmov ah,0int 16h;键盘中断cmp al,31hjnz bcall xiaob:cmp al,32hjnz finishcall chexiao proc near;小鸟主程序mov cx,0b0h;小鸟初始位置mov dx,64h;1-动画实现核心部分draw1: call clear call bird;调用小鸟子程序;- ;2-方向控制模块again1: mov ah,0;接收键盘输入int 16hcmp al,1bh;比较键盘事件jz start;是否为Esc退出mov al,ahcmp al,48h;是否为向上jnz draw

3、_d1dec dxjmp draw1draw_d1:cmp al,50h; 向下?jnz draw_l1inc dxjmp draw1draw_l1:cmp al,4bh;向左?jnz draw_r1dec cxjmp draw1draw_r1:cmp al,4dh ; 向右jnz again1inc cxjmp draw1;-xiao endpche proc near;小车主程序mov cx,0b0h;小车初始位置mov dx,64hdraw2: call clear call car;调用小车子程序again2: mov ah,0;接收键盘输入int 16hcmp al,1bh;比较键盘

4、事件jz start;是否为Esc退出mov al,ahcmp al,48h;是否为向上jnz draw_d2dec dxjmp draw2draw_d2:cmp al,50h; 向下?jnz draw_l2inc dxjmp draw2draw_l2:cmp al,4bh;向左?jnz draw_r2dec cxjmp draw2draw_r2:cmp al,4dh ; 向右jnz again2inc cxjmp draw2che endpfinish: mov ah,4chint 21hclear proc near;清屏子程序push axpush bxpush cxpush dxmov

5、 ah,6;调用6号功能mov al,0;设置整个屏幕为空白mov cx,0mov dh,24;窗口右下角(24行,79列)mov dl,79int 10hpop dxpop cxpop bxpop axretclear endpbird proc near;小鸟绘图子程序push ax push bxpush cxpush dxmov ah,0ch;小鸟初始位置开始写像素。mov al,02hint 10h; 以下像素组成小鸟图案 dx,行;cx,列dec dxinc cxint 10hdec dxinc cxint 10h;左侧2点/inc dxinc cxint 10hinc dxinc

6、 cxint 10hinc dxinc cxint 10hinc dxinc cxint 10h;4左侧4点dec dxinc cxint 10hdec dxinc cxint 10hdec dxinc cxint 10hdec dxinc cxint 10h;右侧4点/inc dxinc cxint 10hinc dxinc cxint 10h;右侧2点add dx,3sub cx,9int 10h;下1点.inc cxint 10hinc cxint 10hinc cxint 10hinc cxint 10hinc cxint 10hinc cxint 10h;横6点_pop dxpop

7、cxpop bxpop axretbird endp;3-小车绘图子程序car proc nearpush ax push bxpush cxpush dxmov ah,0ch;小车初始位置开始写像素。mov al,02hint 10h;che kuangmov bx,5heng1:inc cxint 10hdec bxjnz heng1mov bx,2shu1:inc dxint 10hdec bxjnz shu1mov bx,7heng2:inc cxint 10hdec bxjnz heng2mov bx,4shu2:inc dxint 10hdec bxjnz shu2mov bx,1

8、2heng3:dec cxint 10hdec bxjnz heng3mov bx,6shu3:dec dxint 10hdec bxjnz shu3;che lun1add dx,7add cx,2int 10hinc cxint 10hinc cxint 10hdec dxdec cxint 10hadd dx,2int 10h;che lun2dec dxadd cx,6int 10hinc cxint 10hinc cxint 10hdec dxdec cxint 10hadd dx,2int 10hpop dxpop cxpop bxpop axretcar endp;-code e

9、ndsend start注释如下:1.draw1: call clear call bird;调用小鸟子程序 这两句与下文与之对应的小车程序 部分为此程序动画实现的核心。动画的实现是先调用一次清屏,清除到屏幕当前帖,并调用一次重新绘图(call bird,call car),显示图形下一帖,以达到动画的效果。2.这部分是控制物体运动方向的,按方向键的上、下、左、右可控制物体相应的移动。如:cmp al,48h;是否为向上jnz draw_d1dec dxjmp draw1若按的方向键上键,行位置dx减少1,即在初始位置dx,64h; cx,0a0h的基数上,dx减1即为63h.在新的基数上,执

10、行draw ,即清屏,重新绘图。3.绘图子程序,图形都是由像素构成的,确定像素显示的位置,再调用一次BIOS输出。如下:mov bx,5 heng1:inc cx ;像素初始行位置dx,列位置cx确定的前提下,增加或减少dx,cx的值,可显示另一个像素,一个像素的组合,即形成图形。int 10h ;调用bios中断输出这个像素。dec bxjnz heng1第一句mov bx,5是用循环控制输出的次数。即在同一行上输出5个像素,构成一行。BIOS 呼叫 INT 10H,AH=00H設定螢幕影相模式(AL) <= 模式碼 (正常為 03h)模式碼: 解析度 顏色數目 頁數 位址文 00H:

11、 40*25 16 色 8 頁 B8000HB87CFH字 01H: 80*25 16 色 8 頁 B8000HB87CFH模 02H: 80*25 16 色 8 頁 B8000HB8F9FH式 03H: 80*25 16 色 8 頁 B8000HB8F9FH07H: 80*25 2 色 8 頁 B8000HB8F9FH繪 04H: 320*200 4 色 1 頁 B8000HBBF3FH圖 05H: 320*200 4 色 1 頁 B8000HBBF3FH模 06H: 640*200 2 色 1 頁 B8000HBBF3FH式 0DH: 320*200 16 色 8 頁 A0000HA1F3

12、FH0EH: 640*200 16 色 4 頁 A0000HA3E7FH0FH: 640*350 2 色 2 頁 A0000HA6D5FH10H: 640*350 16 色 2 頁 A0000HA6D5FH11H: 640*480 2 色 1 頁 A0000HA95FFH12H: 640*480 16 色 1 頁 A0000HA95FFH13H: 320*200 256 色 1 頁 A0000HAF9FFHBIOS 呼叫 INT 10H,AH=01H設定游標形狀 (CH) <= 游標的啟始線 (015) <- 啟始線(CL) <= 游標的終止線 (015) 註:正常: CH=

13、0DH,CL=0EH <- 終止線消失: CH=0FFH,CL=0FFH BIOS 呼叫 INT 10H,AH=02H設定游標位置(DH) <= 游標的 列 數 (024)(DL) <= 游標的 行 數 (079)(BH) <= 頁碼BIOS 呼叫 INT 10H,AH=03H取得游標位置(BH) <= 頁碼 游標的 列 數 => (DH) <- 啟始線游標的 行 數 => (DL) 游標的啟始線 => (CH) <- 終止線游標的終止線 => (CL) 註:正常: CH=0DH,CL=0EH消失: CH=0FFH,CL=0FF

14、HBIOS 呼叫 INT 10H,AH=05H畫面頁區的號擇(AL) <= 頁碼INT 10h,AH=06H把指定的視窗範圍上捲(AL) <= 捲動的列數,若為 0 則清除螢幕(BH) <= 捲動後空出位置放入的屬性(CH) <= 捲動範圍的左上座標 列(CL) <= 捲動範圍的左上座標 行(DH) <= 捲動範圍的右下座標 列(DL) <= 捲動範圍的右下座標 行顏色屬性: bh =b7 b6 b5 b4 b3 b2 b1 b0bit02 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit3 :字體亮度 (0:字體正

15、常,1:字體高亮度)bit46 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit7 :字體閃爍 (0:不閃爍,1:字體閃爍)INT 10h,AH=07H把指定的視窗範圍下捲(AL) <= 捲動的列數,若為 0 則清除螢幕(BH) <= 捲動後空出位置放入的屬性(CH) <= 捲動範圍的左上座標 列(CL) <= 捲動範圍的左上座標 行(DH) <= 捲動範圍的右下座標 列(DL) <= 捲動範圍的右下座標 行顏色屬性: bh =b7b6b5b4b3b2b1b0bit02 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅

16、,5:紫,6:綜,7:白)bit3 :字體亮度 (0:字體正常,1:字體高亮度)bit46 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit7 :字體閃爍 (0:不閃爍,1:字BIOS 呼叫 INT 10H,AH=08H讀取游標所在位置的字元及屬性(BH) <= 頁碼字元 ascii => (AL)字元的屬性 => (AH)顏色屬性: ah =b7b6b5b4b3b2b1b0bit02 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit3 :字體亮度 (0:字體正常,1:字體高亮度)bit46 :背景顏色

17、(0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit7 :字體閃爍 (0:不閃爍,1:字體閃爍)BIOS 呼叫 INT 10H,AH=09H寫入字元及屬性在游標所在位置,游標不動 (繪圖模式亦能使用)(AL) <= 欲寫入的字元 ascii(BL) <= 欲寫入之字元的屬性(CX word) <= 欲顯示的次數(BH) <= 頁碼顏色屬性: bl =b7b6b5b4b3b2b1b0bit02 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit3 :字體亮度 (0:字體正常,1:字體高亮度)bit46 :背景顏色 (0

18、:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit7 :字體閃爍 (0:不閃爍,1:字體閃爍)BIOS 呼叫 INT 10H,AH=0AH寫入字元在游標所在位置,游標不動,屬性不變 (繪圖模式亦能使用)(AL) <= 欲寫入的字元 ascii(CX word) <= 欲顯示的次數(BH) <= 頁碼(BL) <= 前景顏色 (繪圖模式時)BIOS 呼叫 INT 10H,AH=0BH設定文字模式(03)的邊框顏色 或 繪圖模式(4、5)的背景顏色(BL) <= 顏色屬性(1)文字模式(03):邊框顏色,只用到 低4bit,共16色(2)繪圖模式(4

19、、5、6):背景顏色,只用到 低4bit,共16色bit02 :顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)bit3 :為亮度 (1:高亮度,0:正常)BIOS 呼叫 INT 10H,AH=0BH設定繪圖模式(4、5)的調色盤(BL) <= 調色盤 (以 0 bit 決定)bit0 = 0 (黑、綠、紅、黃)= 1 (黑、青、紫、白)BIOS 呼叫 INT 10H,AH=0CH在繪圖模式下畫一點(AL) <= 像點的顏色值(CX word) <= 座標 X 軸(DX word) <= 座標 Y 軸(BH) <= 頁碼BIOS 呼叫 IN

20、T 10H,AH=0DH在繪圖模式下讀點像值(CX word) <= 座標 X 軸(DX word) <= 座標 Y 軸像點的顏色值 => (AL)BIOS 呼叫 INT 10H,AH=0EH在文字模式 或 繪圖模式下顯示一字元,游標則右移一格(AL) <= 字元 ascii(BH) <= 頁碼(BL) <= 前景顏色碼 (繪圖模式時)註:所謂 TTY 就是類似打字機輸出方式,每顯示一字元,游標則右移一格,當移到最後一行時,游標則至跳下一列的最左邊開始,當移到最後一列時,螢幕則上捲一列BIOS 呼叫 INT 10H,AH=0FH取得螢幕影相模式每行字數 =&

21、gt; (AH)模式號碼 => (AL)使用頁碼 => (BH)模式碼: 解析度 顏色數目 頁數 位址文 00H: 40*25 16 色 8 頁 B8000HB87CFH字 01H: 80*25 16 色 8 頁 B8000HB87CFH模 02H: 80*25 16 色 8 頁 B8000HB8F9FH式 03H: 80*25 16 色 8 頁 B8000HB8F9FH07H: 80*25 2 色 8 頁 B8000HB8F9FH解析度 顏色數目 頁數 位址繪 04H: 320*200 4 色 1 頁 B8000HBBF3FH圖 05H: 320*200 4 色 1 頁 B800

22、0HBBF3FH模 06H: 640*200 2 色 1頁 B8000HBBF3FH式 0DH: 320*200 16 色 8 頁 A0000HA1F3FH0EH: 640*200 16 色 4 頁 A0000HA3E7FH0FH: 640*350 2 色 2 頁 A0000HA6D5FH10H: 640*350 16 色 2 頁 A0000HA6D5FH11H: 640*480 2 色 1 頁 A0000HA95FFH12H: 640*480 16 色 1 頁 A0000HA95FFH13H: 320*200 256 色 1 頁 A0000HAF9FFHBIOS 呼叫 INT 10H,AX=

23、1130H讀取 VGA BIOS 中有關字形的資訊(BH) <= 所要取的位址模式取出的位址 => (ES:BP)目前字形的高度 => (CX)目前字形下螢幕列數-1 => (DL)位址模式:00H:中斷 1FH 的位址01H:中斷 43H 的位址02H:8*14 字形表的位址03H:8*8 字形表的位址04H:8*8 ascii 值大於 127 的字形表位址05H:9*14 字形表的位址06H:8*16 字形表的位址07H:9*16 字形表的位址註:中斷向量 1fh 的值亦是指向 ascii 值大於 127 的字形表位址中斷向量 43h 的值則是指向目前螢幕模式所使用的字形表位址BIOS 呼叫 INT 10H,AH=13H顯示一列字串(AL) <= 寫入模式(BL) <= 字元之屬性(CX word) <= 字串的長度(DH) <= 游標的座標 列 數(DL) <= 游標的座標 行 數(ES:BP) <= 存字串內容的記憶體變數(BH) <=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论