Diskussion:Assemblersprache

message: .MODEL SMALL
      .STACK 100h
      .DATA
 HW   DB   'Hello World',13,10,'$'
      .CODE
      mov ax,@data
      mov ds,ax          ; DS zeigt auf das Datensegment
 
      mov ah,09h         ; DOS-Funktion Stringausgabe
      mov dx,OFFSET HW   ; Zeiger auf „Hello World“
      int 21h            ; Ausgabe „Hello World“
 
      mov ah,4Ch         ; DOS-Funktion Programmende
      int 21h            ; Programm beenden
      END
::Wenn es jemand für sinnvoll hält, kann er/sie es zum Artikel dazufügen. --79.230.75.46 00:12, 21. Aug. 2010 (CEST)
thread_title:  Hello World in TASM 

message: Für DOS-COM-Programme kann nur ein einziges 64 KB-Segment verwendet werden und beim Starten bekommt DS deswegen schon die selbe Segment-Adresse wie CS zugewiesen.
Ein "push cs" und "pop ds" am Anfang des Programm-Codes macht daher bei einem COM-Programm keinen wirklichen Sinn.
Das Beenden eines COM-Programms kann (ab MSDOS 2) auch mit dem ret-Befehl erfolgen, wenn der Stack erhalten bleibt und CS nicht ungünstig manipuliert wurde, sondern ein Rücksprung zum "int 20h" im PSP möglich bleibt. (Im PSP wird von DOS vor dem Starten der Opcode für "int 20h" eingetragen und ein Word mit 0000h auf den Stack gepusht.)
Dirk (nicht signierter Beitrag von 92.231.183.13 (Diskussion) 08:11, 9. Mär. 2013 (CET)
replies: text: Für DOS-COM Programme kann auch mehr als ein Segment verwendet werden, allerdings muss dann der Programmierer das Segmenthandling und das Speichermanagement komplett selbst übernehmen. Diese Technik wurde in der Demo-Programmierung sehr gerne verwendet - an dieser Stelle sei das Uneatable-Demo genannt, welches aus einem 2MB großen .COM besteht. .COM-Programme unterscheiden sich von .EXE darin, das es keinen Header gibt, alle Segmentregister auf ein und dasselbe Segment zeigen und die Startadresse der ersten Instruktion auf 100h festgelegt ist. DOS reserviert für eine .COM Programm immer 64kB - unabhängig wie groß das Programm selbst ist. Was danach passiert kann der Programmierer selbst entscheiden. Dieser kann danach die Segmentregister nach Belieben ändern. Thomas Merbold (Diskussion) 01:45, 17. Jun. 2013 (CEST)
thread_title:  Info zum NASM hello world-Beispiel eines COM-Programms 

message: Es ist sehr lange her, dass ich in Assembler programmiert habe. Dennoch kommt mir das Beispielprogramm an einer Stelle komisch vor:
Das Beispielprogramm hat als erste Zeile
 ASSUME  CS:CODE, DS:DATA
der ausführbare Code beginnt mit
 mov ax, DATA
 mov ds, ax
? Ist die ASSUME -Anweisung nicht gerade dafür da, dass das Register ds nicht von Hand auf 'DATA' gesetzt werden muss?
Oder umgekehrt: Wenn der Code ds sowieso von Hand setzt, wozu dann der ASSUME ?
--arilou (Diskussion) 09:15, 8. Dez. 2021 (CET)
thread_title:  Beispiel Hallo Welt DATA 

message: Folgendes steht im Artikel:
Noch heute gehören Computerspiele zu den Programmen, bei denen am ehesten kleinere assemblersprachliche Programmteile zum Einsatz kommen, um so Prozessorerweiterungen wie SSE zu nutzen.
Wirklich? Ich kenne ASM in modernen Programmen meist aus Audio/Video-Encodern. Computerspiele kenne ich hauptsächlich als in C++ geschrieben, ohne Inline-ASM. --2A02:8071:62F1:19A0:3037:C696:6E38:9548 05:55, 11. Mär. 2024 (CET)
thread_title:  Assembler in Computerspielen?