Gå til innhold

Anbefalte innlegg

Må si at jeg er imponert! Har egentlig aldri tørt å titte på Assembly, men når jeg så at en på forumet hadde skrevet en "bok" om det tenkte jeg at innholdet i boken er mye bedre formulert og kortfattet enn disse store lærebøkene som kommer med tusenvis av definisjoner som jeg fort glemmer (*PUST*, lang setning :hmm: ). Har ikke lest hele boka, men er ikke umulig at jeg gjør det! :w00t:

 

Stå på!

Lenke til kommentar
Videoannonse
Annonse

Lasta ned emu8086, og likte det. Men når jeg prøvde meg på eksemplene i boka diår jeg feilmelding :(

 

INT 21h, AH=09h -

address: 0D548

byte 24h not found after 2000 bytes.

; correct example of INT 21h/9h:

mov dx, offset msg

mov ah, 9

int 21h

 

Hva jeg prøvde:

 

 org 100h
mov ah, 9
mov dx, tekst
int 21h
mov ah, 4Ch
int 21h
tekst db "Hei$"

 

 

Noen aning?

 

 

EDIT: Har et spørsmål til, når du skriver om JMP skriver du:

JNE – Jump if Not Equal – hopper hvis ulik (ikke lik).

JAE – Jump if Above or Equal – hopper hvis over elle lik.

JBE – Jump if Below or Equal – hopper hvis under eller lik.

JNAE – Jump if Not Above or Equal – hopper hvis ikke over eller lik.

JNBE – Jump if Not Below or Equal – hopper hvis ikke under eller lik.

 

Hvilken av disse tilsvarer JZ og JNZ (Tror det er Jump If Zero og Jump if Not Zero, uten at jeg vet)

 

Takk på forhånd :)

Endret av ze5400
Lenke til kommentar

Emu8086 bruker FASM, som har en litt annen syntaks enn NASM... Derfor fungerer ikke eksemplene. Jeg anbefaler sterkt at du bruker NASM hvis du har planer om å følge boka.

 

JZ og JE hopper om zero flagget er satt, JNZ og JNE hvis ikke.

Endret av Johan123321
Lenke til kommentar
Hva bør skrives om i delen om binære tall da? Er lettere hvis du sier hva som er dårlig forklart!

5942210[/snapback]

 

Hvis jeg husker rett så var det kanskje mer innviklet forklart enn det det kunne være. Ta høyde for at jeg ikke kan assembly men jeg tror det kan blir mer pedagogisk.

Lenke til kommentar

Bra begynnelse! :)

 

Du gjør en god jobb med forklaringer, men jeg forsto ikke binærregning.

 

Hvis du skriver at man kan bruke calc.exe til å regne mellom talsystemene er det fint. For ellers kan nok noen får grå hår av det der :)

Endret av ze5400
Lenke til kommentar

Merk deg at det skal jo noe til fra leseren også for å forstå det. Men hvis du prøvde å forstå så godt du kunne, og like vel ikke forsto det, så skal jeg selvsagt forbedre det.

 

Selv bruker jeg også calc til å regne om verdier. Ellers går det for tregt...

Lenke til kommentar

hehe, leser binærregninga om igjen da, men calc er jo bare lettest på detta :)

 

EDIT: Har et spørsmål også jeg; Er det mulig å lytte etter tastetrykk samtidig som jeg gjør en oppgave. Har en oppgave i en loop, som må gjøres hele tiden, men jeg må også hente ut tastetrykk.

Endret av ze5400
Lenke til kommentar
Nå forsto jeg hva du mente. Multitasking er ikke mulig i seg selv, uten å benytte seg av OSet sine multitasking-funksjoner (jeg aner ikke hvordan man starter en ny prosess)...

6307835[/snapback]

Under unix er det fork(). Eksempel, et program i C:

 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
 int i;
 pid_t pid = fork();
 if (pid == 0)
   printf("Forket prosess\n");
 else
   printf("Forelder-prosess\n");
 return 1;
 }

 

Og assembly-output fra GCC (gcc -S):

 

      .file      "test.c"
     .section      .rodata
.LC0:
     .string      "Forket prosess"
.LC1:
     .string      "Forelder-prosess"
     .text
.globl main
     .type      main, @function
main:
     pushl      %ebp
     movl      %esp, %ebp
     subl      $24, %esp
     andl      $-16, %esp
     movl      $0, %eax
     addl      $15, %eax
     addl      $15, %eax
     shrl      $4, %eax
     sall      $4, %eax
     subl      %eax, %esp
     call      fork
     movl      %eax, -4(%ebp)
     cmpl      $0, -4(%ebp)
     jne      .L2
     movl      $.LC0, (%esp)
     call      puts
     jmp      .L4
.L2:
     movl      $.LC1, (%esp)
     call      puts
.L4:
     movl      $1, %eax
     leave
     ret
     .size      main, .-main
     .ident      "GCC: (GNU) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)"
     .section      .note.GNU-stack,"",@progbits

Jeg aner ikke hvilken assembler gcc bruker, så det blir eventuelt opp til andre å få dette til å virke under andre assemblere/os.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...