回 帖 发 新 帖 刷新版面

主题:帮忙修改一下程序,不胜感激!

题目:设在附加段中有一个首地址为series的正数字数组。改数组已按升序排列,数组元素的个数存放在数组的第一个字中。求在数组中查找整数3,如果找到该数,则把3从数组中删除,若找不到则把3插到正确的位置,并且始终保持数组中的一个元素真实地反应数组中元素地个数。
教材中的源程序如下:
estraseg  segment
          series  dw  10,0,1,2,3,4,5,6,7,8,9
          x       dw   ?
estraseg  ends
stackseg  segment  stack
          dw  100  dup  (?)
stackseg  ends
codeseg   segment
main    proc  far
        assume  cs:codeseg,es:estraseg,ds:estraseg,ss:stackseg
start:
        push   ds
        sub    ax,ax
        push   ax
        push   ds
        mov    ax,estraseg
        mov    es,ax
        lea    di,series
        mov    si,di
        mov    dx,di
        mov    ax,3
        mov    cx,[di]
        mov    x, cx
        add    di,2
        cld
        repne  scasw
        je     delete
        mov    [si],0ffffh
        add    si,type series * x
comp:   cmp    [si],ax
        jg     next_inser
        mov    [si+2],ax
        jmp    exit_inser
next_inser: mov  bx,[si]
            mov  [si+2],bx
            sub  si,2
            jmp  comp
exit_inser: inc  dx
            jmp  exit
delete:     jcxz  next_del
loop1:      mov  bx,[di]
            mov  [di-2],bx
            add  di,2
            loop  loop1
next_del:   dec  dx
exit:       pop  ds
            pop  ax
            mov  ah,4ch
            int  21h
main        endp
codeseg     ends
            end   start
但是,经过汇编后提示有错,但我不知道该如何修改,望多多指教
还有一个:ASCⅡ代码表的生成,教材中的程序汇编后也有错
源程序:
asc  macro
    add bl,bl
    add bl,bl
    add bl,bl
    add bl,bl
   end m
dseg segment 
    message1  db'0 1 2 3 4 5 6 7 8 9 a b c d e f $'
    message2  db 13,10,'$'
    message3  db '  $'
dseg ends
cseg segment
    assume cs:cseg,ds:dseg
main    proc  far
start:   mov  ax,dseg
         mov  ds,ax
         xor  bx,bx
         xor  cx,cx
         lea  dx,message1
         mov  ah,9
         int  21h
re_col:  lea  dx,message2
         mov  ah,9
         int  21h
         mov  bl,cl
         asc
         mov  bh,bl
         add  bh,10h
         mov  dl,cl
         add  dl,30h
         mov  ah,2
         int  21h
re_line: lea  dx,message3
         mov  ah,9
         int  21h
         mov  dl,20h
         cmp  bl,dl
         jna  display
         mov  dl,bl
display: mov  ah,2
         int  21h
         inc  bl
         cmp  bl,bh
         jb   re_line
         inc  cl
         cmp  cl,8
         jb   re_col
         mov  ah,4ch
         int  21h
main  endp
cseg  ends
      end  start
         
如果修改,劳驾用其它颜色标注一下,谢谢!

回复列表 (共1个回复)

沙发

asc  macro
    add bl,bl
    add bl,bl
    add bl,bl
    add bl,bl
   [color=FF0000]endm[/color]
   
dseg segment 
    message1  db'0 1 2 3 4 5 6 7 8 9 a b c d e f $'
    message2  db 13,10,'$'
    message3  db '  $'
dseg ends
cseg segment
    assume cs:cseg,ds:dseg
main    proc  far
start:   mov  ax,dseg
         mov  ds,ax
         xor  bx,bx
         xor  cx,cx
         lea  dx,message1
         mov  ah,9
         int  21h
re_col:  lea  dx,message2
         mov  ah,9
         int  21h
         mov  bl,cl
         asc
         mov  bh,bl
         add  bh,10h
         mov  dl,cl
         add  dl,30h
         mov  ah,2
         int  21h
re_line: lea  dx,message3
         mov  ah,9
         int  21h
         mov  dl,20h
         cmp  bl,dl
         jna  [color=FF0000]display1[/color]
         mov  dl,bl
[color=FF0000]display1[/color]: mov  ah,2
         int  21h
         inc  bl
         cmp  bl,bh
         jb   re_line
         inc  cl
         cmp  cl,8
         jb   re_col
         mov  ah,4ch
         int  21h
main  endp
cseg  ends
      end  start

我来回复

您尚未登录,请登录后再回复。点此登录或注册