Multidesk.be » Forums » Programmeren algemeen » assembly probleem,

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door xander op vrijdag 5 maart 2010 om 11:45:20.
xander's avatar
Multiviteit: 263

CODE
  1.  
  2.  
  3. .data
  4.     studienummer: .asciz "Assignment 1 - My first program! \n Studyreference: 4047583\n name: Xander **********\n"
  5.  
  6. .global main
  7.     main:       movl   %esp, %ebp
  8.                 push    $studienummer
  9.                 call    printf
  10.  
  11.     end:        movl    $0,(%esp)
  12.                 call    exit
  13.    
  14.  


de opdracht is eigenlijk heel erg eenvoudig,
we moeten een eerste programma in assembly maken, dat niets meer doet dan het afdrukken van de titel van de assignment, ons studienummer en onze naam, zonder dat het crasht.
deze implementatie geeft echter een fout bij het runnen (illegal instruction)

heeft iemand mijn hoogstwaarschijnlijk extreem domme fout gezien?
Deze tekst werd het laatst bewerkt voor 1.48 % door Wheeldigger op maandag 15 december 2014 om 22:27:34.
^ Reactie #1 geschreven door NightCreature op vrijdag 5 maart 2010 om 18:57:23.
NightCreature's avatar
Multiviteit: 1196
MSc.
Kun je de fout ook plaatsen dat maakt het makkelijker om te debuggen. Trouwens waar jmp je naar main en end. Die eerste instructie die je daar doet lijkt namelijk op hetgeen je doet voor een functie wordt aangeroepen. Ik ben geen assembly expert maar met C++ kijk je afentoe toch wel eens naar de assembly output.

Welke processor is dit voor en welke assembler taal is dit het lijkt op x86 assembler.

Je kan dit trouwens ook in C++ doen en dan een breakpoint in je app plaatsen en dan naar de disassembly kijken.

Hier is een mixed X86 C++ dissassembly van wat je wil
[code]
const char* outputString = "Assignment 1 - My first program! \n Studyreference: 4047583\n name: Xander **********\n";

int main()
{
001813A0 push ebp
001813A1 mov ebp,esp
001813A3 sub esp,0C0h
001813A9 push ebx
001813AA push esi
001813AB push edi
001813AC lea edi,[ebp-0C0h]
001813B2 mov ecx,30h
001813B7 mov eax,0CCCCCCCCh
001813BC rep stos dword ptr es:[edi]
printf("%s", outputString);
001813BE mov esi,esp
001813C0 mov eax,dword ptr [outputString (187004h)]
001813C5 push eax
001813C6 push offset string "%s" (185868h)
001813CB call dword ptr [__imp__printf (1882BCh)]
001813D1 add esp,8
001813D4 cmp esi,esp
001813D6 call @ILT+310(__RTC_CheckEsp) (18113Bh)
return 0;
001813DB xor eax,eax
}
[\code]
Deze tekst werd het laatst bewerkt voor 0.63 % door Wheeldigger op maandag 15 december 2014 om 22:28:01.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #2 geschreven door xander op maandag 15 december 2014 om 20:33:31.
xander's avatar
Multiviteit: 263
Zou het mogelijk zijn mijn naam uit de code weg te halen?

Groeten,
Xander

Opmerking van de crew

Uit beide posten verwijderd :)

Wheeldigger
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen