C


Antigos espíritos do mal, transformem essa forma decadente em Munnnn rahhh! O de vida eternaaaa!

Smalltalk


Livro de Smalltalk (free ebook): http://squeakbyexample.org/

Python


Veja mais detalhes na página Python

Prolog


Veja como resolver um problema de lógica utilizando PROLOG na página Prolog.

Linguagens de Programação Funcionais


Página da disciplina de Linguagens de Programação Funcionais: LPF.

Assembly (Linguagem de Montagem)


A melhor introdução ao assembly que vi é a disponível para processador 8088 no apêndice C do livro:
  • Tanenbaum, Andrew S. "Organização Estruturada de Computadores", 5.ed. São Paulo: Pearson Prentice Hall, 2007

O apêndice é intitulado "Programação em linguagem de montagem", escrito por Evert Wattel, da Vrije Universiteit, Amsterdã, Holanda.

A introdução é leve e bem objetiva, visando apenas os aspectos básicos para o iniciante. Como ferramenta de apoio, utiliza-se um programa de rastreamento (t88) e um interpretador 8088 (s88) para o código já pronto.

Para gerar a linguagem de máquina do 8088 a partir do seu arquivo fonte (.s) utiliza-se o famoso The Amsterdam Compiler Kit (tack), que acompanha o montador as88. O as88 tem muitas vantagens em comparação com o MASM (Microsoft Macro Assembler) e o TASM (Turbo Assembler da Borland). A mais nítida é a convenção de chamada de sistemas usando o mnemônico SYS, com os parâmetros na pilha, ao invés de usar chamada de interrupções do sistema operacional com INT (como INT 21H para chamadas MS-DOS, ou INT 16H para funções de teclado da BIOS).

Por exemplo, para imprimir na tela um texto definido em hw com 12 letras,

PUSH            12
PUSH            hw
PUSH            _STDOUT
PUSH            _WRITE
SYS

que representa o empilhamento dos argumentos da função write(_STDOUT, hw, 12); A ordem do empilhamento segue a convenção adotada em linguagem C, da direita para a esquerda (para que o argumento 1 esteja disponível no primeiro pop(), facilitando a dedução da quantidade de argumentos em caso de funções com números variáveis de argumentos, como o printf() por exemplo).

Download TACK


Para sistemas linux, caso a ferramenta as88 compilada e disponibilizada abaixo apresente o erro:

*** glibc detected *** ~/as88: double free or corruption (!prev): 0x0000061f490 ***

basta ajustar a variável MALLOC_CHECK_:

#!/bin/bash
 
export MALLOC_CHECK_=0
~/Programs/tack/as88 $*

Problemas com sistema Windows(NT ou XP): o t88.exe requer o ansi.sys para imprimir o texto na janela do command prompt. Se ao iniciar você ler o texto desconfigurado, com caracteres de escape "[", é preciso editar (ou criar) o arquivo c:\windows\system32\config.nt e inserir a linha:

device=c:\windows\system32\ansi.sys

O arquivo abaixo contém os executáveis disponíveis para as plataformas UNIX (SOLARIS), LINUX e WINDOWS do compilador Amsterdam 88 (as88), o rastreador t88 e o interpretador s88.



Hellow World


O código abaixo é para (linguagem) assembly 8088, na sintaxe do (montador) assembler as88 (Amsterdam 88).


                _EXIT = 1                       !1
                _WRITE = 4                      !2
                _STDOUT = 1                     !3
.SECT .TEXT                                     !4
start:                                          !5
                MOV             CX, de-hw       !6
                PUSH            CX              !7
                PUSH            hw              !8
                PUSH            _STDOUT         !9
                PUSH            _WRITE          !10
                SYS                             !11
                ADD             SP, 8           !12
                SUB             CX, AX          !13
                PUSH            CX              !14
                PUSH            _EXIT           !15
                SYS                             !16
.SECT .DATA                                     !17
hw:                                             !18
.ASCII "Hello World\n"                          !19
de: .BYTE 0                                     !20

Após salvar o código com o nome "hello.s", execute:
.\as88 hello.s

Isso gera os arquivos:

hello.$  - arquivo fonte composto
hello.#  - arquivo para ligar o código de montagem com o arquivo de carga
hello.88 - o arquivo de carga (o código binário do seu programa, para 8088)

Após isso, para executar, use o interpretador 8088:

.\s88 hello

E para rastrear o arquivo, passo a passo, para ver a mudança dos registradores conforme as instruções ocorrem, use o comando:

.\t88 hello

A janela do rastreador é da forma:

CS: 00  DS=SS=ES: 002 |       |                 _EXIT = 1
AH:00 AL:00 AX:     0 |       |                 _WRITE = 4
BH:00 BL:00 BX:     0 |       |                 _STDOUT = 1
CH:00 CL:0c CX:    12 |       | .SECT .TEXT
DH:00 DL:00 DX:     0 |       | start:
SP: 7ff8 SF O D S Z C |       |                 MOV             CX, de-hw
BP: 7ff8 CC - > p - - |       =>                PUSH            CX
SI: 0000  IP:0003:PC  |       |                 PUSH            hw
DI: 0000  start+2     |       |                 PUSH            _STDOUT
--------------------------------------------------------------------------
                    |
                    | I
                    |
--------------------|
                    |
                    | >
--------------------------------------------------------------------------
 
No BSS or no head label?

Mais explicações serão acrescentadas em uma página dedicada exclusivamente ao assembly.


- beco beco May 31, 2009