602968956 发表于 2014-5-10 09:22:56

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

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,
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      cwd
      div M
      lea si,ave
      mov ,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 ,bx
       mov ,ax
       mov ax,
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,
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      mov bx,
      add ax,bx
      cwd
      div Q
      lea si,ave2
      mov ,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
      
页: [1]
查看完整版本: 求高手帮忙看一下我的8086程序为什么显示会乱码了~