从程序集中的数组中删除数字

时间:2013-11-06 17:16:20

标签: arrays assembly x86 masm32

我正在尝试使用过程从数组中删除特定数字。 我的方法工作正常,但唯一的问题是,它只在第二次工作。 换句话说,如果用户选择:1 2 3 4 60 9作为他的阵列 该方法将打印1 2 3 4 60 9然后将询问用户是否要再次尝试。 当用户选择再次尝试时,用户将删除该号码,例如,它将删除60并打印  1 2 3 4 9

deleteproc proc
  fourth:
 lea esi, array ; pointer
 mov ecx, lengthof array ; move the length of the array to ecx

  target:
 mov eax,[esi]
  call writeDec ; print the array
  call crlf
 add esi,type array ; add the type of the array to esi
 loop target
  call crlf

  lea esi, array ; pointing to array
  mov ecx, lengthof array ; moving the length of array to ecx
 mov eax, 60 ; moving 60 to eax in order to search for it
 mov count, 0 ; clear count variable
 start44:
  cmp eax, [esi] ; check if 60 is in [esi] (Array)
 je find ; if it was found go to find lable 
 add esi, type array ; add the type of the array in esi
 inc count ;  increment count
 loop start44
 find:
 add esi,type array ; add the type of the array to esi
 mov eax,[esi] ;move the array to eax after deleting it
 sub esi,type array
 mov [esi],eax
    add esi,type array
inc count
  cmp count,10
 jb find


  call readdec ; write 1 to continue
  cmp eax, 1
  JE fourth ; if the user chose 1 it goes to fourth lable again
  JNE stop ; if the user chose another number it will stop

我很确定代码在没有目标标签的情况下工作,因为我有很多选项,当我使用其他选项删除目标标签时,它有效。但是,每当我尝试使用目标标签打印它时,它在第一次不起作用,但它在第二次正常工作! 我怎样才能让它第一次运作? 有什么想法吗?

我正在使用MASM,我的代码中的所有内容都是dword 这是一个10元素的数组

0 个答案:

没有答案