Q:

Ассемблер, стек и строки.

Здраствуйте, уважаемые программисты.
Сейчас я осваиваю ассемблер (а конкртено AT&T синтаксис под системой Ubuntu 10.10), и у меня возник вопрос, почему этот код работает?

.data  
msg:  
 .string "Hello, world!\n"  
.text  
.globl main  
main:  
 pushl $msg #вот здесь-то у меня и возникает вопрос  
 call printf  
 addl $4, %esp

Так вот, вопрос в том, почему я заталкиваю на стек 4 байта, в то время, когда мое сообщение занимает больше байт?

A:

Ты в стек заталкиваешь не слово, а адрес по которому расположена метка msg. Размер данных, помещаемых в стек определяется суффиксом l(push) - двойное слово, 4 байта.
Вот хорошая статья, сам учусь по ней )

