SlideServe
Menu
Préférences
© SlideServe · v2026

Assembly Language

violet-santana avatar
12 diapositives · 296 Views · Nov 20, 2014

Assembly Language. part 2. Program example 2. BR 0x0008 .ASCII "#?" .ASCII "
" .BLOCK 2 CHARO 0x0003, d CHARO 0x0004, d DECI 0x0006, d CHARO 0x0005, d DECO 0x0006, d STOP .END. go past data – minimizes offset calculations (contrast with data after code). “constant” declarations.

Assembly Language - slide 1
01 / 12Assembly Language
1 / 17

Télécharger la présentation

Assembly Language
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Assembly Language part 2

  2. Program example 2 BR 0x0008 .ASCII "#?" .ASCII "\n" .BLOCK 2 CHARO 0x0003, d CHARO 0x0004, d DECI 0x0006, d CHARO 0x0005, d DECO 0x0006, d STOP .END go past data – minimizes offset calculations (contrast with data after code) “constant” declarations “variable” declaration output prompt read number output newline character output number

  3. Data declaration & storage • The previous example included two different types of data declaration instructions: • the .ASCII pseudo-op is used to allocate a contiguous set of bytes large enough to hold the specified data; as with Java & C++, the backslash character (\) is used as the escape character for control codes, like newline • the .BLOCK pseudo-op allocates the specified number of bytes and initializes their values to 0

  4. Data declaration & storage • Two other pseudo-ops provide data storage: • the .WORD instruction allocates two bytes, suitable for storage of integers • the .BYTE instruction allocates one byte, suitable for storage of characters • like .ASCII (and unlike .BLOCK), both of these instructions allow the programmer to specify initial values, as shown on next slide

  5. Initialization examples • .WORD 7 ; allocates 2 bytes, with ; decimal value 7 • .BYTE 0x2B ; allocate 1 byte, with hex ; value 2B (‘+’)

  6. I/O instructions • The DECI and DECO instructions considerably ease the process of reading and writing numbers • Each one deals with word-size data, and represent instructions not available in the underlying machine language – thus they are part of the set of unimplemented op codes • The actual I/O is performed by the operating system; the instructions generate program interrupts that allow the OS to temporarily take over to provide a service to the program

  7. I/O instructions • The CHARI and CHARO instructions are simply assembly language versions of the machine language input and output instructions: • read or write a byte of data • data source (for output) and destination (for input) are memory (not registers)

  8. I/O instructions • STRO is yet another example of an unimplemented op code • Outputs a string of data • String can be predefined with the .ASCII pseudo-op • Predefined string must be terminated with a null character: “\x00”

  9. Arranging instructions and data • In the first program example (see Monday’s notes), as with all of the machine language examples, instructions were placed first, ended with a STOP code, and data followed • Problems with this approach: • requires address calculations based on the number of instructions (which may not be known as you’re writing a particular instruction) • addresses may have to be adjusted if even minor changes are made to the program

  10. Putting the data first • An easy solution to the problems described on the previous slide was illustrated by the program example; the solution is twofold: • declare the data first • place an unconditional branch instruction at the beginning of the program, pointing to the first instruction after the data • the following example provides another illustration

  11. Program example 3 br 0x0020 ; bypass data .block 4 ; space for 2 ints .ascii "Enter a number: \x00" .ascii " + \x00" .ascii " = \x00" stro 0x0007,d ; prompt deci 0x0003,d ; get 1st number stro 0x0007,d ; prompt deci 0x0005,d ; get 2nd number deco 0x0003,d ; output 1st number stro 0x0018,d ; output ascii string " + " deco 0x0005,d ; output 2nd number stro 0x001c,d ; output string " = " lda 0x0003,d ; put the first # in A adda 0x0005,d ; add 2nd # to first sta 0x0003,d ; store sum deco 0x0003,d ; output sum stop .end

  12. Program example 4: using labels br code pirate: .ASCII "Arrr!\x00" code: stro pirate ,d STOP .END