1 / 12

Assembly Language

Assembly Language. part 2. Program example 2. BR 0x0008 .ASCII &quot;#?&quot; .ASCII &quot;<br>&quot; .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.

Télécharger la présentation

Assembly Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

More Related