如何从汇编语言中跳出来

时间:2014-02-05 11:39:43

标签: assembly x86 masm irvine32

我是汇编语言的新手。我是如何在家工作的。我要做的是我必须将第一个数组的内容复制到第二个数组然后我要做的就是得到第二个数组的内容大于50,进入另一个数组并显示它。 到目前为止,我已成功将数组内容复制到另一个内容中。

我在获取大于50的内容时遇到问题。 任何我如何使用JG的那个。但是当我跳跃它不会从实际跳跃的地方回来。

这是我迄今为止所做的代码。

; Description:
; 
; Revision date:

INCLUDE Irvine32.inc
.data
mymsg BYTE "Elements of array2 are :",0dh,0ah,0
mymsg2 BYTE "Moving elements greater than 50 in other array :",0dh,0ah,0
array1 DWORD 1, 3, 5,7,11,12,14,15,19,72,45,43,70,89,100
array2 DWORD 15 dup(?)
array3 Dword ?
.code
main proc




Mov esi, Offset array1
mov edi,offset array2
mov ecx,15
L2:
mov eax,[esi]
add esi,4
mov [edi],eax
add edi,4

loop L2



mov edi,offset array2
mov  edx,offset myMsg
    call WriteString
mov ecx,15

L3:
Mov eax,[edi]   
call writedec           
Add edi,4
call crlf

loop L3

mov  edx,offset myMsg2
     call WriteString

mov esi,offset array2

mov ecx,15
L4:
mov eax,[esi]
add esi,4
cmp eax,50
JG lable1
loop L4

lable1:
mov edi,offset array3
mov [edi],eax
add esi,4
call writedec
call crlf






    exit
main ENDP

END main`

1 个答案:

答案 0 :(得分:0)

L4:
  x=*second_ptr;
  second_ptr++;
  if(x>=50) goto label1;
  if(--ecx) goto L4;
label1:
  *third_ptr=x;
  print(x);
  goto L4;

我认为在复制和打印第三件事之后,你需要回到循环的顶部。我认为你的代码还有其他问题,但是对于你的具体问题,你必须在代码执行路径需要回到循环顶部的任何地方都有“循环L4”。那个或分支回到循环的结尾或将其变成一个调用而不是一个JG。

L4:
  x=*second_ptr;
  second_ptr++;
  if(x>=50) goto label1; 
less_than:
  if(--ecx) goto L4;
  goto jump_over
label1:
  *third_ptr=x;
  print(x);
  goto less_than;
jump_over: