240 likes | 498 Views
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. PUSH Instruction. push 0006h push 00A5h. After pushing 0001 and 0002.
E N D
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
PUSH Instruction push 0006h push 00A5h 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
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
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
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
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
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 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
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
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
Simple Console I/O mov ah,1 ; single character input int 21h mov ah,2 ; single character output mov dl,'A' int 21h mov ah,9 ; string output mov dx,offset message int 21h 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