Bildschirm löschen&Far jmps
-
Ein Stueck Code waer nicht schlecht. Aber dieser Fehlermeldung zuvolge brauchst Du IMO keinen FAR Jump (=Jump ueber Segmentgrenzen) sondern musst deine Jump-konstruktionen etwas umbauen...
Beispiel:
cmp ax,1234h je bla1 ... ... bla1: ;Angenommen, dieser jcc da oben ist out of range... (Springt weiter als 128Byte) ;Abhilfe schafft diese Konstruktion: cmp ax,1234h jne bla1A jmp bla1 bla1A: ... ... bla1:
Ist zwar nicht schoen, sollte aber funktionieren.
-
Original erstellt von Nobuo T:
**Ein Stueck Code waer nicht schlecht. Aber dieser Fehlermeldung zuvolge brauchst Du IMO keinen FAR Jump (=Jump ueber Segmentgrenzen) sondern musst deine Jump-konstruktionen etwas umbauen...Beispiel:
cmp ax,1234h je bla1 ... ... bla1: ;Angenommen, dieser jcc da oben ist out of range... (Springt weiter als 128Byte) ;Abhilfe schafft diese Konstruktion: cmp ax,1234h jne bla1A jmp bla1 bla1A: ... ... bla1:
Ist zwar nicht schoen, sollte aber funktionieren.**
Jaja, so hab ich das auch immer gelöst...
bis mir dann eher zufällig die richtige Seite in der Doku zugefallen ist. Das Kommando / Schalter / Option ... wie auch immer ... "JUMPS" am anfang des Codes lässt TASM dieses "Umherspringen" automatisch machen. Wenn du deinen Code so beginnstMODEL SMALL IDEAL STACK 100h
dann mach einfach ein
MODEL SMALL JUMPS IDEAL STACK 100h
draus, und es sollte gehen (hoffen wirs mal, bei mir gings
)
mfG ETNA
-
[edit]Sorry, das sollte eigentlich eine Antwort auf einen anderen Thread sein!(Ich hab mich glaube noch nie so oft in einem thread entschuldigen müssen :)[/edit]
Negative Zahlen werden in spezieller Weise dargestellt (habe mich früher, vor meiner Asm-Zeit auch immer gefragt wie das geht:).Bei positiven Zahlen ist das klar (mache das jetzt alles mit 8bit zahlen):
1 =
0000 00012 =
0000 00103 =
0000 0011...
Bei der Änderung des Vozeichen von + nach - wird so Verfahren:
- Alle Bits invertieren
- um 1 inkrementieren (+1)
(für die Konvertierung von - nach + können die Schritte umgekehrt erfolgen, oder es muss 1 subtrahiert anstatt addiert werden.)
-1 =
1111 1111-2 =
1111 1110-3 =
1111 1101mfg
-bg-[ Dieser Beitrag wurde am 09.01.2003 um 23:18 Uhr von -bg- editiert. ]
-
k
thx für alle Antworten!!Das mit dem Bildschirm löschen klappt denke ich schon!Das mit dem jumps regle ich dann halt mit den Umwegen!
cu
z-man
ps: ich hab NASM...TASM kriegt man ja nicht einfach so*grml*
-
Also irgendwie läuft das Teil nicht!Der bildschirm wird leer aber das proggie hängt sich auf!!!!!!!!!!!!!!
Ich geben den text mit int 9h im dos modus aus!(10h is doch der Grafikmodus?oder?)aus!
thx cu
z-man
-
Int 09h ist der Interrupt vector fuer IRQ1, das ist der IRQ der Tastatur.
Unter DOS kannst Du einen Text-String (byte 24h terminiert) mit ah=09h, int 21h oder mit ah=13h, int 10h (keine Terminierung - Laenge in cx) ausgeben. Hierzu bitte vor Benutzung eine Interrupt-Tabelle (z.B. von Ralf Brown) ansehen!
-
Sorry...ein Vertipper meinerseits...ich meinte mit int 21h mit 09h im ah register*g*
cu
z-man
-
Tja... Mit so wenigen Informationen kann ich dir nicht weiter helfen. Alles was ich so dazu sagen kann: In meinen Programmen funktioniert die Textausgabe mit int 21h.
Der Code des fehlerhaften Programms koennte hier uU. hilfreich sein. (schliesslich bezog sich die Ausgangsfrage auch auf einen Jump)
-
Das war sowas wie ne Doppelfrage...ich schreibe grad an nem Proggie das signale am Parallelport ausgiebt...und da is mir der Source wohl zu groß (obwohl doch ziemlich winzig...) geraten.Aber das problem is mit der umherspringerei schon gut gelöst (nochmal thx!).Ausserdem hatte ich das prob das es hässlich aussieht wenn mein Menue jedesmal wieder unter das alte gezeichnet wird...deswegen dachte ich mir Frag ich doch auch gleich mal wie ich den Bildschirm wieder löschen kann (sowas wie cls() in C)!Also mit dem 13h hat das nicht geklapppt...aber ich glaube ich hab mich wohl ein wenig "undeutlich" ausgedrückt*g*Strings etc. terminieren brauch ich nicht!Ich will nur den Bildschirm löschen...
cu
z-man
ps: Wie benutzt man diese RalfBrown liste...ich hab mir den Viewer dazu runtergeladen...aber das einzige was ich an Listen habe is irgendwie was spezielles für Mikrokontroller etc. nur eine Kurze zusammenfassung der DOS interrupts ist dabei...aber keine beschreibung der Optionen!
-
Den Viewer kannst Du vergessen, der bringts nicht.
In den Dateien Interrupt.a /.b /.c etc. stehen einfach alle Interrupts aufgelistet.
Aber nimm doch besser die html-Version, die ist am einfachsten zu benutzen: http://www.ctyme.com/rbrown.htmZum Thema cls in asm steht was in der FAQ.
-
Arg (das steht in den Faqs?)...sorry...irgendwie muss ich wohl geschlafen haben beim Faqs durchlesen*grml*Big thx an alle!
cu
z-man