1 / 24

Overview

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.

alyson
Télécharger la présentation

Overview

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. 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

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

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

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

  5. 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

  6. 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

  7. 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

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

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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

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

  20. 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

  21. 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

  22. 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

  23. 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

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

More Related