Re: Assembler

From: Fischer Oliver <nexus(at)fileseeker.net>
Date: Mon, 26 Jun 2000 11:46:44 +0200

Ich habe es noch mal aus der webseite kopiert. Jetzt klappt es
natuerlich, allerdings kann ich auch keinen unterschied zu der
vorherigen version auf meiner platte entdecken. Der Fehler tritt auch
nicht beim assemblieren oder linken auf, sondern erst zu laufzeit.

Aber egal, vergesst es. Vorfuehreffekt...

Byem

Oliver

> As Fischer Oliver wrote:

>> Das Demo aus dem Artikel erzeugt bei mir nur Fehler (4.0).

> Was hast Du denn damit gemacht? Die im Artikel angegebene
> Reihenfolge

> nasm -f elf hello.asm
> ld -o hello hello.o (weiß nicht, warum manche Leute es sich zur
> Gewohnheit machen, ld immer mit -s
> aufzurufen)

> ...ergibt bei mir ein sauberes "Hello, world!", FreeBSD nicht ganz
> -current, aktueller nasm-Port.

> Allerdings verstehe ich nicht, warum jemand so erpicht auf diese
> blöde
> iNtel-Mnemonik sein kann. Ich fand sie früher schon immer unlogisch
> und war von der Klarheit der AT&T-Mnemonik, wie sie unter Unix
> allgemein üblich ist, dann viel mehr angetan. Warum bitte sollte
> ich
> "move a b" schreiben, wenn ich eigentlich meine "lade a mit b" bzw.
> "move b nach a". Auch haben solche Konzepte wie ein "dword ptr"
> immer
> irgendwie den Hauch von segment:offset Adressierung für mich an
> sich... In einer richtigen Assemblersprache muß man einen Pointer
> nich angeben, sondern einen Direktwert. Das hat zur Folge, daß man
> einen Speicherplatz für eine Variable mit einem Symbol vereinbaren
> kann und diesen Namen dann wie eine Variable benutzt. Alle außer
> iNtel machen das so... (und Z80, der war noch i8080-lastig, obwohl
> er
> zumindest den Unfug mit "mov a, b" korrigiert hat und "ld a, b"
> benutzt). Mal bekommen labels einen Doppelpunkt, mal haben sie
> keinen... Naja, man muß das glaub' ich nicht mögen, was iNtel da
> verbrochen hat. ;-)

> Hier nochmal das Testprogramm aus dem Beispiel in as-Syntax. Zu
> bauen mit

> as -o hello.o hello.s # die Endung .asm ist auch so'n
> DOSismus...
> ld -o hello hello.o

> .text
> .globl _start/* must be declared for linker (ld) */

> msg:.ascii"Hello, world!\n"/* our dear string */
> .equlen, . - msg/* length of our dear string */

> _syscall:
> int$0x80/* system call */
> ret

> _start:/* tell linker entry point */

> push$len/* message length */
> push$msg/* message to write */
> push$1/* file descriptor (stdout) */
> mov$0x4,%eax/* system call number (sys_write) */
> call_syscall/* call kernel */

> /* the alternate way to call kernel: */
> /* pusheax */
> /* call7:0 */

> add$12,%esp/* clean stack (3 arguments * 4) */

> push$0/* exit code */
> mov$1,%eax/* system call number (sys_exit) */
> call_syscall/* call kernel */

> /* we do not return from sys_exit, */
> /* there's no need to clean stack */

> --
> cheers, J"org .-.-. --... ...-- -.. . DL8DTL

> http://www.sax.de/~joerg/ NIC: JW11-RIPE
> Never trust an operating system you don't have sources for. ;-)

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 26 Jun 2000 - 11:45:28 CEST

search this site