当前位置:文档之家› 汇编语言动画程序的设计报告

汇编语言动画程序的设计报告

汇编语言动画程序的设计报告
汇编语言动画程序的设计报告

一、游戏背景介绍

随着信息时代的发展,计算机已经变为我们生活中不可缺少的一部分,它作为我们了解世界的一个窗口的同时还可以让我们从中以最快的速度查找学习资源,休闲之余,更多的人选择玩小型的益智游戏来放松,因为它不仅达到了娱乐的目的,而且对自己的思维有一定的帮助作用,根据大多数人的娱乐放松需求,我做出了一款动画游戏——可控的汽车与机器人。

上了一学期的汇编语言课,让我对汇编语言有了一定的认识。这次课程作业我决定亲自动手用汇编语言编写一个型小程序,熟悉计算机体系结构,加深对汇编语言的了解。DOS操作系统的功能调用及BIOS的功能调用。进一步了解汇编语言控制计算机硬件的方法,以及如何用汇编语言来实现算法,提高应用汇编语言编程的能力,也加深了自己对一些算法的理解,提高了自己的编程能力。

利用汇编语言编写程序,在屏幕上显示动画,还可以通过键盘上的输入来改变图片的位置,实现动画的运动。动画游戏程序设计的开始屏幕上会出现一辆小车和一个机器人,操作者可自由选择至少两个运动物体(机器人和汽车)在屏幕上运动,一开始汽车与人分别从左向右、从右向左运动,操作者可以通过屏幕上方现实的提示对机器人和小车进行控制。可以通过键盘上的W、A、S、D和上下左右的方向键来分别控制运动机器人和小车通过W,A,S,D 控制方向,同时整个程序包括人机界面控制台和运动中动画的暂停(空格键控制),开始(ENTER键控制),退出键则由ESC键控制,运动加减速动作(“+”控制逐级加速、“—”控制逐级减速)。

程序插图如图1:

图1动画界面示意图

屏幕上方是操作提示,用户可与根据提示对汽车和小人进行操控,来改变他俩的运动轨迹。起先车和小人都是各自运动的一个向左另一个向右,操作者可以通过键盘来改变这两物体的运动轨迹,同时在按键盘上的加号会看见物体的运动速率明显加快,减号则反之。

二、核心算法思想

本程序定义了两个图分别表示(汽车和机器人),八个坐标变量(汽车清图坐标car_row0 car_col0 汽车画图坐标car_row1 car_col1机器人清图坐标man_row0 man_col0机器人画图坐标man_row1 man_col1),用于控制汽车和机器人清图和画图的坐标。首先在屏幕上显示两个物体,让他们按照从左到右和从右到左方式分别运动。他们的运动是通过不断的修改图片的坐标,并清屏,然后根据新的坐标重新绘制画面来实现的。通过一大个循环对上面个两个坐标进行改变,每次横坐标加上一个固定的值,或减去一个固定的值。再通过清图然后重绘实现物体的移动。为人实现物体能根据操作者的要求上下左右运动,程序实现设定好了几个可以上下左右操控图片位置的键。每当操作者按下这几个键,系统自动的,将图片位置的横纵坐标进行加上或减去某个固定的值,加的多少还取决于操作者按键次数得多少。确定图片的位置是通过检测用户的输入和外层大循环不断自加某个数,综合来改变下次重绘的坐标来实现的。

总之要想物体动起来就是通过不断地清屏来清除上次图片的位置,然后获取图片坐标,这个坐标是不断地被用户和系统修改的,并重回新的图片画面,于是用户可以看见物体在屏幕上不断的移动。以下是让运动起来运动的逻辑图:

图2动画运动算法示意图

首先是清理屏幕上的物体将屏幕刷成黑色,然后获得机器人和小车新的位置坐标,根

据这根位置坐标绘制出小车的位置。从而实现小车的运动。同时通过操控设定好的上下左右键可以修改坐标,形同会自动根据你按键的次数以及方向键物体的横纵坐标加上或减去一个先前设定好的固定值。从而实现了,操作者对物体运动东方向的控制。

三、核心算法流程图

主程序:

程序开始,设置显示方式为80X25 16色图形方式和提示信息如下:

(SPACE--PAUSE,ENTER--BEGAIN,ESC--EXIT,SPEEDUP-+,SLOWDOWN- -)

(CAR:UP--W,DOWN--S,LEFT--A,RIGHT--D MAN:UP--8,DOWN--2,LEFT--4,RIGHT--6)

调用car_disp和man_disp子程序设置开始图形,起始坐标在数据定义时已给出,然后调用绘图子程序控制汽车和机器人的运动,空格暂停,回车开始,ESC退出,实现动画的主程序算法图如图3。

程序运行后除了绘制移动的人和车外,还要看是否有暂停,开始,和退出的操作。根据

输入对程序运行进行调整。

MOVE子程序:

MOVE子程序是整个程序的核心,通过键盘操作控制汽车和机器人的运动,首先检测键盘,若无键盘操作,运行主程序。控制物体移动算法图如图4:

图4操控物体算法示意图

加号和减号分别控制加速和减速,原本主程序会每隔一段时间自动把汽车横坐标加一,人的横坐标减一重复操作,若有键盘响应,则实现自动运动,则通过比较键盘扫描码来确定

执行何种操作,“+”按一次速度加快一级,“—”按一次速度减慢一级,WASD控制汽车的上左下右移动,方向键和8、6、2、4都能控制机器人的运动方向,

DISP绘图程序:

DISP输出图形子程序该程序的主要功能是根据定义的图形表画出图形,过程如下:

图5根据自定义图形绘图算法示意图

首先获得存放自定义图形字符串数组,进行初始化,再根据坐标获得物体的酒气体坐标然后绘制物体。

汽车和机器人画图子程序:

当汽车和小人运动到边界时就会消失,于是我另外写了两个子程序让运动到边界的物体自此回到界面,这里我让从左边出去的物体从右边出现,从右边出去的的物体从左边出现,这样就像地球是圆的一样,当让当你控制物体从上方或者下方出去时,也会出现在相反反向。car_disp,man_disp子程序分别用于用于处理汽车和小人运动到屏幕边界的情况,显示图形以及设置坐标。以汽车为例:si指向汽车图形表的第一个字符,当行数(car_row1)大于20,跳到第4行,行数(car_row1)小于4,跳到第20行列数(car_col1)小于3,跳

到第70列,列数car_col1)大于70,跳到第3列,实现边界设置,再将row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标,然后把car_row1赋给dh,car_col1赋给dl,然后在调用DISP画出汽车图形,这样汽车就会从另一个方向冒出来。总之,这里也是通过修改物体的左边来实现这样的效果的。

清图子程序:

这部分程序主要负责清理上一次绘图留下来的画面为下一步的重绘做准备,实现物体的移动效果,否则会出现物体在上次基础上重绘,变成物体推着尾巴。影响动画效果。

这部分的代码样式为:

car_clear proc near ;汽车清图子程序

clear_car car_row0,car_col0 ;调用汽车清图宏

ret ;返回

car_clear endp

该程序的主要功能就是调用宏来清图。因为子程序不能传递参数,所以选择用宏定义来实现参数(坐标)的传递,但是宏展开使得代码很长,而且该子程序调用频繁,以致超过条件转移的范围,系统报错,用子程序就可以解决。

延时子程序DLY:

主要功能使控制延时,通过这个子程序就那个能够控制物体运动的速度。延时的时间越长,物体运动的速度就越慢,相反延时时间越短,就相当于物体运动的频率加快这样物体运动就加快了。我采用的是控制延时时间的的长短,从而实现加速和减速。通过宏定义来实现参数(dlay1)的传递,用“+”“—”来改变dlay1的值,控制延时,因为我给时间设定了几个值于是当用户按加号是就不断自加加到最大之时再自加就变成最小值,减号则反之,所以会看到很快的物体瞬间变慢。

四、源代码

整个程序实现的源代码如下:

data segment ;定义数据段

CAR0 DB 7 ;汽车的字符图形表

DB 0DBH,1,0,0

DB 0DBH,1,0,1

DB 0DBH,7,0,1

DB 0DBH,7,0,1

DB 4FH,6,1,0

DB 4FH,6,0,-3

DB 2,6,-2,1

;-----------------------------------------------------------------------------

MANU DB 11 ;机器人的图形表

DB 0DBH,09H,0,0

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 02H,09H,-1,-2

DB 03H,0CH,2,0

DB 0DBH,09H,1,-1

DB 0DBH,09H,0,2

DB 0DBH,09H,1,-3

DB 0DBH,09H,0,4

;------------------------------画图与清图坐标---------------------------- car_row0 db 10 ;汽车清图坐标

car_col0 db 10

car_row1 db 10 ;汽车画图坐标

car_col1 db 10

man_row0 db 15 ;机器人清图坐标

man_col0 db 60

man_row1 db 15 ;机器人画图坐标

man_col1 db 60

;延时时间间隔

dlay1 dw 10000 ;控制延时变量,即控制速度的变量

;-----------------------------输出提示-------------------------------------- INFO1 DB 0DH,0AH,'

(SPACE--PAUSE,ENTER--BEGAIN,ESC--EXIT,SPEEDUP-- +,SLOWDOWN-- - )$'

;动画控制提示信息,空格暂停,回车开始,ESC退出,

; “+”按一次速度加快一级,“—”按一次速度减慢一级

INFO2 DB 0DH,0AH,'

(CAR:UP--W,DOWN--S,LEFT--A,RIGHT--D MAN:UP--8,DOWN--2,LEFT--4,RIGHT--6)$' ;动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运动方向

;---------------------------汽车宏定义--------------------------------

clear_car macro row,col ;宏定义汽车清图

push bx

mov ax,0600H

mov ch,row

dec ch,1

mov cl,col

mov dh,ch

mov dl,cl

add dh,3 ;坐标加3

add dl,4 ;坐标加4

mov bh,7

int 10h

pop bx

endm

;---------------------------- 宏定义机器人-----------------------------

clear_man macro row,col ;宏定义机器人清图

push bx

mov ax,0600H

dec ch,1

mov cl,col

dec cl,0

mov dh,ch

mov dl,cl

add dh,5 ;坐标加5

add dl,5 ;坐标加5

mov bh,7

int 10H

pop bx

endm

;---------------------------------------------------------------------------- ;主要功能使控制延时,我采用的是控制空制令执行的条数来

;控制延时的长短,从而实现加速和减速。通过宏定义来实现

;参数(dlay1)的传递,用“+”“—”来改变dlay1的值,控制延时。

;------------------------------ 延时程序-------------------------------

d macro dlay1 ;宏定义延时程序

push cx

push dx

mov dx,dlay1

dl1:

mov cx,6801

dl2:

loop dl2

dec dx

jnz dl1

pop dx

pop cx

endm

;---------------------------------------------------------------------------- code segment ;定义代码段

main proc far ;主函数

assume cs:code,ds:data

start:

push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

mov al,3 ;设置显示方式为80*25 16色图形方式

mov ah,0

int 10H

lea dx,info1 ;在显示器上显示字符串提示信息

int 21h

lea dx,info2 ;在显示器上显示字符串提示信息

mov ah,9

int 21h

call car_disp ;初始汽车的位置

call man_disp ;初始机器人的位置

call MOVE

ret

main endp

;---------------------------------------------------------------------------- disp proc near ;输出图形子程序

push ax

push bx

push cx

push dx

push si

sub ch,ch

mov cl,[si]

inc si

next: add dh,[si+2] ;改变行列坐标

add dl,[si+3]

mov ah,2 ;置光标位置DH为行、DL为列

int 10h

mov al,[si] ;取字符值

mov bl,[si+1] ;取字符属性

push cx

mov cx,1

mov AH,9 ;显示字符

int 10H

pop cx

add si,4 ;SI指向下一个字符

loop next

pop si

pop dx

pop cx

pop bx

pop ax

ret

disp endp

;---------------------------------------------------------------------------- car_disp proc near ;汽车画图子程序

push si

lea si,CAR0 ;取汽车的图

cmp car_row1,20 ;设置汽车运动的边界

ja c0 ;行数大于20,跳到第4行

cmp car_row1,4 ;行数小于4,跳到第20行

jb c1

cmp car_col1,3 ;列数小于3,跳到第70列

jb c2

cmp car_col1,70 ;列数大于70,跳到第3列

ja c3

jmp cn

c0:

mov car_row1,4

jmp cn

c1:

mov car_row1,20

jmp cn

c2:

mov car_col1,70

jmp cn

c3:

mov car_col0,3

mov car_col1,3

jmp cn

cn:

mov bh,0

;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标

mov bl,car_row1

mov car_row0,bl

mov bl,car_col1

mov car_col0,bl

mov dh,car_row1

mov dl,car_col1

call disp ;调用DISP画出汽车图形

pop si

ret

car_disp endp

;---------------------------------------------------------------------------- car_clear proc near ;汽车清图子程序

clear_car car_row0,car_col0 ;调用汽车清图宏

ret ;返回

car_clear endp

;---------------------------------------------------------------------------- man_disp proc near ;机器人画图子程序

push si

lea si,MANU ;取机器人的图

cmp man_row1,20 ;设置机器人运动的边界

ja n0 ;行数大于20,跳到第4行

cmp man_row1,4 ;行数小于4,跳到第20行

jb n1

cmp man_col1,3 ;列数小于3,跳到第70列

jb n2

cmp man_col1,70 ;列数大于70,跳到第3列

ja n3

jmp nn

n0:

mov man_row1,4

jmp nn

n1:

mov man_row1,20

jmp nn

n2:

mov man_col1,70

jmp nn

n3:

mov man_col0,3

mov man_col1,3

jmp nn

nn:

push bx

;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标

mov bh,0

mov bl,man_row1

mov man_row0,bl

mov bl,man_col1

mov man_col0,bl

pop bx

mov dh,man_row1

mov dl,man_col1

call disp ;调用DISP画出机器人图形

pop si

ret

man_disp endp

;---------------------------------------------------------------------------- man_clear proc near ;机器人清图子程序

clear_man man_row0,man_col0 ;调用机器人清图宏

ret ;返回

man_clear endp

;---------------------------------------------------------------------------- move proc near ;控制汽车和机器人的运动

push ax

push bx

;----------------------------- 取键盘操作------------------------------- next1:

mov ah,01H ;取键盘缓冲区状态

int 16h

jnz next2 ;缓冲区无按键,等待

DLY dlay1

call car_clear ;汽车一直向右运动

inc car_col1

call car_disp

call man_clear ;机器人一直向左运动

dec man_col1

call man_disp

jmp next1

next2:

mov ah,0 ;从键盘读字符

int 16h

;---------------------------------------------------------------------------- DISP proc near ;输出图形子程序

push ax

push bx

push cx

push dx

push si

sub ch,ch

mov cl,[si]

inc si

next: add dh,[si+2] ;改变行列坐标

add dl,[si+3]

mov ah,2 ;置光标位置DH为行、DL为列

int 10h

mov al,[si] ;取字符值

mov bl,[si+1] ;取字符属性

push cx

mov cx,1

mov AH,9 ;显示字符

int 10H

pop cx

add si,4 ;SI指向下一个字符

loop next

pop si

pop dx

pop cx

pop bx

pop ax

ret

disp endp

;--------------------根据键盘输入判断选择-------------------------- up: ;W 汽车向上运动

cmp ah,11h

jnz down

call car_clear

dec car_row1

call car_disp

jmp next1

down: ;S 汽车向下运动

cmp ah,1Fh

jnz left

call car_clear

inc car_row1

call car_disp

jmp next1

left: ;A 汽车向左运动

cmp ah,1Eh

jnz right

call car_clear

dec car_col1

call car_disp

jmp next1

right: ;D 汽车向右运动

cmp ah,20h

jnz up1

call car_clear

inc car_col1

call car_disp

jmp next1

up1: ;机器人向上运动

cmp ah,48h

jnz down1

call man_clear

dec man_row1

call man_disp

jmp next1

down1: ;机器人向下运动

cmp ah,50h

jnz left1

call man_clear

inc man_row1

call man_disp

jmp next1

left1: ;机器人向左运动

cmp ah,4bh

jnz right1

call man_clear

dec man_col1

call man_disp

jmp next1

right1: ;机器人向右运动

cmp ah,4dh

jnz speedup1

call man_clear

inc man_col1

call man_disp

jmp next1

speedup1: ;主键盘加号

cmp ah,0dh ;"+"加速运动

jnz speedup2

sub dlay1,1000

jmp next1

speedup2: ; ;小键盘加号

cmp ah,4Eh ;"+"(小键盘)加速运动

jnz speeddown1

sub dlay1,1000

jmp next1

speeddown1: ;主键盘减号

cmp ah,0ch ;"-"减速运动

jnz speeddown2

add dlay1,1000

jmp next1

speeddown2: ;小键盘减号

cmp ah,4Ah ;"-"减速运动

jnz space1

add dlay1,1000

jmp next1

space1:

cmp ah,39h ;SPACE暂停运动

jnz exit1

space:

mov ah,0 ;从键盘读字符,AL=字符码,AH=扫描码

int 16h

cmp ah,1ch ;回车返回next1,否则继续等待从键盘读字符,实现暂停

jnz space

jmp next1

exit1:

cmp ah,01h ;ESC退出

jnz others

pop bx

pop ax

ret ;返回主程序

others: ;按其他键,无效,继续运行

jmp next1

MOVE ENDP

;---------------------------------------------------------------------------

code ends

end start

五、心得体会

选题的时候我以为动画程序的实现应该使非常容易实现的,就是不停的清屏,重新在下一个位置画图,从而实现动画。但通过本次汇编作业,我才真正懂得了动画的实现其实没有我想象的那么简单。刚开始我做了一个图形,继而由一个图形做成两个,在这个过程中我碰到了很多难题,比如如何画图,如何实现图形的运动,如何在一个屏幕上显示两个图形,如何分别控制两个图形的运动,为了解决这些问题我试了很多方法,最后我选择了坐标控制运动,局部清屏,我觉得这是我能想到的最好的方法了,虽然做的过程很累,整天都在想问题的解决方法,但当你解决一个问题之后,那种感觉真的很享受,当整个程序完成的时候我很兴奋。当然这个程序还有一些不足的地方,比如说当俩物体运动到一起时没有碰撞效果,还有就是程序的界面不够友好。通过这次作业,也让我熟悉了很多以前都不熟悉的一些指令,并利用这些指令去实现一些操作。同时也让我更加了解了汇编程序的结构和流程,对编程也有了更深的体会。过程中我还学会了一些处理问题的方法:理论与实践相结合,不懂的地方应勤问老师勤问同学,直到把它搞懂为止。

源代码:(修正后)

data segment ;定义数据段

CAR0 DB 7 ;汽车的字符图形表

DB 0DBH,1,0,0

DB 0DBH,1,0,1

DB 0DBH,7,0,1

DB 0DBH,7,0,1

DB 4FH,6,1,0

DB 4FH,6,0,-3

DB 2,6,-2,1

MANU DB 11 ;机器人的图形表

DB 0DBH,09H,0,0

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 0DBH,09H,0,1

DB 02H,09H,-1,-2

DB 03H,0CH,2,0

DB 0DBH,09H,1,-1

DB 0DBH,09H,0,2

DB 0DBH,09H,1,-3

DB 0DBH,09H,0,4

car_row0 db 10 ;汽车清图坐标

car_col0 db 10

car_row1 db 10 ;汽车画图坐标

car_col1 db 10

man_row0 db 15 ;机器人清图坐标

man_col0 db 60

man_row1 db 15 ;机器人画图坐标

man_col1 db 60

dlay1 dw 10000 ;控制延时变量,即控制速度的变量

INFO1 DB 0DH,0AH,' (SPACE--PAUSE,ENTER--BEGAIN,ESC--EXIT,SPEEDUP-- +,SLOWDOWN-- - )$' ;动画控制提示信息,空格暂停,回车开始,ESC退出,“+”按一次速度加快一级,“—”按一次速度减慢一级

INFO2 DB 0DH,0AH,' (CAR:UP--W,DOWN--S,LEFT--A,RIGHT--D MAN:UP--8,DOWN--2,LEFT--4,RIGHT--6)$' ;动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运动方向

;---------------------------------------------------------------------------- clear_car macro row,col ;宏定义汽车清图

push bx

MOV AX,0600H

MOV Ch,row

dec ch,1

mov cl,col

mov dh,ch

mov dl,cl

add dh,3

add dl,4

MOV BH,7

INT 10H

pop bx

endm

;---------------------------------------------------------------------------- clear_man macro row,col ;宏定义机器人清图

push bx

MOV AX,0600H

MOV Ch,row

dec ch,1

mov cl,col

dec cl,0

mov dh,ch

mov dl,cl

add dh,5

add dl,5

MOV BH,7

INT 10H

pop bx

endm

;---------------------------------------------------------------------------- DLY macro dlay1 ;宏定义延时程序

PUSH CX

PUSH DX

MOV DX,dlay1

DL1: MOV CX,6801

DL2:

LOOP DL2

DEC DX

JNZ DL1

POP DX

POP CX

endm

;---------------------------------------------------------------------------- code segment ;定义代码段

main proc far ;主函数

assume cs:code,ds:data

start:

push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

mov al,3 ;设置显示方式为80*25 16色图形方式

mov ah,0

int 10H

lea dx,info1 ;在显示器上显示字符串提示信息

mov ah,9

int 21h

lea dx,info2 ;在显示器上显示字符串提示信息

mov ah,9

int 21h

call car_disp ;初始汽车的位置

call man_disp ;初始机器人的位置

call MOVE

ret

main endp

;---------------------------------------------------------------------------- DISP PROC NEAR ;输出图形子程序

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH SI

SUB CH,CH

MOV CL,[SI]

INC SI

NEXT: ADD DH,[SI+2] ;改变行列坐标

ADD DL,[SI+3]

MOV AH,2 ;置光标位置DH为行、DL为列

INT 10H

MOV AL,[SI] ;取字符值

MOV BL,[SI+1] ;取字符属性

PUSH CX

MOV CX,1

MOV AH,9 ;显示字符

INT 10H

POP CX

ADD SI,4 ;SI指向下一个字符

LOOP NEXT

POP SI

POP DX

POP CX

POP BX

POP AX

RET

DISP ENDP

car_disp proc near ;汽车画图子程序

push si

lea si,CAR0 ;取汽车的图

cmp car_row1,20 ;设置汽车运动的边界

ja c0 ;行数大于20,跳到第4行

cmp car_row1,4 ;行数小于4,跳到第20行

jb c1

cmp car_col1,3 ;列数小于3,跳到第70列

jb c2

cmp car_col1,70 ;列数大于70,跳到第3列

ja c3

jmp cn

c0:

mov car_row1,4

jmp cn

c1:

mov car_row1,20

jmp cn

c2:

mov car_col1,70

jmp cn

c3:

mov car_col0,3

mov car_col1,3

jmp cn

cn:

mov bh,0 ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标

mov bl,car_row1

mov car_row0,bl

mov bl,car_col1

mov car_col0,bl

mov dh,car_row1

mov dl,car_col1

CALL DISP ;调用DISP画出汽车图形

pop si

ret

car_disp endp

;---------------------------------------------------------------------------- car_clear proc near ;汽车清图子程序

clear_car car_row0,car_col0 ;调用汽车清图宏

ret ;返回

car_clear endp

man_disp proc near ;机器人画图子程序

push si

lea si,MANU ;取机器人的图

cmp man_row1,20 ;设置机器人运动的边界

ja n0 ;行数大于20,跳到第4行

cmp man_row1,4 ;行数小于4,跳到第20行

jb n1

cmp man_col1,3 ;列数小于3,跳到第70列

jb n2

cmp man_col1,70 ;列数大于70,跳到第3列

ja n3

jmp nn

n0:

mov man_row1,4

jmp nn

n1:

mov man_row1,20

jmp nn

n2:

mov man_col1,70

jmp nn

n3:

mov man_col0,3

mov man_col1,3

jmp nn

nn:

push bx ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标

mov bh,0

mov bl,man_row1

mov man_row0,bl

mov bl,man_col1

mov man_col0,bl

pop bx

mov dh,man_row1

mov dl,man_col1

CALL DISP ;调用DISP画出机器人图形

pop si

ret

man_disp endp

;---------------------------------------------------------------------------- man_clear proc near ;机器人清图子程序

汇编语言课程设计

沈阳大学

2.3 MASM的介绍 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发,历经二三十年的发展,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4等指令系统。 2.4总体设计功能 本次课程设计的内容是采用汇编语言设计一个运行于计算机的“霓虹灯”的模拟显示 程序,由$及*字符相间,从两侧向中间螺旋汇聚直至形成一个矩形,这就要求该霓虹灯能够动态地进行变化;霓虹灯模拟显示程序主要是进行程序循环调用,可以通过CMP、JMP、JZ、RET等命令进行跳转。由于是霓虹灯的模拟显示,因此在进行程序循环调用前需要进行数据段定义,以使子程序在进行调用时能够根据数据段的定义来执行,最后显示结果。 定时器中断处理程序:计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。 视频显示程序设计:一般由DOS 或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H中断即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。 键盘扫描程序设计:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器,以及检测键盘状态,有无输入,并检测输入各值。 2.5详细功能设计 2.5.1主程序功能 主程序通过调用各个子程序来实现清屏,改变图形等功能,具体调用过程如图1所示。 沈阳大学

汇编语言程序设计报告

实验一: 一、实验目的: 1. 学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2. 了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3. 掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4. 掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上 三、实验内容及算法流程、源程序清单 实验内容:编写程序,从键盘输入一个字符并回显到视频显示器上。 源程序清单: 实验1.asm 实验1.obj 实验1.exe code segment assume cs:code start: mov ah,1 int 21h mov ah,4ch int 21h code ends end start 实验二:编写程序,显示一个字符Q 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的02h号功能显示输出一个字符Y。

三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,显示输出一个字符Q。 源程序清单: 实验2.asm 实验2.obj 实验2.exe code segment assume cs:code start: mov ah,02 mov dl,'Q' int 21h mov ah,4ch int 21h code ends end start 实验三:编写程序,在屏幕上显示输出“I love DOTA” 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 考察通过调用(INT 21H)表中的0ah号功能显示输出字符串 三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,在屏幕上显示输出‘I love DOTA。 源程序清单: 实验3.asm 实验3.obj 实验3.exe data segment buf db 'I love DOTA.$'

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

【报告】汇编语言程序设计报告

【关键字】报告 汇编语言程序设计报告 计算机学院 2011/6/7 题目要求 分支程序设计: 1、编写程序,键入学生成绩(百分制),按A、B、C、D显示在屏幕上。 子程序设计: 2、给定一个数组存放5个小写字母,用地址表传递方法编写子程序,将其 转换成大写字母,并显示在屏幕上。 循环程序设计: 3、设有一段文字,编写一段程序查找字母a出现的次数,并显示在屏幕上。 DOS功能调用: 4、在图形方式下,在屏幕中央绘制一个用“*”表示的等腰三角形。 5、编写一个生成ASCII码表的程序,并显示在屏幕上。 6、根据提示输入任意年份,编写判断闰年的程序,如果是闰年, 则在屏幕上显示“Y”,否则显示“N”。 7、显示杨辉三角形。要求: (1)从键盘接收正整数n; (2)屏幕显示杨辉三角形,显示n行信息; 编程思路: 1. 在数据段设置提示信息,成绩ABCD的显示信息,并预留空间。 利用DOS中断,取得输入的字符,输入字符的ASCII值在30H-39H之间为‘0-9’,不是则报错,值存入SCORE中,将SCORE的高位分别与9,8,7,6相比, 跳转到设置好的代码区,输出对应成绩(A,B,C,D).若为3位数,则跳到A区,输出A. 2. 在数据段设置ADDRESS存放数据偏移量和COUNT计数器 利用DOS中断,取得输入的字符串存入DX中,偏移量存入STRING,并存入ADDRESS中。COUNT存入ADDRESS+2地址中,调用子程序TURN,利用SI指针与ADDRESS配合将每个字母由大写转为小写。 3. 在数据段设置STRING用于存放键盘输入字符,COUNT存放字符个数,利用DOS中断,输入字符串存入STRING.编写CHECK模块用于检查输入的字符是否为a,循环执行CHECK模块,为a 则BL+1,不为a,SI+1继续检查,直至CX=0,最后输出结果。 4. 堆栈段预留128字节空间存放*.设置SI控制空格数,BX为输出*个数.设置3层循环,分别输出空格数,*数,回车.首先将保护CX行数,将其压入栈中,外层循环按CX列数,输出每行之前的空格数,之后根据BX输出*,此时一行输入完,输出回车换行后,BX+2即*数+2, CX出栈,加入外循环,输出下一行信息。 5. 初始化时设置行列数,第一个字符的ASCII值,设置两层循环,首先CX入栈保护输出行数,外层循环控制输出行数,内循环输出列个数对应的字符数,将要输入的字符存入DL,每输出完一次DL+1,SI值即列数给CX,当CX=0时,输出回车换行,CX出栈,加入外循环准备下

微机原理与汇编语言课程设计报告

西北师范大学 计算机科学与工程学院 微机原理与汇编语言 课程设计报告 设计题目:中断控制点阵显示与音乐模块姓名: 学号: 专业班级: 系所中心: 指导老师: 起讫时间: 设计地点: 2016年8月20日

摘要 使用8086汇编语言,在唐都TD-PITE实验箱上进行硬件连线,在计算机上采用与该实验箱配套的软件进行输入,观察实验结果。设计思路是利用在实验箱上i386内集成的两片8259芯片分别进行中断,通过实验箱上的两个脉冲开关发送信号到总线上开放的两个中断口,送入CPU内部的8259中。此时按下脉冲开关kk1+,第一个中断发生,在16*16点阵上循环滚动显示“西北师大汇编设计李泓毅”,若按下kk2+则第二个中断发生,执行音乐模块子程序,利用8254芯片开始响应预先编排好的音乐。 【关键词】级联中断;8259芯片;16*16点阵;8254芯片;SPK音乐模块;脉冲信号

目录 摘要 (2) 第一章课程设计 (2) 1.1 目的和任务 (2) 1.2 设计环境、设备与器材 (2) 第二章设计内容和方案 (3) 2.1 设计内容 (3) 2.2 设计方案 (3) 第三章课程设计相关原理简述 (3) 第四章设计实现 (4) 4.1 系统设计框架结构 (4) 4.2 系统硬件设计 (4) 4.3 系统软件设计 (6) 4.4 程序流程图 (6) 4.5 核心数据结构 (8) 4.6 关键代码片段分析 (10) 第五章设计验证 (10) 5.1 验证步骤及结果 (10) 5.2 数据分析 (10) 5.3 遇到的问题及解决 (11) 5.4 需要讨论的其它问题 (11) 5.5 结论 (11) 第六章设计总结 (12) 第七章本课程教学建议 (13) 第八章参考文献 (13) 第九章附录:源代码 (13) 第一章课程设计 1.1 目的和任务 使用8259芯片进行中断程序设计,在第一个中断中响应字模显示模块,在第二个中断中响应音乐发声模块。

汇编课程设计

燕山大学 汇编语言课程设计说明书 题目:计算机钢琴程序 交通灯控制系统 学院(系):信息科学与工程学院 年级专业: 10级计算机科学2班 学号: 100104010113 学生姓名:马强 学号: 100104010116 学生姓名:夏洋 指导教师:何海涛、邹晓红 完成日期: 2013年7月3日

目录 1.课程设计的目的和意义........................................................................................................... - 2 - 1.1课程设计目的................................................................................................................ - 2 - 1.2课程设计的意义............................................................................................................ - 2 - 2.题目一:计算机钢琴程序....................................................................................................... - 2 - 2.1系统的主要功能............................................................................................................ - 2 - 2.2总体设计方案................................................................................................................ - 2 - 2.2.1扬声器驱动方式................................................................................................. - 2 - 2.2.2延时原理............................................................................................................. - 3 - 2.2.3键盘控制发声程序............................................................................................. - 4 - 2.2.4设计总结............................................................................................................. - 5 - 2.3作品使用说明................................................................................................................ - 6 - 3.题目二:交通灯控制系统....................................................................................................... - 6 - 3.1系统的主要功能............................................................................................................ - 6 - 3.2 系统工作原理............................................................................................................... - 6 - 3.2.1 8259的工作原理................................................................................................ - 6 - 3.2.2 8255A的工作原理:...................................................................................... - 7 - 3.2.3 8253的工作原理:............................................................................................ - 7 - 3.3总体设计方案................................................................................................................ - 7 - 3.3.1程序流程图......................................................................................................... - 8 - 3.3.2接口电路图....................................................................................................... - 11 - 3.4交通灯的设计总结...................................................................................................... - 11 - 4.课程设计心得体会................................................................................................................. - 12 - 5.参考文献................................................................................................................................. - 12 - 6.附录:程序代码..................................................................................................................... - 12 - 6.1计算机钢琴程序代码.................................................................................................. - 12 - 6.2交通灯控制系统代码.................................................................................................. - 14 -

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学 号 指导教师 完成日期

目录 目录 (2) 1概述 (1) 1.1 设计目的 (1) 1.2 设计内容 (1) 2系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (1) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4系统详细设计 (3) 5测试 (4) 5.1 测试方案 (4) 5.2 测试结果 (4) 6小结 (5) 参考文献 (6) 附录 (7) 附录源程序清单 (7)

实现加减乘除四则运算的计算器 1 概述 1.1 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 1.2 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 2.2 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 2.3 开发环境 TASM5.0集成环境

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

汇编课程设计报告

汇编课程设计报告

学 号: 课程设计 题目打印水仙花数 学院计算机科学与技术 专业计算机科学与技术 班级 姓名 指导教师

武汉理工大学《汇编语言程序设计》课程设计 2012 年 6 月28 日 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 打印水仙花数 初始条件: 理论:完成了《汇编语言程序设计》课程, 对微机系统结构和80系列指令系 统有了较深入的理解,已掌握了汇 编语言程序设计的基本方法和技 巧。 实践:完成了《汇编语言程序设计》的4 个实验,熟悉了汇编语言程序的设 计环境并掌握了汇编语言程序的 调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 进一步理解和掌握较复杂程序的设计方 法,掌握子程序结构的设计和友好用户界 3

2.1简要分析 2.1.1原理说明 可以用标签来接收三位数,标签的好处在于可以限制输入的位数,并且通过实际输入位数可以直接进行一部分的异常处理。 将数存到标签后,因为是以ASCII码的形式存的,所以需要进行转换,将其变成十六进制数,转换后将数字存到申请的内存字中。在转换成十六进制数的过程中,可以对输入的数进行异常处理,判断是否输入有误。 在输出水仙花数时,设置一个计数器,从100开始循环判断,直到等于用户输入的数为止,依次判断是否为水仙花数,决定是否输出该数。 在输出时,分别取出水仙花数的个、十、百位数,转换成ASCII码再输出。 系统提示是否继续后,程序对用户输入的信息进行判断,若为y或Y则系统回到初始状态,若为n或N则退出系统,若为其他则提示输入错误并重新输入。 2.1.2程序流程图

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

《汇编语言程序设计》学习心得自主学习报告.doc

自主学习报告书 题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名: 专业: 学号: 福建工程学院国脉信息学院教务处制 二○一二年六月

学习汇编语言程序设计报告书 由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。 通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。 在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也

是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

汇编语言课程设计报告

课程设计报告 课程名称课题名称 汇编语言程序设计 1.显示彩色菱形 2.显示系统当前时间 专业 班级 学号 姓名 指导教师 年月日

课程设计任务书 课程名称汇编语言程序设计 课题 1.显示彩色菱形 2.显示系统当前时间专业班级 学生姓名 学号 指导老师 审批 任务书下达日期年月日 任务完成日期年月日

一、设计内容与设计要求 1.设计内容:通过本周的课程设计,学生能够巩固所学的基础知识,并能 够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。 (1)、编制一计算比赛成绩的程序,要求完成以下功能: a、9 名评委,每个评委给分范围为 0~100(整数); b、9名评委给分中,去掉一个最高分和一个最低分,剩余7 名评委的平均分即为参赛者的得分(精确到小数点二位); c、将得分在光标位置处显示出来。 (2) 、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30 字的 grade 数组中,各数据的格式为: 学号,成绩 1,成绩 2,?,成绩 5 然后根据 grade 中的学生成绩,把学生名次填入rank 数据组中,并显示出来,格式为:学号,名次 (3)、利用 INT 1CH(大约每秒中断 18.2 次)编写一个中断驻留程序,要求在屏幕的右 上角显示计算机中当前系统时间,显示格式为 时:分: 秒:1/100 秒 (4)、输入一个菱形的两条对角线长,在屏幕上用‘ * ’号画出一个彩色的菱形。 (5)、设置图形方式并显示彩条,要求: 选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次, 一直到整个屏幕都显示出彩条 2.设计要求: 掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一 些实际的问题,为将来编写软件积累一些典型的案例处理经验。 (1)、设计正确,方案合理。 (2)、界面友好,使用方便。 (3)、程序精炼,结构清晰。 (4)、设计报告 5000 字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。 (5)、上机演示。 (6)、按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编

汇编语言课程设计报告

农林大学金山学院 课程设计报告 课程名称:汇编语言课程设计 课程设计题目:动画设计“我爱大自然”姓名: 系:信息与机电工程系 专业:电子信息工程 年级:2008级 学号:082230066 指导教师:\ 职称:助教 2009~2010学年第二学期

目录 1 课程设计的目的 (2) 2 课程设计的要求 (2) 3课程设计报告容 (2) 3.1设计思路 (2) 3.2程序流程图 (2) 3.3设计源程序 (5) 3.4动画示意图 (19) 4 总结 (20) 5参考文献 (20) 6评分标准 (21)

动画设计“我爱大自然” 一、课程设计的目的 《汇编语言课程设计》是电子信息工程专业集中实践性环节之一,是学习完《汇编语言》课程后进行的一次全面的综合练习。其目的是: 培养学生熟练掌握汇编语言指令系统,深化和巩固指令系统和编程方法,提高学生的编程应用能力。为将来从事专业工作打下基础,培养良好的职业道德和严谨的工作作风。 二、课程设计的要求 1)具备初步的独立分析和解决问题的能力; 2)初步掌握问题分析、系统设计、程序编码、测试等基本方法和技能; 3)提高综合运用所学的理论知识和方法的能力; 4)训练用系统的观点和软件开发一般规进行软件开发,培养科学的工作方法和作风; 5)设计的题目要求达到一定工作量,并具有一定的深度和难度; 6)编写出课程设计说明书。 三、课程设计报告容 (一)设计思路 “我爱大自然”这个程序中包含了比较多的景物,既有静态的也有动态的,其中还有一段音乐。为了节省存储空间,提高程序设计的效率和质量,使程序简洁、清晰,便于阅读,同时也为了便于修改和扩充,采用子程序设计技术和宏定义,根据程序要实现的若干主要功能及个功能块要调用的公共部分,将程序划分为若干个相对独立的模块,为每个模块编制独立的程序段,最后将这些子程序根据调用关系连成一个整体。 这样,整个程序就被分为几个子程序的有机统一。根据BIOS中断调用原理,设置80×25彩色文本显示方式,分别编写一个子程序显示“I LOVE NATURE,LET US GO AIRING”和一个子程序在屏幕上“画”树。这两个子程序所体现出来的事物都是的。为了实现小鸟

《汇编语言程序设计》实验报告(一)

《汇编语言程序设计》实验报告(一) 姓名学号系别班级 指导教师实验日期 课程名称《汇编语言程序设计》同组实验者 一、实验名称:实验一汇编程序和连接程序的使用 二、实验目的: 1. 熟悉汇编语言的上机环境; 2. 学习EDIT,MASM,LINK程序的使用; 3. 掌握建立、汇编、链接、运行汇编语言程序的过程。 三、实验类型:验证 四、实验材料、工具、或软件 多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语言程序设计实验集成环境。 五、实验要求 1. 编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。 2.完成课堂例题,并用DEBUG运行,观察结果。 六、试验内容与步骤:(附上必要的调试过程及运行结果截图,可加附页) 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。上机步骤如下: 1、调用https://www.doczj.com/doc/cc14490174.html,程序建立汇编语言源程序.ASM 建立好的源文件以EX_1.ASM为文件名存盘 DATA SEGMENT STRING1 DB 'Visual C++ ' STRING2 DB 'Visual Basic' COUNT EQU $-STRING2 MESS1 DB 'MATCH!’,13,10,’$' MESS2 DB 'NO MATCH!’,13,10,’$' DATA ENDS code segment assume cs:code,ds:data,es:data main proc far start: push ds

汇编语言课程设计-学生成绩管理系统

1、课程设计的目的、任务 《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 2、软件需求分析和设计 2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块: (1).插入一个数据(插入学生学号以及语数外三个成绩)。 (2)修改一个数据。 (3)删除学生成绩数据。 (4)查找学生成绩。 (5)查看学生成绩的排名 (6)查看学生成绩分布 (7)按esc键退出系统 2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能: (1)输出显示菜单。 (2)输入学生的成绩 (3)修改学生成绩 (4)删除学生成绩 (5)查询学生成绩 (6)显示学生成绩排名 (7)显示成绩分布统计 (8)按esc键退出系统

2.3依据程序的功能需求,该系统的功能结构图如下 系统功能结构图 2.4 程序流程图:

主程序流程图查找学生成绩

插入学生学号及成绩修改学生的成绩 显示各个学科各分数段的人数 3、程序实现说明

3.1学生管理系统中各子程序如下: (1).输入全部学生学号以及语文,英语,数学三科的成绩。 子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。 代码: insert proc near ;定义进程子程序:插入学生,学号及 成绩 call input ;调用input add n,1 ret insert endp (2).修改输入的成绩。 子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码: modify proc near ;定义进程子程序:修改学生学号,成绩 md1:output mess1 ;输出mess1 shuru ;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si] ;先查找输入的学生是否存在 je qq1_1 ;查到的话,就跳转到qq1_1输入修改的值, 也就是重新输入。;结果相等则跳转到qq1_1 add si,1

相关主题
文本预览
相关文档 最新文档