ASM w C++ wyswietlenie napisu, komunikacja z cmd


(G847308) #1

Dopiero zaczynam z asemblerem i mam tylko jedno pytanie czy ten kod poniżej jest dobrze zapisany jeśli nie to co trzeba by zmienić

 

Wyświetlenie napisu

int main()
{
	asm(".section .data\n"
		"LC0: .ascii \"Hello, World!\"\n"
		".section .text\n"
		"pushl %ebp\n"
		"movl $LC0, (%esp)\n"
		"call _printf\n");
}

Komunikacja z cmd

int main()
{
	asm(".section .data\n"
		"LC0: .ascii \"pause\"\n"
		".section .text\n"
		"movl $LC0, (%esp)\n"
		"call _system\n"
}

(fedora24x) #2

Najpierw poćwicz sobie sam Asembler, czym jest jak działa i po co on jest itp…

A jak już opanujesz jego podstawy to zacznij nauke C/C++ a jak umisz go to

dopiero zacznij wstawki Asemblera robić w C/C++

 

Tu masz materiały:

Kurs C++ http://cpp0x.pl/kursy/Kurs-C++/1

kurs ASM http://assembler.ryszki.prv.pl/

Wstawki:

http://informatyka.wroc.pl/node/382

http://students.mimuw.edu.pl/SO/Projekt03-04/temat2-g6/inline.html

 

 

A co do kodu, skompiluj i zobacz czy Ci wywali błedy.  A wywali… wraz z ich opisem.


(G847308) #3

Nie wywala żadnego błędu tylko byłem niepewny czy wszystko jest OK


(fedora24x) #4

a działa po skompilowaniu??


(G847308) #5

Działa :slight_smile:


(fedora24x) #6

nolife więcej wiary w swoje umięjetności! Człowiek uczy sie na swoich błedach…


(nintyfan) #7

Sposób robienia wstawek assemblerowych jest różny na różnych kompilatorach. Chyba nie ma uniwersalnej metody. Taka mała uwaga,


(G847308) #8

Właśnie to zauważyłem, patrzyłem na przykłady jak pisać wstawki i po ich skompilowaniu i uruchomieniu wyskakiwał komunikat że program został zatrzymany. Ale sprawdzałem jak będzie wyglądał kod asemblera generowany z gcc i wpisałem go jako wstawkę i już działał