实验三子程序设计
1、实验目的:
(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。
(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。
(3)子程序设计
2.实验步骤:
(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)
(3)用连接程序TLINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)
(4)运行可执行文件。
观察执行结果,以验证其正确性。
3.实验内容:
(1)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其升序后的结果。
.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中
call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(升序)
dec cx
again2: lea si,array
mov di,cx
again1: mov ax,[si]
cmp ax,[si+2]
jle next1
xchg ax,[si+2]
xchg ax,[si]
next1: add si,2
loop again1
mov cx,di
loop again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(升序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
(2)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其降序后的结果。
.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中
call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(降序)
dec cx
again2: lea si,array
mov di,cx
again1: mov ax,[si]
cmp ax,[si+2]
jge next1
xchg ax,[si+2]
xchg ax,[si]
next1: add si,2
loop again1
mov cx,di
loop again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(降序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
(3)从键盘上输入若干个十进制数(-32767<x<32767),然后利用交换标志优化排序算法排序并输出其降序后的结果。
.model small
.stack 256
.data
count=5
array dw count dup (?)
in_message db "please enter data:$"
out_message db "sort result is :$"
.code
.startup
mov ah,9
lea dx,in_message
int 21h
mov cx,count
mov si,offset array
again: call read ;输入count数据存入array数组中 call dpcrlf
mov [si],bx
inc si
inc si
loop again
mov cx,count ;排序(降序)
dec cx
again2: lea si,array
mov di,cx
mov bx,0
again1: mov ax,[si]
cmp ax,[si+2]
jge next1
xchg ax,[si+2]
xchg ax,[si]
mov bx,-1
next1: add si,2
loop again1
mov cx,di
dec cx
cmp bx,-1
jz again2
mov ah,9
lea dx,out_message
int 21h
mov cx,count ;输出(降序)
lea si,array
again3: mov bx,[si]
call write
call dpcrlf
inc si
inc si
loop again3
mov ax,4c00h
int 21h
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
END
4、实验总结
本次微机原理与接口技术实验是子程序设计实验,通过实验,我能够熟悉汇编语言的编辑、汇编、连接、运行的全过程,了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE命令包含文件的方法,对子程序设计有了进一步理解。
本实验程序有点多,但是通过老师和同学的帮助,顺利完成实验。
实验中运行可执行文件,观察执行结果,以验证其正确性,达到了实验目的。