汇编打字程序完整代码

汇编打字程序完整代码
汇编打字程序完整代码

汇编打字程序完整代码

已经经过测试,可以直接使用

Init_game macro op1,op2,op3,op4,op5

local ns

mov cx,00h

mov dh,op1

mov dl,op2

ns:mov ah,02h;设置光标位置

mov bh,00h;页号为0

int 10h

push cx

mov ah,0ah;在当前光标位置写字符

mov al,op3;al=字符的ascii码

mov bh,00h;bh=页号bl=字符属性

mov cx,01h;cx=写入字符重复次数

int 10h

pop cx;cx=0

inc cx;cx=cx+1

inc op4

cmp cx,op5

jne ns

endm

clear_screen macro op1,op2,op3,op4 ;清屏宏定义cx,屏幕的左上角,dx屏幕的右下角mov ah,06h

mov al,00h

mov bh,0ah;改变行属性的色彩,字的色彩,bh空白行的属性/07就是正常的黑底白字mov ch,op1

mov cl,op2

mov dh,op3

mov dl,op4

int 10h

mov ah,02h;设置光标的位置从0000开始

mov bh,00h

mov dh,00h

mov dl,00h

int 10h

endm

menu macro op1,op2,op3 ;菜单显示宏定义

mov ah,02h

mov bh,00h

mov dl,op2

int 10h

mov ah,09h

lea dx,op3

int 21h

endm

data segment

ZK db "WELCOME TO PLAY!$"

no db "date:2014/4/7 BY luozhilei QQ:1121364692 $"

meg db "press Enter to start.......$"

meg1 db "when a letter is dropping,please hit it!(just press the$ " meg2 db "dropping letter,so easy!)$"

meg3 db "press space key to pause!repress space to continue!$" meg4 db "press ESC key to return main menu!$"

meg5 db "press letter 'E' to exit!$"

meg6 db "version 1.0","$"

speed dw 600d

letters_bak db "jwmilzoeucgpravskntxhdyqfb"

db "iytpkwnxlsvxrmofzhgaebudjq"

db "nwimzoexrphysfqtvdcgljukda"

letters db 78d dup(0)

letter_counter db 0

life_flag db 78 dup(0)

position_flag db 78 dup(0)

present_position db 1

data ends

stack segment para stack 'stack'

db 64 dup(0)

stack ends

code segment

main proc far

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov letter_counter,00h

mov present_position,1

lea si,position_flag;

mov ah,00h

mov cx,00h

------------------------------------

lea di,letters;di的偏移地址为letters

lea si,letters_bak;si的偏移地址为letter_bak

mov cx,00h;cx=0

mov ah,[si];ah=j

mov [di],ah;ah的值放到letters里面;letters_bak的值放入letters里面inc si;si+1

inc di;di+1

inc cx;cx+1

cmp cx,78d;

jne init_letters;不为0就到init_letters,一直循环到letters里

mov ah,00h

lea si,life_flag;

mov cx,00h

over后,自动回去吧

init_life_flag:

mov [si],ah

inc si

inc cx

cmp cx,78d

jne init_life_flag

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

mov cx,00h ;ch=光标开始行,cl=光标结束行根据CX给出光标的大小mov ah,01h

or ch,00010000b;ch>20h,光标消失,cl>20h,覆盖字符

int 10h

clear_screen 00d,00d,24d,79d ;清屏,0000- 2479

Init_game 00d,00d,07h,dl,80d ;这个四个是初始化屏幕的上下左右的框框Init_game 24d,00d,07h,dl,80d

Init_game 00d,00d,07h,dh,25d

Init_game 00d,79d,07h,dh,25d

menu 05d,15d,ZK ;菜单信息的宏调用,这五行是在屏幕上显示提示消息menu 07h,15d,no

menu 09d,15d,meg

menu 11d,15d,meg1

menu 13d,10d,meg2

menu 15d,15d,meg3

menu 17d,15d,meg4

menu 19d,15d,meg5

menu 21d,15d,meg6

put: mov ah,02h ;设置光标位置

mov bh,00h;设置页码

mov dh,22d;dx行列坐标

mov dl,33d

int 10h

mov ah,01h ;从键盘输入任意字符并回显示,al=输入字符

int 21h

cmp al,0dh;是否为换行符

je speed3;如果是换行符则跳转到speed3处

cmp al,45h;比较是否为e

je exit;如果为e,转到exit

exit: mov ah,4ch

int 21h

speed3:

mov ax,speed+12

mov speed,ax

jmp begin

begin: clear_screen 01d,01d,23d,78d ;清屏宏调用

; clear_screen 01d,01d,23d,78d

Init_game 23d,01d,03h,dl,78d;23d01d行列坐标,初始化倒数第二行的字符mov ah,02h

mov bh,00h

mov dh,01h

mov dl,01h

int 10h

mov cx,00h

lea si,letters ;si的偏移地址是letters

nextletter:

mov ah,02h ;显示字母

mov dl,[si] ;把letters的字符放到dl里

int 21h ;通过dos中断的2号功能项,把字符显示出来

inc si

inc cx

cmp cx,78d

je nextcycle;全部显示完了后,跳到nextcycle

jmp nextletter

from_front:

sub present_position,78d ;当超过78个字时的处理方式减去78

jmp gobackto_si;跑到gobackto_si这来

find_zero:

cmp letter_counter,78d ;letter_counter有78了,初始化

je recycle;如果有跑到recycle

cmp present_position,78d;如果present_position等于78d,

je from_one

mov ah,00h

nextsi: add present_position,01h

inc si

cmp [si],ah

je gobackto_di

cmp present_position,78d

je from_one

jmp nextsi

from_one:mov present_position,01h ;present_position=01

jmp gobackto_si

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

recycle:mov letter_counter,00h;letter_counter=0

mov present_position,01d;present_position=01

lea si,position_flag;si=position_flag的偏移地址

mov cx,00h

mov ah,00h

clearsi:

mov [si],ah;position_flag地址搞成0

inc cx

cmp cx,78d

je nextcycle

inc si

jmp clearsi

nextcycle:

lea di,letters;di的偏移地址是letters[字母]

lea si,position_flag;si的偏移地址是position_flag

add present_position,31d;31一跳,这个你可以随便设置

cmp present_position,78d;;超过78个字节

ja from_front

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

gobackto_si:

add si,word ptr present_position;si=si+present_position,si向后偏移

dec si; 要不要都无所谓,只不过,因为开始就觉定了是要31一跳,所以这里减一个1位

mov ah,[si];把position_flag放到ah里

cmp ah,01h;看看position_flag里面有没有标志1

je find_zero;如果ah为1转移,否则

gobackto_di:

mov ah,01h

mov [si],ah

add di,word ptr present_position

dec di;因为列坐标是从0开始,而字符是从1开始,所以这里是32-1

mov dl,present_position;

mov ah,02h

mov bh,00h

mov dh,01h

int 10h

mov cx,00h

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

nextrow: push cx

mov cx,00h

out_cycle: ; 延迟

push cx

mov cx,00h

in_cycle:

add cx,01h

cmp cx,1000 ;

jne in_cycle ;zf=0转到标号处执行,push dx

mov ah,06h ;从键盘输入字符,al等于字符mov dl,0ffh

int 21h

pop dx

jz pass

cmp al,1bh ;如果键入ESC,则返回主菜单je to_start1

cmp al," " ;如果键入SPACE,则游戏暂停je pause

cmp al,[di] ;输入字母正确!则字母消失je disappear

pass: pop cx

inc cx

cmp cx,speed

je print

jmp out_cycle

pause: push dx mov ah,06h

mov dl,0ffh

int 21h

pop dx

cmp al," "

jne pause

jmp pass

to_start1: ;返回主菜单

jmp start

print:

mov ah,0ah ;在当前光标位置写空格

mov al," "

mov bh,00h

mov cx,01h

int 10h

inc dh

mov ah,02h ;改变光标位置

mov bh,00h

mov ah,0ah ;在当前光标位置写字母

mov al,[di]

mov bh,00h

mov cx,01h

int 10h

pop cx

inc cx

cmp cx,21d

je print_next_letter

jmp nextrow ;下一行

disappear: ;击中字母后输出空格

pop cx

pop cx

mov ah,0ah;在光标处按原来属性显示字符

mov al," "

mov bh,00h

mov cx,01h

int 10h

jmp hit

print_next_letter:

lea si,life_flag

add si,word ptr present_position

dec si

mov ah,0ah;在当前光标处按原有属性显示字符

mov al," ";最倒数第二排写入字符,意思是当掉下来的字符到倒数第二行的时候,自动变成空格消失

mov bh,00h

mov cx,01h

int 10h

inc dh ;这就是到了最后一行

mov ah,02hmov bh,00h

int 10h

mov ah,0ah;把最后一行的字符变成空格

mov al," "

mov bh,00h

mov cx,01h;重复输出,这里的重复输出的意思就是输入一个空格

int 10h

mov ah,1;把life_flag变成1,这样下次就可以不在同一个位置掉字符下来

mov [si],ah

hit: mov ah,02h;设置光标

mov bh,00h

mov dh,01h;第一行

mov dl,present_position;下一个字符的列

mov al,[di] ; 出现下一个新字母的数法

add al,7;di+7

cmp al,7ah;z的ascii码就是7ah,所以当al大于7ah时转移

ja convey_letter

mov ah,0ah;在当前光标按原有属性显示字符,al=字符

mov bh,00h

mov cx,01h

int 10h

mov [di],al

add letter_counter,01h;统计次数

jmp nextcycle

convey_letter:

sub al,7ah

add al,61h;al等于要显示的字符,加61表示是小写字母

mov ah,0ah

mov bh,00h

mov cx,01h

int 10h

mov [di],al

add letter_counter,01h

jmp nextcycle ;没弄懂作者这里是什么意思,到了这里就jmp了那写下面的程序做屁clear_screen 01,01,23,78

mov ah,02h

mov bh,00h

mov dh,11d

mov dl,20d

int 10h

inc dh

inc dh

mov ah,02h

mov bh,00h

int 10h

notkey:

mov ah,07h

int 21h

cmp al,0dh

je to_start

cmp al,1bh

je over

jmp notkey

to_start:

clear_screen 00,00,24,79

jmp start

over: clear_screen 01,01,23,78 mov ah,02h

mov bh,00h

mov dh,11d

mov dl,15h

int 10h

mov ah,02h

mov bh,00h

mov dh,13d

mov dl,15h

int 10h

mov ah,07h

int 21h

mov ah,07h

int 21h

clear_screen 00,00,24,79 mov ax,4c00h

int 21h

main endp

code ends

end start

汇编语言程序设计综合设计实验项目

汇编语言程序设计创新实验项目 1. 编写一个完整的程序:根据零件的数量和总价格,计算出零件的单价。 主程序MAINPRO允许用户在键盘上输入零件数量和总价格; 子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制; 子程序SUBCALC 计算出零件的单价; 子程序SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。 要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。 2.编写一个完整的程序,分别输入有一个班学生的百分制成绩,根据学生百分制成绩转换出五级分数制。如低于60分为E,60-69为D、70-79为C、80-89为B、90-99为A。并统计该班学生人数。 要求:1、学生成绩从键盘接收; 2、本程序可以重复运行,自行设计退出程序的方法; 3、程序具有可操作性,如,应该有提示语句和判断非法操作的方法和处理方式。 3. 编写一个完整的程序,在屏幕上显示如图所示数字拼成的形状。 0123456789 1234567890 2345678901 3456789012 4567890123 5678901234 6789012345 7890123456 8901234567 9012345678 4、按要求编写一个完整的程序。 要求:1、自BUFFER开始的内存单元中,存有一个ASCII码字符串。查找已知字符串中含有多少个子字符串‘AB’的个数,将统计结果以十进制形式显示输出。 2、在查找到子字符串‘AB’后添加空格字符。 5、按要求编写一个完整的程序。 要求:1、编写子程序SORT,将内存中10个无符号字数据由小到大排序。 2、编写子程序FIND,在上述已排好的数据区里查找某一个数,若找到,显示 其在数据区的位置,否则显示‘N’字符。 3、编写调用程序,完成排序及检索任务。 6、试编写一程序,要求根据用户键入的月份在终端上显示该月的英文缩写名。 7、试编写一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,其中grade+1保存学号为了i+1的学生的成绩。然后根据grade中的学生成绩,把学生

C语言程序设计 入门源代码代码集合

#include <> void print_star(void) { printf("*****************\n"); } void print_welcome(void) { printf("C language,welcome!\n"); } void main() { print_star(); print_welcome(); print_star(); getchar(); } 演示2 #include "" int sum(int i,int j) { return(i + j); } void main() { int n1,n2; printf("input 2 numbers:\n"); scanf("%d%d",&n1,&n2); printf("the sum = %d\n",sum(n1,n2)); getchar(); } 演示3 #include "" int maxnum(int,int,int); main() { int a,b,c; printf("Please enter 3 numbers:\n"); scanf("%d,%d,%d",&a,&b,&c); printf("Maxnum is %d\n",maxnum(a,b,c));

} int maxnum(int x,int y,int z) { int max=x; if(y>max) max = y; if(z>max) max = z; return max; } 演示4 #include <> int s1(int n) { int j,s; s=0; for(j=1;j<=n;j++) s=s+j; return s; } int sum(int n) { int i,s=0; for(i=1;i<=n;i++) s=s+s1(i); return s; } void main() { int n; printf("n:"); scanf("%d",&n); printf("s=%d\n",sum(n)); } 演示5

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

客户端程序源代码

#include #include #include #include #include #define rec_length 20 main(int argc, char **argv ) { // structure defined for request as a client struct hostent *hp1; struct sockaddr_in sin1; struct servent *sp1; char sbuf[50]; int ss,spid; char *sservice,*sdest; // structure defined for request as a server struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char buf[50]; char *service; // test the environment parameter: lservice, dservice, server_name if(argc==4){ service=argv[1];sservice=argv[2]; sdest=argv[3];} else { fprintf(stderr,"Parameter assigned Error!\nUsage:\n"); fprintf(stderr,"\t%s lservice dservice server_name!\n",argv[0]); fprintf(stderr,"Note: server_name is defined in file /etc/hosts\n"); fprintf(stderr,"and: lservice dservice are defined in file /etc/services\n"); exit(-1); } if((sp=getservbyname(service,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-5); } if((s=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,"Error: socket create"); exit(-6); } bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,&sin,sizeof(sin))==-1){ fprintf(stderr,"Error: bind"); close(s); exit(-6); }

搜狗拼音输入法提高打字速度技巧

搜狗拼音输入法提高打字速度技巧 虽然拼音输入法上手简单,但输入速度始终比不了五笔输入法。如何提高输入速度,搜狗为此开发了多种功能,熟练后能与五笔输入法熄美。 首先搜狗支持词组输入,一般常用的词汇都有收录,甚至一些专业词组也包含其中。现将网络上收集的搜狗拼音输入法可以使用的方法分享出来,供搜狗拼音使用者参考。 1、简拼 简拼是输入声母或声母的首字母来进行输入的一种方式,有效的利用简拼,可以大大提高输入的效率。搜狗输入法现在支持的是声母简拼和声母的首字母简拼。例如:你想输入“张靓颖",你只要输入"zhly"或者"zly”都可以输入。同时,搜狗输入法支持简拼全拼的混合输入,例如:你输入“srf""sruf""shrfa"都是可以得到‘输入法”的。有效使用声母的首字母简拼可以提高输入效率,减少误打,例如,你输入“指示精神"这几个字,如果你输入传统的声母简拼,只能输入"zhshjsh”,需要输入的字母多而且多个h容易造成误打,而输入声母的首字母简拼"zsjs",能很快得到你想要的词。 2、拆字辅助码 拆字辅助码让你快速的定位到一个单字,使用方法如下: 想输入一个汉字【娴】,但是非常靠后,需要翻页,那么输入【xian】,然后按下【tab】键,在输入【娴】的两部分【女】【闲】的首字母nx,就可以看到只剩下【娴】字了。输入的顺序为xian+tab+nx。独体字由于不能被拆成两部分,所以独体字是没有拆字辅助码 3、笔画筛选 笔画筛选用于输入单字时,用笔顺来快速定位该字。使用方法是输入一个字或多个字后,按下tab键(tab键如果是翻页的话也不受影响),然后用h横、s竖、p撇、n捺、z折依次输入第一个字的笔顺,一直找到该字为止。例如,快速定位【珍】字,输入了zhen后,按下【ta b】,然后输入珍的前两笔【hh】,就可定位该字。又例如“碗”字通常输入拼音后至少要翻3页才能找到该字,但输完qiao的拼音后,按一下Tab,然后先后输入该字的笔画辅助码hp,这个字立刻跳到了第一位。要退出笔画筛选模式,只需删掉已经输入的笔画辅助码即可。 4、U模式笔画输入 U模式是专门为输入不会读的字所设计的。在输入u键后,然后依次输入一个字的笔顺,笔顺为:h横、s竖、p撇、n捺、z折,就可以得到该字,同时小键盘上的1,2,3,4,5也代表h,s,p,n,z,这里的笔顺规则与普通手机上的五笔画输入是完全一样的。其中点也可以用d来输入。例如输入【你】字输入【upspzs】。 5、模糊音 模糊音是专为对某些音节容易混淆的人所设计的。当启用了模糊音后,例如sh<->s,输入“si”也可以出来“十”,输入“shi”也可以出来“四"。 搜狗支持的模糊音有: 声母模糊音:s<->sh,c<->ch,z<->zh,I<->n,f<->h,r<->l 韵母模糊音:an<->ang,en<->eng,in<->ing,ian<->iang,uan<->uang。

数字万年历简易C语言程序源代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; // lcd 控制端 sbit en=P2^2; // lcd 控制端 sbit all=P2^1; // lcd 控制端 sbit s0=P1^5; //时间调节 sbit s1=P1^6; sbit s2=P1^7; sbit voice=P2^7; int nt; sbit DQ=P2^6; sbit DS1302_CLK = P2^3; //实时时钟时钟线引脚sbit DS1302_IO = P2^4; //实时时钟数据线引脚sbit DS1302_RST = P2^5; //实时时钟复位线引脚sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; unsigned char time; #define ads_y 0 #define ads_mo 3 #define ads_d 6 #define ads_w 9 #define ads_h 65 #define ads_m 68 #define ads_s 71 #define DS1302_SECOND 0x80 //写入ds地址宏定义 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C

汇编语言例子

实验三: 1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。编制程序将这三个连续的数据传送到内存TABLE开始的单元。 DATA SEGMENT ARRAY DB 30H,40H,50H 定义数据段 TABLE DB 3 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ARRAY LEA DI,TABLE MOV CX,3 REP MOVSB JMP $ CODE ENDS END START (2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。(不考虑溢出) DATA SEGMENT ORG 2000H DW 1234H ORG 3000H DW 5678H ORG 4000H DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,[2000H] ADD AX,[3000H] MOV [4000H],AX JMP $ CODE ENDS END START 实验四 1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。

DATA SEGMENT NUM1 DW 0012H,0030H,0FC21H ; 数1 NUM2 DW 3E81H,44E9H,6D70H ; 数2 SUM D W 3 DUP(?) ; 结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX,3 LEA SI,NUM1 LEA DI,NUM2 LEA AX,SUM HE: MOV BX,[SI] ADD BX,[DI] MOV [AX],BX INC SI INC DI INC AX LOOP HE MOV AH, 4CH ; 返回DOS INT 21H CODE ENDS END START 2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。;提示用XLAT指令 DATA SEGMENT TABLE DB 0H,1H,2H,3H,4H,5H,6H XX DB 1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE MOV AL,[XX] XLAT MOV DL,AL MOV AH,02H INT 21H JMP $

C语言程序设计-入门源代码代码集合

演示1 #include void print_star(void) { printf("*****************\n"); } void print_welcome(void) { printf("C language,welcome!\n"); } void main() { print_star(); print_welcome(); print_star(); getchar(); } 演示2 #include "stdio.h" int sum(int i,int j) { return(i + j); } void main() { int n1,n2; printf("input 2 numbers:\n"); scanf("%d%d",&n1,&n2); printf("the sum = %d\n",sum(n1,n2)); getchar(); } 演示3 #include "stdio.h" int maxnum(int,int,int); main() { int a,b,c; printf("Please enter 3 numbers:\n"); scanf("%d,%d,%d",&a,&b,&c); printf("Maxnum is %d\n",maxnum(a,b,c));

return 0; } int maxnum(int x,int y,int z) { int max=x; if(y>max) max = y; if(z>max) max = z; return max; } 演示4 #include int s1(int n) { int j,s; s=0; for(j=1;j<=n;j++) s=s+j; return s; } int sum(int n) { int i,s=0; for(i=1;i<=n;i++) s=s+s1(i); return s; } void main() { int n; printf("n:"); scanf("%d",&n); printf("s=%d\n",sum(n)); } 演示5

成人应该怎样快速学拼音打字

成人应该怎样快速学拼音打字 想要学好拼音打字的方法,最好的方法就是勤练,很多成年人都不太会用拼音打字,为了帮助大家更好的学习拼音打字,以下是分享给大家的成人学拼音打字的方法,希望可以帮到你! 01、需要熟悉汉语拼音表。 02、熟悉下键盘的键位分布。 03、下载打字练习软件进行练习,以金山打字通为例。 金山打字通2008具有英文打字、拼音打字、五笔打字、速度测试四大功能模块,可以让用户从零开始逐步变为打字高手,短时间内运指如飞! 英文打字: 分为键位练习(初级)、键位练习(高级)、单词练习和文章练习。在键位练习的部分,通过配图引导以及合理的练习内容安排,帮助用户快速熟悉、习惯正确的指法,由键位记忆到英文文章全文练习,逐步让用户盲打并提高打字速度。 04、拼音打字: 包括音节练习、词汇练习、文章练习。在音节练习阶段不但可以让用户了解拼音打字的方法,还可以帮助用户学习标准的拼音。同时还加入了异形难辨字练习、连音词练习,方言模糊音纠正练习,以及HSK(汉语水平考试)字词的练习。这些练习给初学汉语或者汉语拼音

水平不高的用户提供了极大的方便,同时也非常适合中小学生及外国留学生的汉语教学工作。为拼音录入学习提供了全套的解决方案。 成人学拼音打字的建议选择输入法 现在可以说输入法的种类多种多样。但是如果你不太熟悉拼音打字,小白建议大家选择一个,并且一直使用这一个,这样在使用习惯了之后会让你更加得心应手,不同的输入法毕竟还是有区别的。 熟悉拼音 对于拼音来说,一定要熟悉,这个相对来说是比较容易的,因为我们从刚上学的时候就学会了拼音,如果或多或少有点记忆不清的,那么一定要复习一下,对你的拼音打字会有很大的提升。 了解汉字对应的拼音 光认识汉字是不够的,在知道它念什么的情况下,我们要知道如何去拼,如果用拼音来表达这个汉字,只有清楚了这一点,我们才可以在键盘上很好的打出来。 熟悉键盘 键盘和我们拼音的排列顺序可是完全不一样的,没有什么声母,韵母之分,一定要熟悉键盘字母的排列情况,凡事熟能生巧,一定要多看。 掌握打字的姿势 两只手在键盘上的位置是有姿势要求的,如果你一个手指一个手指的敲击键盘,我们可想而知,那速度得有多慢啊,所以一定要坚持打字的姿势,即便自己不习惯也要让自己去习惯,只有习惯了正确的

汇编语言习题与答案

汇编语言习题与答案 一、填空题:把答案填在题中横线上。 1.8位无符号整数的表示范围为0~255,写成16进制形式为00H~__________;8位有符号整数的表示范围为-128~+127,写成16进制形式为__________~__________。 2.8086/8088分段管理存储空间,但每段容量最大不超过__________。 3.逻辑地址为F000:100的存储单元,其物理地址是__________。 4.用来指示堆栈栈顶的偏移地址的是__________寄存器。 5.若要测试AL寄存器D4、D2、D0位是否都为0,则可使用__________指令语句(含操作数),以产生转移条件。这条指令执行后将利用标志位__________实现转移。 6.若定义:bdata db2dup(1,2,2dup(3),4),则dbata变量前5个单元从低地址到高地址的数据依次是__________。 7.假设varw是一个16位变量,则指令“mov varw,ax”的目的操作数的寻址方式是__________。 二、选择题:在每小题给出的四个选项中,只有一项是符合题目要求的,请把所选项前的字母填在题后的括号 内。 1.对汇编语言源程序进行翻译,形成OBJ文件的是 A.汇编程序 B.连接程序 C.编辑程序 D.调试程序[] 2.下列各个8位二进制数的补码中,真值最大的是 A.10001000 B.11111111 C.00000000 D.00000001[] 3.MASM语句中,表达常数不正确的形式是 A.01101001B B.A346H C.’A’ D.5600[] 4.如果SS=600H,则说明堆栈段物理地址起始于 A.60H B.600H C.6000H D.60000H[] 5.dw50dup(?)预留了存储空间的字节数是 A.25 B.50 C.100 D.200[] 6.下列指令中有操作数在代码段中的是 A.mov ax,34h B.add ax,bx C.inc word ptr[34h] D.cmp ax,[34h][] 7.假设AL=5,要使得AL=0FAH,应执行的指令是 A.not al B.and al,0fh C.xor al,0f0h D.or al,0fh[] 8.设置逻辑段应该采用的一对伪指令是 A.segment/ends B.start/end start C.proc/endp D.macro/endm[] 9.条件转移指令JNE条件是 A.CF=0 B.CF=1

简易水电费管理系统源程序代码

简易水电费管理系统源程序代码 法一: #include #include #include struct member {char no[100]; char name[20]; char password[20]; float wfee; float efee; }memb; void newadd(int n) { int t,i; fseek(fp,0,SEEK_END); printf(">>新添人数:"); scanf("%d",&t); for(i=0;i>输入卡号:"); scanf("%s",a); int i=0; rewind(fp); while(1) { fread(&memb,sizeof(struct member),1,fp); if(feof(fp)||memb.no==a) break; i++; } if(!feof(fp)) { printf(">>卡号:"); printf("%s\n",memb.no); printf(">>姓名:"); printf("%s\n",https://www.360docs.net/doc/6911294495.html,"); printf(">>水费:"); printf("%f\n",memb.wfee);

单片机汇编语言程序编程规范

引言 软件设计更多地是一种工程,而不是一种个人艺术。如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。 分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。 可见,提高软件质量必须降低编码阶段的错误率。如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显著。 本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习惯取舍。 1.排版 规则1 程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB和空格缩进。缩进的目的是使程序结构清晰,便于阅读和理解。 默认宽度应为8个空格,由于Word中为4个空格,为示范清晰,此处用2个代替(下同)。例如: MOV R1, #00H MOV R2, #00H MOV PMR, #PMRNORMAL MOV DPS, #FLAGDPTR MOV DPTR, #ADDREEPROM read1kloop: read1kpage: INC R1 MOVX A, @DPTR MOV SBUF, A JNB TI, $ CLR TI INC DPTR CJNE R1, #20H, read1kpage INC R2 MOV R1, #00H CPL WDI CJNE R2, #20H, read1kloop ;END OF EEPROM 规则2

10招教你用拼音快速打字

除了少数专业地打字员,大部分人都用拼音打字,使用最多地也是最方便地可能就是标准拼音也就是智能了.如果不会用五笔打字,智能用起来确实很方便.而且熟练了也会很快.当然也还可以多学些加快速度地方法吧.这里收集整理了若干帮助条文,加上使用中一些心得,一并放在空间里,给大家方便,自己也方便查阅. 一、这是最简单地,词组. 当要输入“棉袄”一词地拼音“"时,肯定是出不来这个词地,因为字是零声母,不过要是在“”和“”之间输入一个分隔符——‘(即单引号),棉袄就有了,你可以试一试,以此类推,晚安——’,骄傲——’…… 二、快捷输入英文: 无须切换,在中文输入状态下先输入一个”“,然后再敲入你需要地英文就搞定了:——,若需要大写则按. 三、快速输入符号和单位,你只须先输入一个“”,然后接着输入数字—中地任意一个,就可得到不同符号,具体功能如下:输入:得到地符号类型 “”各种常用地和不常用地标点符号 “”各种类型地数字 “”常用符号 “”日语假名 “”注音

“”各种语言地基本字母 “”同上 “”汉语拼音 “”线形特殊符号 四、输入中文小写地数字是件挺麻烦地事,挨个去找很浪费时间.不过,掌握了技巧,它也就没那么难了. 只要先输入一个“”,再加上数字—中地某个你要输入地数,这个数地中文小写就出来了. 智能还提供了单位地快速输入,所用热键同样是“”,采用“单位缩写”,比如要输入“厘米”,则只要键入“”即可.输入“万”、“千”、“百”、“十”等地方法是在其声母前加“”,如输入“千”,只需键入“”就可以. 对一些常用量词也可简化输入,输入“”,按空格(或回车键),将显示“个”;系统规定数字输入中字母地含义为: [个]、 [十,拾]、[百,佰]、[千,仟]、[万]、[亿]、[兆]、[第]、 [年]、[月]、[日]、[吨]、[克]、$[元]、[时]、[分]、[里]、 [米]、[斤]、[度]、[磅]、[微]、[毫]、[秒]、[厘]、[升]

汇编语言完整题库

一.名词解释(本大题共5小题,每小题3分,共15分)试解释下列名词的含义。 1.逻辑地址 2.物理地址 3.标志寄存器 4.存储器寻址方式 5.补码 二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。 1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少? 2.假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的操作数的物理地址为多少? 3.假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏移量为多少? 4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=? 5.对于一个十进制数– 65,其二进制补码表示形式为多少? 三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。 1.PUSH 5588H 2.MOV DS,1720H 3.ADD AX,CL 4.AND AX,[DX] 四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出) 1.阅读如下程序片段 MOV AL,4CH MOV BL,0B5H ADD AL,BL 执行上述程序片段后,(AL)= ,(BL)= , CF= ,OF= ,PF= . 2.阅读如下程序片段 MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH 执行上述程序片段后,(AL)= ,(AF)= ,CF= ,OF= ,PF= . 3.阅读如下程序片段 MOV AL,7EH MOV CL,04H ROL AL,CL 执行上述程序片段后,(AL)= ,(CL)= , CF= ,OF= . 4.阅读如下程序片段 MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX 执行上述程序片段后,(AX)= ,(CF)= , OF= . 5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H MOV BX,0024H LEA BX,[BX] OR BX,0 ADC BX,[BX] 执行上述程序片段后,(BX)= ,(CF)= , OF= . 6.阅读如下程序片段,假设(SP)=0064H MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP CX POP BX 执行上述程序片段后,(AX)= ,(BX)= , (SP)= , 五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分) 1.试编写一程序片段,实现BL高4位与低4位相互交换(7分) 2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数据理解为补码)(8分)

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

史上最牛最完整的汇编语言冒泡排序程序

;题目:编制一个完整的汇编语言程序,从键盘上读入若干个(可以超过十个)十进制数(正数),排序后在屏幕上输出。 ;采用冒泡法排序,综合运用子程序和宏汇编,使程序模块化。 ;程序代码M_DIRECT MACRO STRING ;定义一个宏,调用09 号 DoS功能在屏幕上显示一个字符串 MoV DX,oFFSET AH,O9 21H STRING MoV INT ENDM DATA SEGMENT DIR1 DB 'count of numbers to sort:$ ' ;提示输入要排序的数据的个数 DIR2 DB 'please input sorting numbers:$ '; 提示输入要排序的数据 DIR3 DB 'sorting result:$ ' ;在屏幕上提示排好续的数据 DIR4 DB '*************************$ ' DIR5 DB 'please choose u(up)ord(down):$ ' DIR6 DB 'input error$ ' CoUNT = 1OO WTEMP DW ? ARRAY DW CoUNT DUP(?) ;用来保存输入的数据 CRLF DB 13,1O, '$ ' ;实现回车换行的功能,13→ODH,回车;10→OAH,换行 LEN DW ;保存实际输入的数据的个数 DATA ENDS CoDE SEGMENT MAIN PRoC FAR ASSUME CS:CoDE,DS:DATA START: PUSH DS SUB AX,AX PUSH ;置AX 为O AX

MOV AX,DATA ;将数据段的地址送到DX 中 MOV DS,AX READ: M_DIRECT DIR1 ; 宏调用,在屏幕上提示输入要输入的数据的个数 CALL P_GETNEW ;调用子程序P-GETNEW输入要输入的数据的个 数 MOV CX,AX MOV LEN,AX LEA BX,ARRAY MOV AH,09 ; 调用09 号功能,实现回车换行 LEA DX,CRLF INT 21H ;屏幕提示输入要排序的数据 M_DIRECT DIR2 GETNUMBER: CALL P_GETNEW ; 输入数据并保存到ARRA 丫中 MOV [BX],AX ADD BX ,2 LOOP GETNUMBER CX,LEN SORT: ; 排序程序部分 MOV DEC CX MOV AH,09H LEA DX,CRLF INT 21H M_DIRECT DIR5 COMPARE:MOV AH,01H INT 21H CMP AL, 'U' ;判断是升序排序还是降序排序 JZ

C程序设计大作业(含源代码).doc

面 向 对 象 程 序 设 计 大 作 业 姓名:叶尔凯西 学院(系):计科系 班级:计科系07-1 班 学号: 027

设计本程序的目的: 关于一些并不太复杂的集体来说,一般需要管理集体中的每个人的基本信息的,本程序 专门为一些在校学生的基本信息的管理而设计的,主要目的是通过本程序来实现简单的记录和 查找学生的基本信息; 程序功能简介: 本程序是通过面向对象的最重要的特点“类”来设计出来的,其功能是实现简单的学生基 本信息管理。包括一些要求用户从键盘输入(记录)学生的基本信息、输出学生的基本信息和用 学生的学号来查找学生信息表中的某个学生的基本信息等功能; 程序功能的详细介绍: 本人设计程序时考虑到的很所内容,其中输入输出学生的基本信息是最基本的功能。下面来给大家介绍程序的核心类的构建: ①在程序中共建立了两种类,分别是person 类和 student类。person作为student 类的基类,其内部是如下设计的: class person { public: void SetPersonAddress(char *AddressFromMain); void SetPersonSex(char *SexFromMain); void ShowPersonSex(); void ShowPersonAddress(); private: char Address[25]; char Sex[2]; }; 可以看到,在上面分别声明了四个成员函数和两个数据成员。四个成员函数的作用是对私有数据成员进行访问(包括输入和输出)。所以当建立了一个 person 类之后 就可以通过它的对象来访问该类的数据成员。 下面分别说明每一个成员函数的具体定义: ( 1)设置(输入)人地址的成员函数: void person::SetPersonAddress(char *AddressFromMain) { strcpy(Address,AddressFromMain); } 通过 strcpy把字符指针的内容送入person 类中的数据成员Address 。 ( 2)设置(输入)人性别的成员函数: void person::SetPersonSex(char *SexFromMain) { strcpy(Sex,SexFromMain); }

24个汇编实例小程序

24个汇编小程序 题目列表: 1.逆序输出字符串“BASED ADDRESSING” 2.从键盘上输入两个数,分别放到x,y单元,求出它们的和 3.是编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 7.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 8.求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 9输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 10从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 12有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 13.从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 14.在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f 分别考虑有符号数、无符号数情况) 15.一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 16.设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存

相关文档
最新文档