In this blog post, we’ll explore how to perform a block transfer using an 8086 assembly language program. The following code snippet demonstrates this process:
DATA SEGMENT
STRING1 DB 01H,02H,03H,04H,05H
STRING2 DB 4 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STRING1
LEA DI,STRING2
MOV CX,05H
CLD
REP MOVSB
INT 3
CODE ENDS
END START
This C++ program determines whether a given number is even or odd using 8086-style inline assembly. It utilizes the div instruction to divide the number by 2 and then checks the remainder stored in the dx register.
#include<iostream.h>
#include<conio.h>
void main() {
clrscr();
int a, res;
cout << "\n Enter a number";
cin >> a;
asm mov ax, a // Move input number into AX
asm mov bx, 02h // Move divisor 2 into BX
asm div bx // Divide AX by BX, quotient in AX, remainder in DX
asm mov res, dx // Store remainder in res
if(res == 0) {
cout << "\n Even";
} else {
cout << "\n Odd";
}
getch();
}
This program demonstrates how to use inline 8086 assembly in C++ to determine whether a given number is positive or negative. It’s a great way to understand how conditional branching works at the assembly level.
#include<iostream.h>
#include<conio.h>
void main() {
clrscr();
int a;
cout << "\n Enter a number:";
cin >> a;
asm mov ax, 0000h // Clear AX
asm mov ax, a // Move user input into AX
asm cmp ax, 0000h // Compare AX with 0
asm jl less // Jump to 'less' if AX < 0
asm jge greater // Jump to 'greater' if AX >= 0
less:
cout << "\n Number is negative";
asm jmp end
greater:
cout << "\n Number is positive";
end:
getch();
}
This program demonstrates how to calculate the square, cube, or factorial of a number using 8086 inline assembly in C++. It presents a menu-based approach for the user to choose an operation and performs the calculation using the mul instruction in assembly.
This post walks through a C++ program that demonstrates how to perform basic arithmetic operations like multiplication and division using inline assembly. It allows the user to choose between signed/unsigned multiplication and division in a loop until they decide to exit.
While modern high-level languages like C++ abstract away many low-level operations, sometimes it’s useful to get closer to the hardware to understand how things work under the hood. This example demonstrates how to subtract two 8-bit numbers using inline assembly in a simple C++ program.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main() {
clrscr();
short int a, b, c;
cout << "Enter First Number:";
cin >> a;
cout << "Enter Second Number:";
cin >> b;
asm mov ax, a // Move 'a' into AX
asm mov ah, 00h // Ensure AH is cleared
asm mov bx, b // Move 'b' into BX
asm mov bh, 00h // Ensure BH is cleared
asm sub al, bl // Subtract BL from AL
asm mov c, ax // Store result in 'c'
cout << "Result:";
cout << c;
getch();
}
In this blog post, we’ll explore how to search for an element in an array using an 8086 assembly language program. The following code snippet demonstrates this process:
DATA SEGMENT
STRING1 DB 11H,22H,33H,44H,55H
MSG1 DB "FOUND$"
MSG2 DB "NOT FOUND$"
SE DB 33H
DATA ENDS
PRINT MACRO MSG
MOV AH, 09H
LEA DX, MSG
INT 21H
INT 3
ENDM
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AL, SE
LEA SI, STRING1
MOV CX, 04H
UP:
MOV BL,[SI]
CMP AL, BL
JZ FO
INC SI
DEC CX
JNZ UP
PRINT MSG2
JMP END1
FO:
PRINT MSG1
END1:
INT 3
CODE ENDS
END START