In Class Program - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

In Class Program

Description:

Title: In Class Programs in Assembly Author: Jane Moorhead Last modified by: jane Created Date: 9/9/2002 5:30:27 PM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:68
Avg rating:3.0/5.0
Slides: 16
Provided by: JaneM181
Category:
Tags: access | class | program

less

Transcript and Presenter's Notes

Title: In Class Program


1
In Class Program
  • Write, assemble and test a program
  • Use the DB directive to define the following list
    of numbers and name it array
  • 31h, 32h, 33h, 34h
  • Write instructions to load each number into DL
    and display it on the console. (use Int 21h,
    function 2h to display the byte in DL on the
    console)
  • Explain why the output is 1234

2
Procedure
  • Get template
  • Make necessary changes.
  • Assemble and Link using make16
  • Run and debug using Codeview

3
Template for Assembler Programs (Spring,
2003)
Program Name

title INCLUDE Irvine16.inc
Data Segment

.data put data here
Code Segment

.code main proc mov ax,_at_data
mov ds,ax initialize DS register put
code here mov ah,4Ch int 21h function 4c
int 21h return to DOS main endp end main
end of program
4
Defining Data
  • .data
  • List byte 31h, 32h, 33h, 34h

5
Writing to Standard Output
  • Interrupt 21h (MS-DOS Services)
  • Function 2
  • Write character stored in DL to standard out
  • (Appendix C-2, page 652 of Irvine 4th Edition)
  • We have to get the data from memory to register
    DL and then
  • Mov ah,2 use the mov instruction to
  • store the interrupt 21h function
    number in register AH
  • Int 21h use int instruction to process
  • interrupt

6
Moving Data from Memory to DL
  • MOV destination, source
  • The source operand is unchanged!
  • Both operands must be the same size
  • Both operands cannot be memory operands!
  • CS and IP cannot be destination operands
  • An immediate value cannot be moved to a segment
    register

7
MOV Instruction
  • MOV reg, reg
  • MOV mem, reg
  • MOV reg, mem
  • MOV mem, imm
  • MOV reg, imm
  • In real address mode
  • MOV r/m16, sreg
  • MOV sreg, r/m16

8
Moving Data from Memory to DL
  • Mov dl, list AL 31h
  • Mov dl, list 1 AL 32h
  • Mov dl, list 2 AL 33h
  • Mov dl, list 3 AL 34h

9
Using Direct-Offset Operands
  • The data in list (31h, 32h, 33h, 34h) can be
    accessed using the label (list).
  • Putting brackets around the source operand does
    not affect the outcome. They are not required by
    MASM.
  • List1 List1
  • Use List2, List4, etc for WORD lists
  • Use List4, List8, etc for DWORD lists

10
Title Writing_1234_to_Screen (1234_2.ASM) INCLUDE
irvine16.inc .data array db 31h,32h,33h,34h use
db to define each element as 1
byte .code main proc mov ax,_at_data copy the
address of the data mov ds,ax segment(_at_data)
into the DS register mov ah,2 int 21 function
2 displays the character in DL mov dl,
array copy 1st byte of array to
dl int 21h mov dl, array1 copy 2nd byte to
dl - uses direct-offset to access list
elements int 21h mov dl, array2 copy 3rd
byte to dl int 21h mov dl, array3 copy 4th
byte to dl int 21h mov ax, 4c00h terminate
program and return to DOS int 21h main endp end
main
11
Can INC instruction be used to access different
elements of the list ?
  • The INC instruction adds 1 to a single operand
  • INC reg/mem
  • So can we use
  • INC array (example program)
  • No! The only practical way to handle an array or
    list is to use a register as a pointer and change
    the register value to point to different elements
    of the list.

12
OFFSET Operator
  • Returns the offset of a data label.
  • In protected mode, an offset is always 32-bits
    long
  • In real mode, an offset is always 16-bits long.

13
Change Code to
  • Mov bx, OFFSET list
  • Mov dl, bx
  • Int 21h
  • Inc bx
  • Mov dl, bx
  • Int 21h
  • Inc bx
  • NOTE Inc works because the data is bytes. Use
  • Add bx,2 for word size data
  • Add bx,4 for Doubleword size data

14
LOOP Instruction
  • LOOP provides a simple way to repeat a block of
    statements a specific number of times.
  • CX (ECX) is automatically used as the counter
  • LOOP destination is put at the end of a section
    of code to be repeated. First, CX is
    decremented, then CX is compared to zero.
  • If CX is not equal to zero a jump is taken to the
    label identified by destination.

15
INCLUDE irvine16.inc .data array db
31h,32h,33h,34h use db to define array COUNT
(-array) The operator gives the value of the
location counter. .code main proc mov ax,
_at_data copy the address of the data segment
mov ds, ax _at_data into the DS
register mov bx, offset array the offset
operator returns the 16-bit offset of a
label mov cx, COUNT set up cx register as a
counter register. mov ah, 02 use function 2
of int 21h - display char stored in dl on
screen LP1 mov dl, bx LP1 is a
label int 21h inc bx loop LP1 decrement cx
if cx not 0,loop back to label LP1. mov ax,
4c00h int 21h main endp end main
Write a Comment
User Comments (0)
About PowerShow.com