回 帖 发 新 帖 刷新版面

主题:[讨论]这个问题怎么解决

编写一个完整汇编程序,往按字典顺序存放的等长字符串表 (每个串长4个字符,各串中间以空格分隔,表以00h结尾)中插入一个新的串,并保持字典顺序。

  做了几天还是没有成功,现请高手帮帮忙!谢谢!

.model small
.data
string db 4 dup(?),' ','abcd',' ','efgh',' ','mnop',' ','$'
count  equ 3
insert db 'ijkl'
info1   db 'no insert string are:','$'
info2   db 0dh,0ah,'inserted string are:','$'
.code
.startup
   lea di,string
   lea si,insert
   mov al,[si]
   mov cx,count
   lea dx,info2
   mov ah,9
   int 21h 
   std
compare:
   .if [di] == '$'
     mov cx,4
     rep movsb
     jmp putOut
   .endif
   add di,5
   cmp al,byte ptr[di]
   ja  next
     push cx
     mov cx,4
     mov di,di-5
  cld
     REP movsb
     pop cx
next:
   push cx
   mov cx,4
   mov si,di+5   ;移串
   CLD
   rep movsb
   pop cx
   
loop compare

putOut:
   lea dx,info2
   mov ah,9
   int 21h
   
.exit 0
end
   

这是我做的,但出错了,

回复列表 (共2个回复)

沙发

核心代码:
len  equ 4
step equ len+1
mov cx,len
mov di,offset string
add  di,step    
mov si,offset insert

.while ( byte ptr [di-1] !='$' )
  .if ( byte ptr [si]> byte ptr [di] )
    把(di,di-3)的4个字符移动到(di-5,di-2)
    add di,step
  .else
    rep movsb
    .break;
  .endif
.endw

.if (byte ptr [di-1] == '$')
  rep movsb
.endif
................

代码大概如上,进一步的优化工作自己完成把.


板凳

谢谢
问题解决了,不知道怎么搞的

cx 设了
si ,di 也设了
但对rep movsb 没有一点用.

我来回复

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