操作系统汇编语言实现彩色输出斐波拉契数列
来源:互联网 发布:和弓淘宝 编辑:程序博客网 时间:2024/06/05 09:13
2015-04-01:
大二下,计算机与操作系统课
实验要求:系统请求输入1个正整数,用户输入要显示的项的个数,回车键结束输入;显示指定数目的斐波那契数列项,要求各个项用空格隔开,并用不同颜色显示(不限制颜色的种类、数目) 。
当时不知道同学们都拿着学长学姐的上一届实验代码,只有我一个人默默地啃了一个周末做出来了(第一次做masm实验啊。。),等我做完了,朋友把学长的代码发给我,我的内心是崩溃的。不过能自己摸索,学到了很多知识,(虽然现在过了差不多一年不太记得了),也是蛮高兴的。
下给出源码。(原谅我过了一年已忘记当时的心路历程了,只能给出结果。。。)
sseg segment para stack dw 256 dup(?)sseg ends;dseg segmentmess db 'Input your number:$'result0 db 'The result is:$'space db ' $'output1 db '1',0num db ?,0odd db 'y'isEnd db 'y'MESS1 DB 0dh,0ah,'$'dseg ends;cseg segment assume cs:cseg,ds:dsegstart: mov ax,dseg mov ds,ax mov dx,offset mess mov ah,9 int 21h call getInt; call newline push ax mov dx,offset result0 mov ah,9 int 21h pop ax cmp al,1 je result1 cmp al,2 je result2 ; mov bx,offset output1 call printColor call printColor mov bx,1 mov cx,1; pop axloopIt: push ax cmp al,2 jbe EndIt mov dx,cx mov cx,bx add bx,dx mov ax,bx call printInt pop ax sub al,1 jmp loopItresult1: MOV BX, OFFSET output1 call printColor jmp endItresult2: mov bx,offset output1 call printColor call printColor jmp endItendIt: mov ah,4ch int 21h;printColor proc push axpush bxpush cxpush dxL: MOV AL, [BX] ;取来字符.CMP AL, 0 ;为0吗? JZ ChangeColor ;为0就结束. MOV AH, 3 ;找光标位置. INT 10H MOV AH, 2 ;设定光标位置. INC DX INT 10H;;;;;;;;;;;;;;cmp dl,76 jb next1 push ax push dx MOV DX,OFFSET MESS1 MOV AH,9 INT 21H pop dx MOV AH, 3 ;zhao光标位置. INT 10H MOV AH, 2 ;设定光标位置. INC DX INT 10H pop ax;;;;;;;;;;;;;;next1:push BX MOV AH, 9 ;显示字符.; ;AL为字符的ASCII mov cl,[odd]cmp cl,'y'je Red MOV BL, 2 ; 绿色的字符.jmp nextRed:mov bl,4next: MOV CX, 1 ;显示一个字符. INT 10H ;显示吧.pop BXinc BXjmp LChangeColor: mov cl,[isEnd] cmp cl,'n' je EXITmov cl,[odd]cmp cl,'y'je Changemov [odd],'y'jmp AddSpaceChange: mov [odd],'n';;;;;;;;; AddSpace: MOV BX,offset space MOV AL, [BX] ;取来字符. MOV AH, 3 ;找光标位置. INT 10H MOV AH, 2 ;设定光标位置. INC DX INT 10H MOV AH, 9 ;显示字符.; ;AL为字符的ASCII MOV BL, 2 ; 绿色的字符. MOV CX, 1 ;显示一个字符. INT 10H ;显示吧.EXIT:pop dx pop cx pop bx pop ax retprintColor endpnewline proc push ax push dx mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop dx pop ax retnewline endpprintSpace proc push axpush bxpush cxpush dx mov dx,offset spacemov ah,9int 21hpop dx pop cx pop bxpop axretprintSpace endp printInt proc push ax ;保存寄存器的值(一定要的) push bx push cx push dx mov dx,'0'push dxmov [isEnd],'n'loopInt:cmp ax,10jb loopInt2 mov dx,0 ;被除数高16位置0 mov cx,10d ;除数为10d div cx push dx ;先保存余数 jmp loopInt;loopInt2:mov dl,al ;显示商(即十进制二位数的十位) add dl,30h ;转换成Ascii码 pop axcmp ax,'0'jnz nextlinemov [isEnd],'y'nextline: push ax mov [num],dlmov bx,offset numcall printColorpop axcmp ax,'0'je IntEndjmp loopInt2IntEnd: pop dx ;恢复寄存器的值 pop cx pop bx pop ax ret ;子程序返回 printInt endp GetInt proc push bx push cx push dxmov ax,0mov bx,0Intloop: push ax mov cl,10d ;乘数为10d mul cl ; mov bl,al;保存ax的值 pop ax mov ah,0push ax mov ah,1int 21hmov ah,0cmp al,13je EndIntpop dxsub al,30h ;转化为数字add bl,al ;加上mov al,bl jmp Intloop;EndInt: pop ax mov ah,0 pop dx pop cx pop bx ret ;子程序返回 GetInt endp cseg ends end start
0 0
- 操作系统汇编语言实现彩色输出斐波拉契数列
- 汇编语言 输出彩色字体
- 汇编语言实现倒序输出
- NASM汇编实现彩色输出
- Linux C 编程 实现彩色文字输出
- 利用正则实现彩色控制台输出
- 使用shell输出彩色日志简单实现
- 输出斐波拉契数列
- mips汇编语言实现Fibonacci(斐波那契)数列
- 利用Python输出斐波拉契数列
- 汇编语言实现在80*25彩色字符模式下显示字符串
- 输出数列
- 递归实现斐波拉契数列
- java实现斐波拉契数列
- 斐波拉契数列-java实现
- java实现 斐波拉契数列
- 汇编 输出彩色字体
- printf 输出彩色字体
- [bzoj3172][TJOI2013]单词
- Android 强制下线功能
- MySQL 主键与索引的联系与区别分析
- Vim使用总结
- Android 源码系列之<一>从源码的角度深入理解ImageView的ScaleType属性
- 操作系统汇编语言实现彩色输出斐波拉契数列
- java中volatile关键字的含义
- mysql 查询一张表没有存在在另一张表的数据
- dnsmasq在DRBL中的使用
- tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?
- Codeforces Zip-line 650D 345Div1D(LIS)
- 压缩与解压指定目录下的指定文件
- 获取gridview当前选中行的内容
- 在字符串中存储二进制数据的方法和要点