1 / 15

In Class Program

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

lyris
Download Presentation

In Class Program

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. 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 4Ch 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,@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. • List+1 == [List+1] • Use List+2, List+4, etc… for WORD lists • Use List+4, List+8, 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,@data ;copy the address of the data mov ds,ax ;segment(@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, array+1 ;copy 2nd byte to dl - uses direct-offset to access list elements int 21h mov dl, array+2 ;copy 3rd byte to dl int 21h mov dl, array+3 ;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, @data ;copy the address of the data segment mov ds, ax ;@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

More Related