If names
is an array of a string of names stored like this : TomBobPeterJim. 각 이름을 어떻게 분리하고 푸시 할 수 있습니까? 각 이름은 4 바이트를 차지합니까? 이것은 내가 시도한 것이지만 전체 줄을 인쇄합니다.
;printf("Name %d:\t%s\n",x+1,names[x]);
mov ecx, dword x
mov edx, names
lea ebx, [edx+ecx*4]
push ebx
inc ecx
push ecx
push szOut
call _printf
add esp, 12
각 이름의 끝에 0을 넣어야합니다 (먼저 거기에 문자를 저장하십시오). char * names []가 어셈블시 정의되는 예, Microsoft 구문 :
.data
name0 db "Tom"
name1 db "Bob"
name2 db "Peter"
name3 db "Jim"
nameend db 0
szOut db "%d %s",00ah,000h
align 4 ;put on 4 byte boundary
names dd name0, name1, name2, name3, nameend
numnam dd ($-names)/4 - 1 ;in this case, numnam == 4
x dd 0
.code
extern _printf:proc
_main proc near
xor ebx,ebx ;bh == 0
mov ecx, x ;esi = ptr to name
main0:
mov esi, names[ecx*4]
mov edi, names+4[ecx*4] ;edi = ptr to end name
mov bl, [edi] ;save last char
mov [edi],bh ;set zero
push esi ;display name
push ecx
push offset szOut
call _printf
add esp, 12
mov [edi],bl ;restore last char
inc x ;loop till done
mov ecx,x
cmp ecx,numnam
jnz main0
xor eax,eax
ret
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다