Notas de Aula - MAC 211 - Laboratório de Programação
Aula anterior (aula 4)
Aula 5 - 9/3/2010
- Retomando o nosso primeiro programa completo em linguagem
de montagem. (retirado do Linux Assembly
HOWTO, página 24)
- com sintaxe
Intel
- section
.text
;section
declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They
conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our
string to stdout
mov edx,len ;third argument:
message length
mov ecx,msg ;second argument:
pointer to message to write
mov ebx,1
;first argument: file handle (stdout)
mov eax,4
;system call number (sys_write)
int
0x80 ;call kernel
;and exit
mov
ebx,0 ;first syscall argument:
exit code
mov eax,1
;system call number (sys_exit)
int
0x80 ;call kernel
section
.data
;section
declaration
msg
db "Hello,
world!",0xa ;our dear string
len
equ $ -
msg
;length of our dear string
Sintaxe Intel vs. Sintaxe AT&T
- Até agora estávamos falando apenas da sintaxe Intel (que é
bem mais limpa e agradável).
- Mas há também a sintaxe AT&T que é aceita por
algumas ferramentas.
- O programa de exemplo na sintaxe AT&T fica da
seguinte forma (descubra as diferenças):
- .text
# section declaration
# we must export the entry point to the ELF linker or
.global _start # loader. They
conventionally recognize _start as their
# entry point. Use ld -e foo to override the default.
_start:
# write our
string to stdout
movl $len,%edx # third argument:
message length
movl $msg,%ecx # second
argument: pointer to message to write
movl
$1,%ebx # first argument: file handle
(stdout)
movl
$4,%eax # system call number (sys_write)
int
$0x80 #
call kernel
# and exit
movl
$0,%ebx # first argument: exit code
movl
$1,%eax # system call number (sys_exit)
int
$0x80 #
call kernel
.data
# section declaration
msg:
.ascii "Hello,
world!\n" # our dear string
len = . - msg
# length of our dear string
- Uma descrição mais detalhada sobre cada uma das duas
sintaxes podem ser encontradas na Seção
3 do Linux Assembly HOWTO.
- Outra descrição, bem clara, pode ser encontrada no artigo AT&T Assembly Syntax.
- No linux, o GNU
assembler, ou as,
usa a sintaxe AT&T como padrão.
Programa para ler um arquivo do disco e imprimir conteúdo na
tela
- Eis o codigo-fonte do leEscreve.S
- Para montá-lo digite as -o leEscreve.o leEscreve.S
- Para gerar o executavel
digite ld -s -o leEscreve
leEscreve.o
Exercício em sala de aula
- Usando a sintaxe Intel,
faça um programa em linguagem de montagem que leia um texto da entrada
padrão, passe-o para letras maiúsculas e jogue o resultado para a saída
padrão. Caracteres que não são letras minúsculas devem permanecer
inalterados.
Próxima aula (aula 6)
Página de MAC211
Página do Fabio
Página do DCC