毕业论文-汇编语言课程设计
实验时间:2004.11
实验地点:计算机楼四楼 实验内容:
一、编写一个汇编程序,要求把一个文件当中的小写字母转换成大写字母,其它字母不变。 流程图如下:
:
程序:
.stack 64 .data pathnam db handle dw ? inprec db 100 dup(?) .code begin:
push ds sub ax,ax push ax
mov ax,@data mov ds,ax lea dx,pathname mov ax,3d02h int 21h
mov handle,ax mov ah,3fh mov bx,handle
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
mov cx,100 lea dx,inprec int 21h
mov ah,3eh mov bx,handle int 21h mov si,0
loop1: cmp inprec[si],97d jb hello
cmp inprec[si],122d jg hello
sub inprec[si],32 hello: inc si dec cx
cmp cx,0 je endchange jmp loop1 endchange:
mov ax,3d01h lea dx,pathnam int 21h
mov bx,handle
mov ah,40h lea dx,inprec mov cx,100 int 21h
mov ah,3eh mov bx,handle int 21h end begin
运行结果:创建一个名为name的文本文件夹,输入内容为abcdefg并保存,运行改程序,再打开name文件夹,发现文件内容以变为ABCDEFG,符合实验结果要求。
二、编写一汇编程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 算法思想为:
十六位二进制数保存在BX中,对BX中的二进制数循环左移,每次移一位,然后把BL中的二进制数送给AL,再对AL的前7位进行屏蔽,只留一位原本是最高位的那位二进制数,它要么为1,要么为0.然后把AL中的这位二进制数转换为十进制数,并且输出.由于AL高7位都为0,所以转换为十进制后,仍然要么为1,要么为0,并且与那位二进制数相对应.这样循环做16次,就把整个BX中的二进制数都显示出来了. 流程图如下:
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
程序为:
bin db hex db 4 dup(?)
mess db "input the hex num:",'$' x db 2 datarea ends
prognam segment ;define code
main proc far
assume cs:prognam,ds:datarea start:
push ds sub ax,ax push ax
mov ax,datarea mov ds,ax lea dx,mess
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
mov ah,09 int 21h mov si,1 mov bx,1 rotate:
mov ah,1 int 21h mov dl,al sub al,48d cmp al,9d jg next jmp all next:
sub al,39d all:
mov cx,4d cbw
and ax,00FFh add bx,4 mov di,bx loop1: div x
add ah,48d mov bin[bx],ah sub bx,1 and ax,00FFh loop loop1 add di,1
mov bin[di],20h mov bx,di add si,1 cmp si,5 jnz rotate
lea dx,bin mov ah,09h int 21h ret main endp prognam ends end start 运行结果:
input the hex num:ef56
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
1110 1111 0101 0110
三、从键盘输入数N,用递归方法求函数FIB(N), 当N=0,1时,FIB=1 ;当N>=2时,FIB=FIB
(N-1)+FIB(N-2),结果用十进制输出。 流程图如下:
mess2 db 13,10,'FIB=$' mess3 db 'input error! $' datarea ends
;********************************************* prognam segment
;--------------------------------------------- main proc far
assume cs:prognam,ds:datarea start:
push ds sub ax,ax push ax
mov ax,datarea mov ds,ax lea dx,mess1
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
mov ah,09 int 21h mov bx,0 newchar:
mov ah,01h int 21h cmp al,13 je lee01 sub al,30h jl error cmp al,9d jg error cbw
xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar error:
lea dx,mess3 mov ah,09 int 21h ret lee01:
mov num,bx mov si,0 mov ax,0 call FIBN lea dx,mess2 mov ah,09 int 21h push bx push cx push si push di
mov bx,grade[si] mov cx,10000d call dec_div mov cx,1000d call dec_div mov cx,100d call dec_div mov cx,10d
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
call dec_div mov cx,1d call dec_div pop di pop si pop cx pop bx ret
main endp
;----------------------------------------------------------------- dec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h ret dec_div endp
;------------------------------------------------------- FIBN proc near cmp num,1 je lee02 dec num call FIBN
mov ax,grade[si] mov bx,grade[si-2] mov grade[si-2],ax add ax,bx
mov grade[si],ax jmp lee03 lee02:
mov grade[si],1 add si,2
mov grade[si],1 lee03: ret FIBN endp
;--------------------------------------------------------- prognam ends
;********************************************************** end start
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
运行结果: input number n: 20
FIB=10946 D:\>digui
input number n: 10
FIB=00089 D:\>digui
input number n: 8
FIB=00034
四、编写一个程序,对键盘输入的数字进行排序,并在终端上显示出来。
⑴有用的模板为:模块名:main 为总控模块
输入:从键盘输入一个班的学生成绩。
输出:根据输入的学生成绩,按分数的高低进行排序。 ⑵ 模块名: input
输入:输入学习成绩,用空格隔开,以回车结束。 输出:把一个班的学习成绩存入grand数组。 功能:接受一个班的学习成绩。
调用子模块decibin 调用子模块crlf
⑶ 模块名:sort
输入:从grade 数组。
⑷ 模块名:output
输入:从grade
功能:调用,以便把rank数组中的二进制数转化成十进制数并在终端上显
示出来。
调用子模块crlf完成回车、换行功能。
⑸ 模块名:decibin
输入:从键盘上取得一个十进制数。
输出:把该数转化成二进制数并存入BX寄存器。
功能:把从键盘取得一个十进制数转化成二进制数,并将该数并存入BX寄存器。 ⑹ 模块名:crlf
输出:向终端发出回车、换行符。 功能:完成一次回车、换行符。 ⑺ 模块名:binidec
输入:从BX寄存器中取得一个二进制数。 输出:在终端的显示一个十进制数。
功能:把BX寄存器中的二进制数转换成十进制数,并在终端屏上显示出来。 调用子模块dec—div用来做除法运算并显示字符。
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
流程图如下:
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
程序为:datarea segment grade dw 50 dup(?) count dw ?
mess1 db 'the number:$'
mess2 db 13,10,'inputerror!',13,10,'$' mess3 db 'sorted num:$' datarea ends prognam segment main proc far
assume cs:prognam,ds:datarea start:
;set up stack for return push ds sub ax,ax push ax
;set DS register to current data segment mov ax,datarea mov ds,ax
;MAIN PART OF PROGRAM GOES HERE call input call rankp call output ret main endp
input proc near lea dx,mess1 mov ah,09 int 21h
mov si,0 mov count,0 enter:
call decibin inc count cmp dl,',' je store cmp dl,13 je exit2 jne error store:
mov grade[si],bx add si,2 jmp enter error:
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
lea dx,mess2
mov ah,09
int 21h
exit2:
mov grade[si],bx
call crlf
ret
input endp
rankp proc near
mov ax,datarea
mov ds,ax
mov cx,count
dec cx
loop1:
mov di,cx
mov bx,0
loop2:
mov ax,grade[bx]
cmp ax,grade[bx+2]
jge cotinue
xchg ax,grade[bx+2]
mov grade[bx],ax
cotinue:
add bx,2
loop loop2
mov cx,di
loop loop1
ret
rankp endp
output proc near
lea dx,mess3
mov ah,09
int 21h
mov si,0
mov di,count
next1:
mov bx,grade[si]
call binidec
cmp di,1
je next3
mov dl,','
mov ah,02
int 21h
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
next3:
add si,2
dec di
jnz next1
call crlf
ret
output endp
decibin proc near
mov bx,0
newchar:
mov ah,1
int 21h
mov dl,al
sub al,30h
jl exit1
cmp al,9d
jg exit1
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit1: ret
decibin endp
binidec proc near
push bx
push cx
push si
push di
;控制输出数据的位数
mov cx,10d
call dec_div
mov cx,1d
call dec_div
pop di
pop si
pop cx
pop bx
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
ret
binidec endp
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
dec_div endp
crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
prognam ends
end start
运行结果:
the number:23,53,42,23,21,76,89,26
sorted num:89,76,53,42,26,23,23,21
D:\>paixu
the number:86,26,48,26,37,26,46,53
sorted num:86,53,48,46,37,26,26,26
实验总结:这是我们第一次编写汇编语言,虽然所选的题目都不是很难,用原来学习的C语言等可以容易的编写出程序来,但是要求我们用汇编写还是碰到了不少困难。首先是对汇编语言的格式不太了解,其次对于汇编语言和其他语言的区别不是很清楚,所以在编写过程中遇到了很多问题,也有不少错误,在老师和同学们的帮助下都一一改正过来,最后得到了正确的程序。通过这几次试验,我还是学到了比较多的东西.在刚学汇编语言时,配合实践一起,这样加深了我对汇编语言知识的理解和应用,不过做这几次试验时,明显的感觉到自己汇编免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版
语言知识的贫乏,这也是因为我们现在学的汇编语言知识比较少的缘故.。因此在以后的学习中,我们不仅要加深理论知识的学习更要增强自己的动手变成能力。只有理论和实践相结合才能更好的掌握这门语言。
免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版