Berkay Çubuk

Assembly Interrupts

Sat Nov 14 2020

Interrupts are simply set of procedures. We’re using interrupts with INT command. Before running an interrupt we have to store some data on stack to tell interrupt what we want to do.

  MOV AH, 09H   ;function number for outputing string to the monitor
  LEA DX, STR   ;store the string that we want to display
  INT 21H       ;run interrupt

This is an axample interrupt to display string.

Useful Interrupts

INT 10H - Display

This interrupt is looking to AH register. Let’s look at it’s functions:

06 - clear the screen

  • AH = 06   ;function number
  • AL = 00   ;page number
  • BH = 07   ;default style (black background with white text)
  • CH = 00   ;row number (start)
  • CL = 00   ;column number (start)
  • DH = 00   ;row number (end)
  • DL = 00   ;column number (end)

02 - setting the cursor

  • AH = 02   ;function number
  • DH = 00   ;row number for cursor
  • DL = 00   ;column number for cursor
  • BH = 00   ;page number

03 - get the current cursor position

  • AH = 03   ;function number
  • BH = 00   ;page number
  • DH = 00   ;row number
  • DL = 00   ;column number

0E - output a character to the screen

  • AH = 0E   ;function number
  • AL = 00   ;character we want to display
  • BH = 00   ;page number
  • BL = 00   ;foreground color

INT 21H - Display & Keyboard

09 - outputing a string of data to the monitor

  • AH = 09   ;function number
  • DX = 00   ;offset address for string array

It’s important to have $ in the end of the array.

02 - outputing a single character to the monitor

  • AH = 02   ;function number
  • DL = 00   ;ASCII code for character

01 - inputing a single character with an echo

  • AH = 01   ;function number
  • AL = 00   ;it’s stores the data displayed and taken by keyboard after interrupt (ASCII).

0A - inputing a string of data from the keyboard

  • AH = 0A   ;function number
  • DX = 00   ;offset address for string array we want to store

When we press ENTER it stops recording data, after:

  • DS:DX = buffer size with bytes (character length + 2)
  • DS:DX+1 = character length
  • DS:DX+2 = first character of array
  • DS:DX+n = last character of array

To be able to record array we have to declare buffer storage.

  • BUFFER DB 10,?,10 DUP (FF)

INT 16H - Keyboard

01 - controlling to detect key strokes

  • AH = 01   ;function number

If we type something ZF becomes 0.

00 - reading keyboard

  • AH = 00   ;function number

When we type something to keyboard AL stores typed character with ASCII format.


These interrupts are just examples, there are ton of interrupts we can use.

Example Code

I want to show you how to use interrupts with a simple example. In this example I want to type some string and display it.

.MODEL SMALL

.STACK 64

.DATA
  MESSAGE DB 'Type your string:', '$'  ;welcome message
  USER_INPUT DB 80 DUP('$')            ;user input we want to store
  NEWLINE DB 10,13,'$'                 ;move to new line after typing

.CODE
  MOV AX, @DATA                         ;required stuff
  MOV DS, AX

  LEA SI, USER_INPUT

  MOV AH, 09H
  LEA DX, MESSAGE                      ;display welcome message
  INT 21H

  MOV AH, 0AH                          ;get pressed key
  MOV DX, SI
  INT 21H

  MOV AH, 09H                          ;display new line
  LEA DX, NEWLINE
  INT 21H

  MOV AH, 09H                          ;display typed string
  LEA DX, USER_INPUT+2
  INT 21H

  MOV AH, 4CH                          ;terminate program
  INT 21H

END                                    ;exit

Subscribe to my newsletter

I share weekly newsletter about my ideas and interesting information I found.

Let's make your dream project real!

Book a call with me and maybe we can combine our forces to make your project a reality.

Book a call now!