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

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

[实验目的]

  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

[实验截图]

相关文章
|
C语言
C 语言实例 - 判断三个数中的最大数
C 语言实例 - 判断三个数中的最大数。
159 36
|
7月前
|
存储 算法 索引
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
|
6月前
|
数据安全/隐私保护
微机原理||十进制输入、数组中负数个数、字符串比较程序
微机原理||十进制输入、数组中负数个数、字符串比较程序
|
7月前
60.编程统计数组a中正数、0、负数的个数
60.编程统计数组a中正数、0、负数的个数
46 0
|
7月前
|
算法 测试技术 C#
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
|
7月前
|
Python C++ 机器学习/深度学习
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
55 0
C/C++每日一练(20230402) 最大数和最小数、数组排序、按要求输入输出
|
程序员
【牛客网】HJ99 自守数、OR86 返回小于 N 的质数个数
目录 HJ99 自守数 OR86 返回小于 N 的质数个数
85 0
P1125 [NOIP2008 提高组] 笨小猴(质数判断和快速排序找字符串最大值,最小值)
P1125 [NOIP2008 提高组] 笨小猴(质数判断和快速排序找字符串最大值,最小值)
66 0
|
人工智能 C++
acwing 712 正数 C++循环得到输入的以及获取数组长度
acwing 712 正数 C++循环得到输入的以及获取数组长度
69 1
|
C++
acwing 716. 最大数和它的位置 int的最大值和最小值
acwing 716. 最大数和它的位置 int的最大值和最小值
94 0