汇编题目,急求!!

时间:2021-06-02 19:27:19
汇编课留的题目,一脸懵逼的小白求教
1.在A1单元定义10个两位16进制无序数字,求出最大值,存放在A2开始的存储区
2.将1中数据进行排序,并放在原来的地方
3.有一个存放10个数据的数组,数据自存,至少有两个以上0存在,试编制一个程序,删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上零

急求,感谢各位大神!!

1 个解决方案

#1


[data segment
     a1 dw 12,34,56,78,90,21,43,65,87,9
     c equ ($-a1)/2
     a2 dw 0
data ends

assume cs:cseg,ds:data
cseg segment
start:
      mov ax,data
      mov ds,ax
      mov cx,c
      dec cx
      mov bx,2
      mov ax, a1[0]
$8:
      cmp ax,a1[bx]
      ja $9
      mov ax,a1[bx]
$9:
      inc bx
      inc bx
loop $8
      mov a2,ax
      call print
      mov ah,0eh
      mov al,0dh
      int 10h
      mov al,0ah
      int 10h
      mov cx,c*2
      dec cx
      dec cx
$0:
      mov bx,0
$2:
      mov ax,a1[bx]
      cmp ax,a1[bx+2]
      ja$1
      xchg ax,a1[bx+2]
      mov a1[bx],?ax
$1:
      inc bx
      inc bx
      cmp bx, cx
      jl $2
      dec cx
      dec cx
      jg $0
      mov cx,c
      mov bx,0
$3:
      mov ax,a1[bx]
      call print
      mov ax,0e20h
      int 10h
      inc bx
      inc bx
loop $3
      mov ah,4ch
      int 21h
print proc near
      push cx
      push bx
      xor cx,cx
      mov bx,10
Q0:
      xor dx,dx
      div bx
      xor dx,0e30h
      push dx
      inc cx
      cmp ax,0
      jnz Q0
Q1:
      pop ax
      int 10h
loop Q1
      pop bx
      pop cx
ret
print ends
cseg ends
end start

在网上看到的一位大神的解答,但是看得不是很明白。。。]

#1


[data segment
     a1 dw 12,34,56,78,90,21,43,65,87,9
     c equ ($-a1)/2
     a2 dw 0
data ends

assume cs:cseg,ds:data
cseg segment
start:
      mov ax,data
      mov ds,ax
      mov cx,c
      dec cx
      mov bx,2
      mov ax, a1[0]
$8:
      cmp ax,a1[bx]
      ja $9
      mov ax,a1[bx]
$9:
      inc bx
      inc bx
loop $8
      mov a2,ax
      call print
      mov ah,0eh
      mov al,0dh
      int 10h
      mov al,0ah
      int 10h
      mov cx,c*2
      dec cx
      dec cx
$0:
      mov bx,0
$2:
      mov ax,a1[bx]
      cmp ax,a1[bx+2]
      ja$1
      xchg ax,a1[bx+2]
      mov a1[bx],?ax
$1:
      inc bx
      inc bx
      cmp bx, cx
      jl $2
      dec cx
      dec cx
      jg $0
      mov cx,c
      mov bx,0
$3:
      mov ax,a1[bx]
      call print
      mov ax,0e20h
      int 10h
      inc bx
      inc bx
loop $3
      mov ah,4ch
      int 21h
print proc near
      push cx
      push bx
      xor cx,cx
      mov bx,10
Q0:
      xor dx,dx
      div bx
      xor dx,0e30h
      push dx
      inc cx
      cmp ax,0
      jnz Q0
Q1:
      pop ax
      int 10h
loop Q1
      pop bx
      pop cx
ret
print ends
cseg ends
end start

在网上看到的一位大神的解答,但是看得不是很明白。。。]