注册 登录
编程论坛 汇编论坛

新手求解,觉得汇编好难好难~~~~~~~~~~~~~~~

qiu1123 发布于 2011-06-12 22:38, 728 次点击
题目。在内存已定义好一个容量为20B的数据组,请将数组中为0的项找出,统计0的个数,并删除数组中所有为0的项,将后续项向前压缩。。。
我做的··
START:
     BUF DB 12,21,32,54,0,65,32,65,26,0,32,55,88,97,46,2,9,84,25,96;
     MOV AX,DATAS
     MOV DS,AX
     MOV CX,20
     MOV BX,OFFSET BUF1
COMP:MOV AL,[BX]
     CNP AL,0
     INC BUF2
AGAIN:DX=CX
      [BX]=[BX+8]
      INC  8X
      LOOP AGAIN
      CX=DX
LOOP  CONP
      MOV AH,4CH
      INT 21H

我自己也知道很多错的~~~求给个正确的
4 回复
#2
qiu11232011-06-12 22:42
自己坐沙发,不客气了
#3
ansic2011-06-13 11:01
做过的练习,改了一下。
程序代码:

assume    cs:code,ds:data
data    segment
mem    db    1,2,0,0,0,0,0,0,0,3,0,0,4,0,5,6,0,0,0,0,0,7
count    db    0
data    ends
code    segment
start:
    mov ax,data
    mov ds,ax

    mov bx,offset mem
    mov cx,lengthof mem
    push bx
    push cx
;
    mov ah,2
d1:
    mov dl,[bx]
    add dl,30h
    int 21h
    mov dl,20h
    int 21h
    inc bx
    loop d1

    mov dl,13
    int 21h
    mov dl,10
    int 21h

    pop cx
    pop bx
   
s1:
    push cx
    mov al,[bx]
    cmp al,0
    jz move
    jmp jx   
move:
    inc count
    mov si,bx
s2:
    mov al,[si+1]
    mov [si],al
    inc si
   
    loop s2
    dec bx
jx:
    pop cx
    inc bx
    loop s1
;
    mov cx,bx
    mov bx,offset mem
    mov ah,2
d2:
    mov dl,[bx]
    add dl,30h
    int 21h
    mov dl,20h
    int 21h
    inc bx
    loop d2
;
    mov ah,2
    mov dl,13
    int 21h
    mov dl,10
    int 21h
;
    mov al,count
    cmp al,9
    ja d3
    mov dl,al
    add dl,30h
    int 21h
    jmp done
d3:
    mov ah,0
    mov bl,10
    div bl
    push ax
    mov ah,2
    mov dl,al
    add dl,30h
    int 21h
    pop ax
    mov dl,ah
    mov ah,2
    add dl,30h
    int 21h   
done:   
    mov ah,4ch
    int 21h
code    ends
end    start

运行结果:
只有本站会员才能查看附件,请 登录


[ 本帖最后由 ansic 于 2011-6-13 11:02 编辑 ]
#4
obstratiker2011-06-13 11:10
assume cs:code

datas segment
BUF DB 12,21,32,54,0,65,32,65,26,0,32,55,88,97,46,2,9,84,25,96
buf2 db    lengthof BUF dup(?)
count db 0
datas ends


code segment
START:
     
     MOV AX,DATAS
     MOV DS,AX
    mov dx,0
     MOV CX,lengthof BUF
    mov si,offset buf2
     MOV BX,OFFSET BUF

COMP:MOV AL,[BX]
     CMP AL,0
    jne AGAIN

      INC  bx
    inc dx
   
AGAIN:
    mov ax,[bx]
    mov [si],ax
    inc si
    inc bx
    loop COMP

    mov count,dl

      MOV AH,4CH
      INT 21H

code ends
end start


上面这个程序能实现你的功能,但改动的比较大了

你的程序中,buf1没有定义,是buf啊
你把数据定义在代码段了,datas就无定义了啊
汇编中每条语句后边不用加 ;  
也没有 dx = cx 这样的赋值语句 ,赋值都用 mov dx,cx
另外你的循环好像实现不了你的功能

加油,我们都觉得汇编难,学进去就好了
#5
qiu11232011-06-13 15:17
真是谢谢了~~话说我学了半年,上课都是看小说的,上面那个还是自己看着乱编的。。
1