鱼C论坛

 找回密码
 立即注册
查看: 1459|回复: 0

求高手帮忙看一下我的8086程序为什么显示会乱码了~

[复制链接]
发表于 2014-5-10 09:22:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
RT~而且好像还跳过了一段部分少了一个字符串..
                                  data segment
    ARRAY dw 12ch,13ah,18bh,50dh,60fh,70fh,15ah,10dh,19ch,22bh;定义数据
    N equ 10
    M dw 10D
    Q dw 8D
    ave dw 0
    ave2 dw 0
    string0 db 'the ARRAY is:','$'
    string1 db 0DH,0AH,'the average is:','$'
    string2 db 0DH,0AH,'after buffer the array is:','$'
    string3 db 0DH,0AH,'the max number is:','$'
    string4 db 0DH,0AH,'the min number is:','$'
    string5 db 0DH,0AH,'without max and min the average is:','$'
    data ends
stack segment
    dw 100 dup(0)
    stack ends
code segment
    assume cs:code,ds:data,ss:stack,es:data
start: mov ax,data
       mov ds,ax
       mov dx,offset string0 ;显示提示符
       mov ah,09h
       int 21h      
       lea si,ARRAY
       mov cx,10
s:     call ZH      ;调用子程序,显示未排序的数组
       loop s
      mov dx,offset string1 ;显示提示符,计算此时数组平均值
      mov ah,09h
      lea si,ARRAY
      mov ax,[si]
      mov bx,[si+2]
      add ax,bx
      mov bx,[si+4]
      add ax,bx
      mov bx,[si+6]
      add ax,bx
      mov bx,[si+8]
      add ax,bx
      mov bx,[si+10]
      add ax,bx
      mov bx,[si+12]
      add ax,bx
      mov bx,[si+14]
      add ax,bx
      mov bx,[si+16]
      add ax,bx
      mov bx,[si+18]
      add ax,bx
      cwd
      div M
      lea si,ave
      mov [si],ax
      call ZH       ;调用转换程序
       mov cx,10    ;进行排序
s1:    push cx
       lea SI,ARRAY
       lodsw  ;把SI指向的存储单元读入累加器,LODSW就读入AX中,然后SI自动增加2.其常常是对数组或字符串中的元素逐个进行处理。
P1:    mov bx,ax
       lodsw
       cmp bx,ax
       jl p2
       mov [si-2],bx
       mov [si-4],ax
       mov ax,[si-2]
p2:    loop p1
       pop cx
       loop s1
                ;输出排序后的结果
      mov dx,offset string2
      mov ah,09
      int 21h
      mov cx,10
      lea si,ARRAY
p3:   call ZH
      loop p3

      ;输出最大值
      mov dx,offset string3
      mov ah,09h
      int 21h
      lea si,ARRAY
      add si,18H;定义的是DW最大数排在最后所以要+18取最大
      call ZH
      ;输出最小值
      mov dx,offset string4
      mov ah,09h
      int 21h
      lea si,ARRAY
      call ZH
      ;输出去掉最大最小后的平均值
      mov dx,offset string5
      mov ah,09h
      mov ax,[si]
      mov bx,[si+2]
      add ax,bx
      mov bx,[si+4]
      add ax,bx
      mov bx,[si+6]
      add ax,bx
      mov bx,[si+8]
      add ax,bx
      mov bx,[si+10]
      add ax,bx
      mov bx,[si+12]
      add ax,bx
      mov bx,[si+14]
      add ax,bx
      cwd
      div Q
      lea si,ave2
      mov [si],ax
      call ZH
ZH        proc                        ;转换子程序(SI指针由外部提供,方便选择要显示的东西)
        lodsw
        mov        bx,3                ;数据在十进制时的是三位数所以计数部分BX置三
ZL1:cwd
    div M
    push dx
    dec bx
    jnz ZL1
    mov bx,3

ZL2:pop dx
    add dl,30h
    dec bx
    mov ah,2
    int 21h
    jnz ZL2
    mov DL,20H
    mov ah,2
    int 21h
    ret
    ZH endp
code ends
end start
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-31 04:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表