Chapter 5: Procedures and Interrupts

Slides:



Advertisements
Similar presentations
DOS and BIOS Interrupts DOS and BIOS interrupts are used to perform some very useful functions, such as displaying data to the monitor, reading data from.
Advertisements

Assembly Language for x86 Processors 6th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy this slide.
Subroutines: Passing Arguments Using the Stack. Passing Arguments via the Stack Arguments to a subroutine are pushed onto the stack. The subroutine accesses.
More about procedures and Video Processing. Lesson plan Review existing concepts More about procedures and boolean expression Video processing.
Irvine, Kip R. Assembly Language For Intel-Based Computers TYPE and SIZE Operators TYPE –returns the size, in bytes of a single element of a data label.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#4)
Assembly Language for Intel-Based Computers Chapter 15: BIOS-Level Programming (c) Pearson Education, All rights reserved. You may modify and.
Assembly Language for Intel-Based Computers Chapter 8: Advanced Procedures Kip R. Irvine.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 6: Conditional Processing (c) Pearson Education, All rights reserved. You may modify.
Assembly Language for Intel-Based Computers Chapter 5: Procedures Kip R. Irvine.
1 Lecture 5: Procedures Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
Assembly Language Advantages 1. It reveals the secret of your computer’s hardware and software. 2. Speed. 3. Some special applications and occasions. Disadvantages.
CS2422 Assembly Language & System Programming November 2, 2006.
Chapter 7 Programming with DOS and BIOS Function Calls Objectives: The use of DOS and BIOS function call How to read the PC’s keyboard How to send text.
Kip Irvine: Assembly Language for Intel-Based Computers Overview Stack Operations (PUSH and POP) Procedures Procedure Parameters Software Interrupts MS-DOS.
Assembly Language for Intel-Based Computers Chapter 13: 16-Bit MS-DOS Programming Kip R. Irvine.
Kip Irvine: Assembly Language for Intel-Based Computers
Irvine, Kip R. Assembly Language For Intel-Based Computers.data string db "This is a string." COUNT = ($–string) ; calculate string length.code mov cx,COUNT.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved. You may.
Irvine, Kip R. Assembly Language For Intel-Based Computers XADD Instruction.code mov ax,1000h mov bx,2000h ; AX = 1000h, BX = 2000h xadd ax,bx ; AX = 3000h,
Web siteWeb site ExamplesExamples Irvine, Kip R. Assembly Language for Intel-Based Computers, Defining and Using Procedures Creating Procedures.
8.4 Instruction Execution Times TOBIN PROC FAR SUB AX,AX MOV DX,AX MOV CX,4 NEXTD: PUSH CX SUB BP,BP MOV CX,4 GETNUM: RCL BX,1 RCL BP,1 LOOP GETNUM.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#8) By Dr. Syed Noman.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 15: BIOS-Level Programming (c) Pearson Education, All rights reserved. You.
Chapter 15 BIOS-Level Programming
ICS312 Set 4 Program Structure. Outline for a SMALL Model Program Note the quiz at the next lecture will be to reproduce this slide.MODEL SMALL.586 ;
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved.
ORG ; FOUR INT 21H and INT 10H Programming and Macros Dec Hex Bin
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 3: Assembly Language Fundamentals Assembling, Linking and Running Programs Example Programs.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#7)
Lecture 11 Last notes on interrupts and exam review Dr. Dimitrios S. Nikolopoulos CSL/UIUC.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved.
Assembly Language for x86 Processors 6th Edition
Assembly Language for x86 Processors 6th Edition
BIOS and DOS Programming in DOS INT 10 and 21H. Interrupts There are some extremely useful subroutines within BIOS or DOS that are available to the user.
1 Screen and Keyboard Operations Suthida Chaichomchuen
Chapter 3 Examining Computer Memory and Executing Instructions.
Assembly Language for Intel-Based Computers, 6 th Edition Chapter 8: Advanced Procedures (c) Pearson Education, All rights reserved. You may.
1 Chapter 5: Procedures and Interrupts Assembly Language for Intel-Based Computers, Kip R. Irvine 3rd edition 3/17/2000.
Assembly Language for Intel-Based Computers Chapter 13: 16-Bit MS-DOS Programming Kip R. Irvine.
Text-Mode Programming Question #1 What are the three levels of access to the video display when writing characters on the screen in text mode?
CSNB374: Microprocessor Systems Chapter 5: Procedures and Interrupts.
Strings, Procedures and Macros
Video systems. Lesson plan Review the code for the previous exercise Video systems Review for midterm exam.
8086 Microprocessor Interrupts By: Vijay Kumar. K Reference From Slide Share.
Writing and using procedures
21/11/2005CAP2411 Input & Output Instructions CPU communicates with the peripherals through I/O registers called I/O ports. There are 2 instructions, IN.
10H Interrupt. Option 0H – Sets video mode. Registers used: – AH = 0H – AL = Video Mode. 3H - CGA Color text of 80X25 7H - Monochrome text of 80X25 Ex:
String Instructions String instructions were designed to operate on large data structures. The SI and DI registers are used as pointers to the data structures.
EEL 3801 Part IV The Assembler. OFFSET Operator Returns address of variable used as operand. Actually, it represents the offset from the beginning of.
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.
Chapter Bit MS-DOS Programming Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
Microprocessors Monday, Apr. 16 Dr. Asmaa Farouk Faculty of Engineering, Electrical Department, Assiut University.
Irvine, Kip R. Assembly Language for Intel-Based Computers. Chapter 7: Integer Arithmetic Slides to Accompany Assembly Language for Intel-Based Computers,
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 5: Procedures Lecture 19: Procedures Procedure’s parameters (c) Pearson Education, 2002.
Control Structure vs. Assembly Language NASM. If-then-else If conditional then then_actions jump to endif else else_actions endif.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 13: 16-Bit MS-DOS Programming Interrupts (c) Pearson Education, All rights reserved.
Assembly Language Lecture 2. Lecture Outline Program Structure Memory models Data Segment Stack Segment Code Segment Input and Output Instructions INT.
File Operations. FILE PROCESSING For the purposes of the following discussion, reading means copying all or part of an existing file into memory Writing.
1 Using the Assembler Chapter – 4(A). 2 Exchanging Two Variables title Exchange Two Variables (Exchange.asm).model small.stack 100h.data value1 db 0Ah.
Lecture 15 Advanced Procedures Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
Format of Assembly language
Additional Assembly Programming Concepts
Microprocessor and Assembly Language
9/17/2018 Kiến Trúc Máy Tính.
Microprocessor and Assembly Language
Introduction to Assembly Language
Chapter 4: Instructions
Morgan Kaufmann Publishers Computer Organization and Assembly Language
Unit:08 Software Interrupts
Presentation transcript:

Chapter 5: Procedures and Interrupts Slides to Accompany Assembly Language for Intel-Based Computers, Third Edition Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Overview Stack Operations (PUSH and POP) Procedures Procedure Parameters Software Interrupts MS-DOS (INT 21h) Function Calls BIOS Keyboard Input (INT 16h) BIOS Video Control (INT 10h) Recursion Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers PUSH Instruction push 0006h push 00A5h Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers After pushing 0001 and 0002 Kip Irvine: Assembly Language for Intel-Based Computers

Before and After Popping from the Stack pop AX ; now, AX=0002 Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Uses of the Stack Save and restore registers Save the return address when a CALL instruction is executed Push parameters on the stack before calling a subroutine Create local variables inside a procedure A procedure's stack frame includes passed parameters, the return address, and local variables. Kip Irvine: Assembly Language for Intel-Based Computers

Example: Calling a Procedure main proc mov ax,@data mov ds,ax call MySub mov ax,4c00h ; returns to here int 21h main endp MySub proc . ; control transfers here . ret MySub endp Kip Irvine: Assembly Language for Intel-Based Computers

Nested Procedure Calls (1) main proc 000A call sub1 000C mov ax,... . main endp sub1 proc call sub2 0050 ret sub1 endp sub2 proc . call sub3 0060 ret sub2 endp sub3 proc ret sub3 endp Kip Irvine: Assembly Language for Intel-Based Computers

Nested Procedure Calls (2) Kip Irvine: Assembly Language for Intel-Based Computers

Avoid Overlapping Procedures! main proc . call subroutine1 subroutine1 proc main endp ret subroutine1 endp Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Procedure Calls (1) title Procedure Demonstration (SUBS.ASM) ; This program calls two procedures: one for ; keyboard input, another to add the elements ; in an array of integers. .model small .stack 100h .data char db ? sum dw ? array dw 100h,200h,300h,400h,500h array_size = ($-array)/(TYPE array) ; more... Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Procedure Calls (2) .code main proc mov ax,@data ; set up the DS register mov ds,ax call inputChar ; input char into AL mov char,AL ; store in a variable ; Prepare to call the calcSum procedure. mov bx,offset array ; BX points to array mov cx,array_size ; CX = array count call calcSum ; calculate sum mov sum,ax ; store in a variable mov ax,4C00h ; return to DOS int 21h main endp Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Procedure Calls (3) ; input character from keyboard inputChar proc mov ah,1 ; DOS function #1: char input int 21h ; call DOS to do the work ret inputChar endp ; more... Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Procedure Calls (4) ; Calculate the sum of an array of integers. ; Input: BX points to the array and CX contains ; the array size. Returns the SUM in AX. calcSum proc push bx ; save BX, CX push cx mov ax,0 CS1: add ax,[bx] add bx,2 ; point to next integer loop CS1 ; repeat for array size pop cx ; restore BX, CX pop bx ret ; sum stored in AX calcSum endp Kip Irvine: Assembly Language for Intel-Based Computers

Calling a NEAR Procedure main proc 0006: call sub1 0009: inc ax . main endp sub1 proc 0080: mov ax,1 . ret sub1 endp Kip Irvine: Assembly Language for Intel-Based Computers

Calling a FAR Procedure main proc 2FC0:0006: call far ptr sub1 2FC0:0009: inc ax . main endp sub1 proc 3AB6:0080: mov ax,1 . ret sub1 endp Kip Irvine: Assembly Language for Intel-Based Computers

Preserving Local Registers (1) It is common practice to save and restore any registers that a procedure plans to modify. Writeint proc push cx ; save registers that will change push bx push si . pop si ; restore the same registers pop bx ; (in reverse order) pop cx ret Writeint endp Kip Irvine: Assembly Language for Intel-Based Computers

Preserving Local Registers (2) What would happen to the following program if Writeint did not preserve CX,BX, and SI? main proc ... mov cx,LIST_COUNT mov bx,DECIMAL_RADIX mov si,offset aList L1: mov ax,[si] call Writeint add si,2 Loop L1 main endp Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Interrupts Hardware interrupts occur as a response to a hardware device routed through the Intel 8259 Interrupt Controller Software interrupts calls to operating system functions, located in BIOS and resident portion of DOS activated by the INT instruction Kip Irvine: Assembly Language for Intel-Based Computers

Interrupt Vectoring Process Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers INT Instruction The INT instruction is always followed by a hexadecimal number that identifies its type Common examples: INT 10h - video BIOS INT 14h - Serial I/O INT 16h - keyboard BIOS INT 17h - printer services INT 1Ah - Time of day INT 1Ch - User timer INT 21h - DOS services Kip Irvine: Assembly Language for Intel-Based Computers

DOS Function Calls (INT 21h) The INT 21h instruction activates a DOS function call The function number (0-255) is placed in the AH register before invoking INT 21h Some functions require that you assign values to certain registers before invoking INT 21h Some functions return values in registers Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Simple Console I/O mov ah,1 ; single character input int 21h mov ah,2 ; single character output mov dl,'A' mov ah,9 ; string output mov dx,offset message Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers INT 21h: Standard Input • 01h Filtered Input With Echo • 06h Direct Input Without Waiting • 07h Direct Input, No Ctrl-Break • 08h Direct Input with Ctrl-Break • 0Ah Buffered Input • 0Bh Get Input Status • 0Ch Clear Input Buffer, Invoke Input Function • 3Fh Read From File or Device Kip Irvine: Assembly Language for Intel-Based Computers

Comparison of Standard Input Kip Irvine: Assembly Language for Intel-Based Computers

Keyboard Parameter Record (Function 0Ah) Kip Irvine: Assembly Language for Intel-Based Computers

3Fh: Read from File or Device When the user presses Enter at the end of the input, two bytes (0Dh,0Ah) are appended to the string in the input buffer and the count in AX includes the extra characters. buffer db 127 dup(0) . mov ah,3Fh ; read from file/device mov bx,0 ; device = keyboard mov cx,127 ; request 127 bytes maximum mov dx,offset buffer int 21h ; AX = number chars typed + 2 Kip Irvine: Assembly Language for Intel-Based Computers

40h: Write to File or Device buffer db 127 dup(0) count dw ? . mov ah,40h ; read from file/device mov bx,1 ; device = console mov cx,count ; number of chars to write mov dx,offset buffer int 21h Kip Irvine: Assembly Language for Intel-Based Computers

2Ah: Get Date, 2Bh: Set Date mov ah,2Ah int 21h mov year,cx mov month,dh mov day,dl mov dayOfWeek,al mov ah,2Bh mov cx,year mov dh,month mov dl,day int 21h cmp al,0 jne badDate Requires administrator privileges under Windows NT. Kip Irvine: Assembly Language for Intel-Based Computers

2Ch: Get Time, 2Dh: Set Time mov ah,2Dh mov ch,hours mov cl,minutes mov dh,seconds int 21h cmp al,0 jne badTime mov ah,2Ch int 21h mov hours,ch mov minutes,cl mov seconds,dh Requires administrator privileges under Windows NT. Kip Irvine: Assembly Language for Intel-Based Computers

INT 16h BIOS Keyboard Input Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Keyboard Status Byte Kip Irvine: Assembly Language for Intel-Based Computers

Keyboard Input Using INT 16h Use INT 16h to input any key, including function keys, arrow keys, and other extended keys. mov ah,10h ; wait for key int 16h ; AH=scan code, AL=ASCII code Kip Irvine: Assembly Language for Intel-Based Computers

Keyboard Input Using INT 16h INT 16h function 11h detects the presence of a key in the keyboard typeahead buffer. The following loop uses a conditional jump (JNZ), explained in Chapter 6. L1: mov ah,11h ; key waiting? int 16h jnz keyWaiting ; yes: process it jmp L1 ; no: continue loop keyWaiting: mov scanCode,ah mov ASCIICode,al Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Keyboard Scan Codes A keyboard scan code is a unique 8-bit binary number associated with a particular keyboard key. A list of frequently used codes is inside the front cover of the book. Here are samples: Home 47h End 4Fh PgUp 49h PgDn 51h F1 function key 3Bh F2 function key 3Ch F3 function key 3Dh F4 function key 3Eh Kip Irvine: Assembly Language for Intel-Based Computers

Common ASCII Control Characters Kip Irvine: Assembly Language for Intel-Based Computers

Video Attribute Layout (MSDOS mode only) If your program is running in an MS-DOS window under Windows/NT, your background color is stored in bits 4-7 of the attribute bit, and blinking is disabled. Kip Irvine: Assembly Language for Intel-Based Computers

3-bit Background Colors The following background colors are used only when running in full-screen mode or in pure MSDOS mode (by rebooting). Kip Irvine: Assembly Language for Intel-Based Computers

4-bit Foreground Colors Kip Irvine: Assembly Language for Intel-Based Computers

4-bit Background Colors Kip Irvine: Assembly Language for Intel-Based Computers

Table 9. Listing of INT 10h Functions (1 of 2) Kip Irvine: Assembly Language for Intel-Based Computers

Table 9. Listing of INT 10h Functions (2 of 2) Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers INT 10h (06h) Scroll Window Up When you scroll a window up, existing lines of text are moved upward and one or more blank lines are created. You can assign a color to the blank lines. mov ah,6 ; scroll window up mov al,5 ; scroll 5 lines mov ch,0 ; upper left row mov cl,0 ; upper left column mov dh,24 ; lower right row mov dl,79 ; lower right column mov bh,7 ; attribute for blank lines int 10h ; call BIOS Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Scroll (clear) Entire Window If you set AL to zero, all lines in the window are scrolled. This clears the window. mov ah,6 ; scroll window up mov al,0 ; entire window mov ch,0 ; upper left row mov cl,0 ; upper left column mov dh,24 ; lower right row mov dl,79 ; lower right column mov bh,7 ; attribute for blank lines int 10h ; call BIOS Kip Irvine: Assembly Language for Intel-Based Computers

INT 10h (07h) Scroll Window Down The following scrolls all lines within a window in the downward direction by one row. The blank line's attribute is blue text on a white background (11110001): mov ah,7 ; scroll window down mov al,1 ; scroll one row mov ch,0 ; upper left row mov cl,0 ; upper left column mov dh,24 ; lower right row mov dl,79 ; lower right column mov bh,0F1h ; blank line's attribute int 10h ; call BIOS Kip Irvine: Assembly Language for Intel-Based Computers

INT 10h (2h) Set Cursor Position, and INT 10h (08h) Read Character and Attribute locate: mov ah,2 ; set cursor position mov bh,0 ; on video page 0 mov dx,0501h ; at row 5,column 1 int 10h getchar: mov ah,8 ; read char/attribute mov char,al ; save the character mov attrib,ah ; save the attribute Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers Advance the Screen Cursor Strategy: Get the current cursor position, add 1 to DL, and set the new cursor position. AdvanceCursor proc pusha mov ah,3 ; get cursor position mov bh,0 int 10h inc dl ; increment column mov ah,2 ; set cursor position popa ret AdvanceCursor endp Kip Irvine: Assembly Language for Intel-Based Computers

INT 10h (09h) Write Character and Attribute This function does not advance the cursor, so you have to do that separately mov ah,9 ; write character and attribute mov al,0Ah ; ASCII character 0Ah mov bh,0 ; video page 0 mov bl,2 ; color (attribute) = green mov cx,1 ; display it one time int 10h Kip Irvine: Assembly Language for Intel-Based Computers

Example: Write a Color String string db "ABCDEFGHIJKLMOP" count = ($-string) color db 1 . mov cx,count mov si,offset string L1: push cx ; save loop counter mov ah,9 ; write character and attribute mov al,[si] ; character to display mov bh,0 ; video page 0 mov bl,color ; get the color mov cx,1 ; display it one time int 10h call AdvanceCursor inc color ; next color inc si ; next character position pop cx ; restore loop counter Loop L1 Kip Irvine: Assembly Language for Intel-Based Computers

Table 10. Direct Video Procedures in the Link Library Under Windows 2000, you can see the output of these functions while debugging in CodeView, but if you run the program in a Command window, they do not generate any output. Kip Irvine: Assembly Language for Intel-Based Computers

Recursion - A Procedure Calling Itself Recursion happens under the following circumstances: A procedure directly calls itself Procedure A calls one or more other procedures, and somewhere in the execution of these, one of them calls Procedure A. (indirect recursion) There must be a way to stop the recursion, or it will run out of control. A conditional jump is usually used to accomplish this. Kip Irvine: Assembly Language for Intel-Based Computers

Recursion Example: Sum of Integers Main proc mov cx,5 ; counter mov ax,0 ; holds the sum call Sum ; find sum of 5+4+3+2+1 L1: mov ax,4C00h int 21h Main endp Sum proc or cx,cx ; check counter value jz L2 ; quit if zero add ax,cx ; otherwise, add to sum dec cx ; decrement counter call Sum ; recursive call L2: ret Sum endp Kip Irvine: Assembly Language for Intel-Based Computers

Table 11. Stack Frame for the Sum Program Kip Irvine: Assembly Language for Intel-Based Computers

Example 9. The Factorial Procedure (1 of 2) The factorial procedure calculates the factorial of the number passed to it in the AX register. The calculated value is returned in AX. main proc 0000 mov ax,8 ; calculate 8! 0003 push ax 0004 call Factorial ; return value in AX 0007 mov ax,4C00h 000A int 21h main endp Kip Irvine: Assembly Language for Intel-Based Computers

Example 9. The Factorial Procedure (2 of 2) 000C push bp 000D mov bp,sp 000F mov ax,[bp+4] ; get n 0012 cmp ax,1 ; n <= 1? 0015 ja L1 ; no: continue 0017 mov ax,1 ; yes: return 1 001A jmp L2 001D L1: dec ax 001E push ax ; Factorial(n‑1) 001F call Factorial 0022 mov bx,[bp+4] ; get n 0025 mul bx ; ax = ax * bx 0027 L2: pop bp 0028 ret 2 ; AX = result Factorial endp Kip Irvine: Assembly Language for Intel-Based Computers

Figure 8. Stack Frame, Factorial Program Kip Irvine: Assembly Language for Intel-Based Computers

Table 12. Examples for Question 23 Create the required bit pattern for each of the following colors. Kip Irvine: Assembly Language for Intel-Based Computers

Kip Irvine: Assembly Language for Intel-Based Computers The End Kip Irvine: Assembly Language for Intel-Based Computers