微机原理||数组排序、求最大数、负数个数程序

[实验目的]

  1. 熟悉8086宏汇编实验环境,包括编辑(NotePad)、汇编MASM、链接LINK、调试debug32、运行等开发环境的使用,学习简单程序调试运行。
  2. 熟悉微机原理,掌握8086/8088CPU内部结构,熟悉8086/8088指令系统。
  3. 熟练掌握汇编语言程序设计方法,通过本实验初步培养计算机逻辑解题能力,熟练掌握有符号数的输入输出方法;掌握选择、循环程序的设计方法,掌握过程设计方法。

[实验要求]

在规定期限独立完成实验内容

  1. 提交实验报告(电子版)
  2.      2.提交相应源程序文件

[实验内容]

按要求编写以下程序:各种进制数显示程序

1.在屏幕上显示输出一个十进制数(无符号数显示)(去掉前面多余的0)

1)输出一个十进制数(去掉前面多余的0)
data    segment
dat1    dw		400
flag    dw     ?
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		mov bx,dat1
		call dec_show
		
		mov ah,4ch
        int 21h

dec_show proc
        push cx
		mov flag,1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		pop cx
		ret
dec_show endp
        
dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
		cmp dl,0
		jnz print
		cmp flag,1
		jz  exit
print:  add dl,30h
        mov ah,2
        int 21h
		mov flag,0
exit:   ret
dec_div endp

code ends
     end begin

2.将一个数组中所有数据在在屏幕上显示输出(无符号数显示)

2)数组中所有数据显示输出(无符号数)
data    segment
arr	    dw     38,28,100,6,92,47,502,32400,605,883
n       dw     10
flag    dw     ?
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		lea si,arr
		mov cx,n
t:		mov bx,[si]
		call dec_show
		call space_show
		add si,2
		loop t

		mov ah,4ch
        int 21h

dec_show proc
        push cx
		mov flag,1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		pop cx
		ret
dec_show endp
        
    

dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
		cmp dl,0
		jnz print
		cmp flag,1
		jz  exit
print:  add dl,30h
        mov ah,2
        int 21h
		mov flag,0
exit:   ret
dec_div endp

space_show	proc
        mov dl,20h
		mov ah,2
		int 21h
		ret
space_show	endp
code ends
     end begin

3.在屏幕上显示输出一个十进制数(带符号数显示)在屏幕上将一个数以二进制、十六进制、十进制(无符号数)分别显示输出

3)十进制数(带符号数显示)在屏幕上将一个数以二进制、十六进制、十进制(无符号数)分别显示输出
data    segment
dat1    dw     0ffh
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		call bin_show
		call hex_show
		call dec_show

		mov ah,4ch
        int 21h

hex_show proc
        mov bx,dat1
        mov cx,4

t2:     push cx
        mov cl,4
        rol bx,cl
        pop cx
        mov dl,bl
        and dl,0fh
        add dl,30h
        cmp dl,39h
        jbe print
        add dl,7
print:  mov ah,2
        int 21h
        loop t2
		ret
hex_show endp

bin_show proc
        mov bx,dat1
        mov cx,16

t1:     rol bx,1
        mov dl,bl
        and dl,01h
        add dl,30h
        mov ah,2
        int 21h
        loop t1
		ret
bin_show endp

dec_show proc
        mov bx,dat1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		ret
dec_show endp
        
dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
        add dl,30h
        mov ah,2
        int 21h
        ret
dec_div endp
code ends
     end begin

4.将一个数组中所有数据在在屏幕上显示输出(带符号数显示)

4)数组中所有数据在在屏幕上显示输出(带符号数显示)
data    segment
arr	    dw    38,-28,100,6,-92,47,502,-32400,605,-883
n       dw     10
flag    dw     ?
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		call arr_show		

		mov ah,4ch
        int 21h

arr_show proc
        lea si,arr
		mov cx,n
t:		mov bx,[si]
		call f_dec_show
		call space_show
		add si,2
		loop t 
        ret
arr_show endp

f_dec_show proc
		and bx,bx
		jns show
		mov dl,'-'
		mov ah,2
		int 21h
		neg bx
show:	call dec_show
		ret
f_dec_show endp

dec_show proc
        push cx
		mov flag,1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		pop cx
		ret
dec_show endp
        
    

dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
		cmp dl,0
		jnz print
		cmp flag,1
		jz  exit
print:  add dl,30h
        mov ah,2
        int 21h
		mov flag,0
exit:   ret
dec_div endp

space_show	proc
        mov dl,20h
		mov ah,2
		int 21h
		ret
space_show	endp
code ends
     end begin

5.求数组元素中最大数并显示(带符号数)

5)求数组元素中最大数并显示(带符号数)
data    segment
arr	    dw     37,-280,3100,6,-92,427,502,30024,-6305,-883
n       dw     10
flag    dw     ?
max     dw     ?
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		call arr_show	
		call crlf
		call findmax	
		mov  bx,max
		call dec_show

		mov ah,4ch
        int 21h

findmax proc
		lea si,arr
		mov ax,[si]
		add si,2
		mov cx,n
		dec n
t2:		cmp ax,[si]
		jge next
		mov ax,[si]
next:	add si,2
		loop t2
		mov max,ax
        ret
findmax endp

arr_show proc
        lea si,arr
		mov cx,n
t:		mov bx,[si]
		call f_dec_show
		call space_show
		add si,2
		loop t 
        ret
arr_show endp

f_dec_show proc
		and bx,bx
		jns show
		mov dl,'-'
		mov ah,2
		int 21h
		neg bx
show:	call dec_show
		ret
f_dec_show endp

dec_show proc
        push cx
		mov flag,1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		pop cx
		ret
dec_show endp
       
dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
		cmp dl,0
		jnz print
		cmp flag,1
		jz  exit
print:  add dl,30h
        mov ah,2
        int 21h
		mov flag,0
exit:   ret
dec_div endp

space_show	proc
        mov dl,20h
		mov ah,2
		int 21h
		ret
space_show	endp

crlf	proc
        mov dl,0dh
		mov ah,2
		int 21h
		mov dl,0ah
		mov ah,2
		int 21h
		ret
crlf	endp
code ends
     end begin

6.冒泡排序法,要求将数组数据输出、排序、再次输出

6)冒泡排序法,要求将数组数据输出、排序、再次输出
data    segment
arr	    dw       38,-28,100,6,-92,47,502,-32400,605,-883
n       dw     10
flag    dw     ?
data    ends

code    segment
        assume cs:code,ds:data
begin:
        mov ax,data
        mov ds,ax

		call arr_show
		call crlf
		
		call sort		

		call arr_show
		call crlf

		mov ah,4ch
        int 21h

sort	proc
		mov cx,n
		dec cx
		mov cx,9
lp1:	push cx
		lea si,arr
lp:		mov ax,[si]
		cmp ax,[si+2]
		jle next
		xchg ax,[si+2]
		mov [si],ax
next:	add si,2
		loop lp
		pop  cx
		loop lp1
		ret
sort	endp

arr_show proc
        lea si,arr
		mov cx,n
t:		mov bx,[si]
		call f_dec_show
		call space_show
		add si,2
		loop t 
        ret
arr_show endp

f_dec_show proc
		and bx,bx
		jns show
		mov dl,'-'
		mov ah,2
		int 21h
		neg bx
show:	call dec_show
		ret
f_dec_show endp

dec_show proc
        push cx
		mov flag,1
        mov cx,10000
        call dec_div
        mov cx,1000
        call dec_div
        mov cx,100
        call dec_div
        mov cx,10
        call dec_div
        mov cx,1
        call dec_div
		pop cx
		ret
dec_show endp
        
dec_div proc
        mov dx,0
        mov ax,bx
        div cx
        mov bx,dx
        mov dl,al
		cmp dl,0
		jnz print
		cmp flag,1
		jz  exit
print:  add dl,30h
        mov ah,2
        int 21h
		mov flag,0
exit:   ret
dec_div endp

space_show	proc
        mov dl,20h
		mov ah,2
		int 21h
		ret
space_show	endp

crlf	proc
        mov dl,0dh
		mov ah,2
		int 21h
		mov dl,0ah
		mov ah,2
		int 21h
		ret
crlf	endp
code ends
     end begin

 [实验截图]

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值