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

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

[实验目的]

  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.将一个数组中所有数据在在屏幕上显示输出(带符号数显示)

1.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

[实验截图]

相关文章
|
8月前
|
C语言
C 语言实例 - 判断三个数中的最大数
C 语言实例 - 判断三个数中的最大数。
125 36
|
1月前
|
存储 算法 索引
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
|
1月前
|
Python
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
|
17天前
|
数据安全/隐私保护
微机原理||十进制输入、数组中负数个数、字符串比较程序
微机原理||十进制输入、数组中负数个数、字符串比较程序
|
1月前
60.编程统计数组a中正数、0、负数的个数
60.编程统计数组a中正数、0、负数的个数
23 0
|
1月前
|
算法 测试技术 C#
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
|
1月前
|
Python C++ 机器学习/深度学习
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
34 0
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
判断数的奇偶性
判断数的奇偶性
56 0
打印0~100000之间的水仙花数, 水仙花数指一个n位数,其各位数的n次方之和正好等于该数本身
打印0~100000之间的水仙花数, 水仙花数指一个n位数,其各位数的n次方之和正好等于该数本身
88 0
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)
118 0
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)