This 8086 microprocessor assembly program subtracts two decimal digits and prints the output accordingly. If you want to know how can you print a single character in 8086 assembly language you can find it IN THIS LINK. If you have questions or any problems feel free to ask in the comments section.
TITLE THE_LAME_PROGRAMMER
.MODEL SMALL
.STACK 100H
.DATA
DIGIT1 DB 0AH, 0DH, "ENTER FIRST DIGIT: $"
DIGIT2 DB 0AH, 0DH, "ENTER SECOND DIGIT: $"
RESULT DB 0AH, 0DH, "RESULT IS: $"
.CODE
MAIN:
MOV AX, @DATA
MOV DS, AX
MOV DX, OFFSET DIGIT1
MOV AH, 09H
INT 21H
MOV AH, 01H
INT 21H
SUB AL, 30H
MOV BH, AL
MOV DX, OFFSET DIGIT2
MOV AH, 09H
INT 21H
MOV AH, 01H
INT 21H
SUB AL, 30H
MOV BL, AL
CMP BH, BL
JL MINUS
SUB BH, BL
MOV DX, OFFSET RESULT
MOV AH, 09H
INT 21H
MOV DL, BH
ADD DL, 30H
MOV AH, 02H
INT 21H
JMP EXIT
MINUS:
SUB BL, BH
MOV DX, OFFSET RESULT
MOV AH, 09H
INT 21H
MOV DL, '-'
MOV AH, 02H
INT 21H
MOV DL, BL
ADD DL, 30H
MOV AH, 02H
INT 21H
EXIT:
MOV AH, 04CH
INT 21H
END MAIN
This x86 Assembly Language program takes users input in 8086 Microprocessor Assembly Language and prints the cube of it.
To run this x86 Assembly Code you need to Downloademu8086 software. Copy the following 8086 microprocessor Assembly Language code and paste this code to emu8086 and hit the play button.
TITLE PUCHTAA
.MODELSMALL
.STACK100H
.DATA
MSG DB0AH, 0DH, "ENTER A NUMBER TO FIND CUBE OF IT: $"
OUT1 DB0AH, 0DH, "CUBE OF $"
OUT2 DB" IS $"
QUIT DB0AH, 0DH, "CONTINUE? Y FOR YES ELSE FOR NO: $"
This 8085/8086 microprocessor assembly language program asks users to input a number and finds out the square of a number and then prints it. This 8085/8086 microprocessor assembly language program has one more feature by which it doesn't accept any value other than decimal numbers and asks users if they want to quit the program or not
TITLE PUCHTAA
.MODELSMALL
.STACK100H
.DATA
MSG DB0AH, 0DH, "ENTER A NUMBER TO SQUARE IT: $"
OUT1 DB0AH, 0DH, "SQUARE OF $"
OUT2 DB" IS $"
QUIT DB0AH, 0DH, "CONTINUE? Y FOR YES ELSE FOR NO: $"
If you are getting started with 8086 assembly programming, you might encounter the elementary and very beginning program of your life, which is “how to print text in 8086 assembly language”. However, in most cases, the next step is to print a single character in the 8086 assembly language.
In an 8086 assembly language computer always works with registers of the microprocessor. in intel’s 8086 microprocessor, there are four basic general-purpose or data registers i.e.
Accumulator Register (AX)
Base Register (BX)
Counter Register (CX)
Data Register (DX)
Above mentioned registers are 16bit registers which means they consist of two bytes. These registers are further broken into ‘high byte’ and ‘low byte'. We can use them for any purpose we want. Look at the table below.
There are other types of registers as well, but for now, we will stick to them.
Now that we have an overview of Data registers, we can now write a simple assembly language program that prints single character output.
First, we write our basic program template, which does nothing but is very important and will always be used in each assembly program.
In the 8086 assembly language, a single character means one byte. Let’s say we want to print ‘A’ first, we need to move it to the data register, which is DX, and ‘A’ is one byte so that we will place it in the DL register. If you are confused, remember that if you want to print a single character, always move it to the ‘DL’ register.
MOV DL, ‘A’
MOV AH, 02H
INT 21H
Just add three lines in the above code, and you will see the output of the program. If you don't understand MOV AH, 02H and INT 21H, just go with it as at this point there is no need to get stuck to it. Just remember we write these three statements to display a single character. You just need to replace the ‘A’ in DL if you want to print something else.
Following is the complete code of above program
TITLE SINGLE_CHARACTER_PRINTING
.MODELSMALL
.STACK100H
.DATA
;;THIS IS DATA SECTION
.CODE
;THIS IS CODE SECTION
MAIN:
MOVAX, @DATA
MOVDS, AX
MOVDL, 'A'
MOVAH, 02H
INT21H
MOVAH, 04CH
INT21H
END MAIN
You should see output of the program as 'A'
If you have any question or trouble you can always choose to click Ask for Help section mentioned above.
This Program Prints the sum of a series, of a number which is input by the user.
TITLE PUCHTAA
.MODEL SMALL
.STACK 100H
.DATA
INTRO DB 0AH, 0DH, 07H, 09H, "THIS PROGRAM PRINTS THE SUM OF SERIES$"
MSG DB 0AH, 0DH, "ENTER A NUMBER: $"
NEWLINE DB 0AH, 0DH, "$"
DOAGAIN DB 0AH, 0DH, "DO AGAIN? Y FOR YES ELSE FOR NO: $"
.CODE
MAIN:
MOVAX, @DATA
MOVDS, AXLEADX, INTRO
MOVAH, 09H
INT 21H
NUMBER:
LEADX, MSG
MOVAH, 09H
INT 21H
MOVAH, 01H
INT 21H
SUBAL, 30H
CMPAL, 09H
JG NUMBER
MOVBL, ALMOVBH, ALPUSHBXCMPAL, 00H
JE RESULT
AGAIN:
DECBLADDBH, BLCMPBL, 00H
JG AGAIN
MOVAH, 00H
MOVAL, BHMOVBL, 0AH
DIVBLMOVBX, AXPOPCX
RESULT:
LEADX, NEWLINE
MOVAH, 09H
INT 21H
MOVCH, 00H
DISPLAY:
MOVDL,CHADDDL, 30H
MOVAH, 02H
INT 21H
MOVDL, '+'MOVAH, 02H
INT 21H
INCCHCMPCH, CLJLE DISPLAY
MOVDL, 08H
MOVAH, 02H
INT 21H
MOVDL, '='MOVAH, 02H
INT 21H
MOVDL,BLADDDL, 30H
MOVAH, 02H
INT 21H
MOVDL, BHADDDL, 30H
MOVAH, 02H
INT 21H
LEADX, DOAGAIN
MOVAH, 09H
INT 21H
MOVAH, 01H
INT 21H
ORAL, 20H
CMPAL, 'y'JE NUMBER
MOVAH, 4CH
INT 21H
END MAIN
This program prints simple text on screen in 8086 assembly language. Click to download the code
Printing a text in assembly language is very easy.
In assembly language we need to build a logic and then write a
program. In this program we only need to print a simple message for which we
have written this code.
1.First we write the title of program so that we can understand
the purpose of program
TITLE TEXT_MESSAGE
2.Then we define the model, model is the part of program which
tells assembler which model we need to use for our program. In this program we
are using SMALL,but there are many like
TINY, SMALL and LARGE
.MODEL SMALL
3.Then we define the stack of program. STACK usually tells
assembler that how much bytes we need to use for our DATA SEGMENT (explained
later). In this program we have used 100 bytes in hexadecimal
.STACK 100H
4.Now comes the DATA SEGMENT, which, we define as .DATA. in DATA
SEGMENTwe store our variables and
temporary data. For example our temporary bytes. In this program we have stored
an array of characters containing our message.
That’s how you define a array of characters (string) in
assembly.
NAME
TYPE
“MESSAGES$”
MSG
DB
0AH, 0DH, "TEXT MESSAGE$"
MSG is the name of message you can have any name, DB is DEFINE
BYTE (will be explained further in variables section) and then our text
message. You notice 0AH and 0DH these bytes are for carriage return and line
feed, now the message which is in quotes, be careful for dollar sign ($), which
is string terminator, do not forget to add it after every message.
5.After setting up DATA SEGMENT, CODE SEGMENT starts, which tells
assembler that our program has been started. We define CODE SEGMENT same as we
defined DATA SEGMENT.
.CODE
In the code segment first we define a label from which our
program starts, in this program we have defined MAIN: with colon. Then we move
starting address of DATA SEGMENT by using AX register in to DS register (will
be explained later programs). First move address to AX register then mov it
back to DS register.
MOV AX, @DATA
MOV DS, AX
6.To print the message we need to move its address to DX register
there are two way to do it but we will use OFFSET command to do it. After moving
address to DX register we store 09H byte in AH register to tell assembler that
we want to print a string. Now we invoke interrupt service routine by using INT
21H
MOVDX, OFFSET MSG
MOVAH, 09H
INT 21H
7.Now that we have completed the task of string printing we need
to tell assembler that where to end the program for this we simply define another
label name EXIT: with colon and move 4CH byte in AH register and invoke INT 21H
after this we use END MAIN (without colon)
Following code prints the table of the number which the user inputs. This program is an updated version of my previous program. In this program, I have adjusted output formatting as well. Feel free to copy the code and use it for your projects and assignments. Furthermore, if you have any queries do let me know in the comments section. Thanks