Lab 1: Основы ассемблера #1

Open
ElectronixTM wants to merge 13 commits from labs/01 into main
Showing only changes of commit 34d0c33e87 - Show all commits

View File

@ -1,33 +1,36 @@
#include <bios.h>
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define PortCan0 0x40
void beep(unsigned iTone, unsigned iDlit);
int main(void) {
void delay(unsigned int ms)
{
usleep(ms * 1000);
}
int main(void) {
long int lCnt = 0;
int iA = 0x1234;
char *pT = (char *)0x46C;
printf("\n\n");
printf("\nПечатаем 10 раз значение байта с известным адресом\n");
for (int i = 0; i < 10; i++)
printf(" \n %d ", *pT);
printf("\n\n");
getch();
printf("\n Для продолжения нажмите любую клавишу \n");
system("pause"); // Ждем нажатия клавиши
printf("\n <EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 40 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20><> \n");
printf("\n <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><><E6A8AA> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \n");
printf("\n Читаем содержимое порта с адресом 40 с помощью функции Си \n");
printf("\n Для выхода из цикла - нажмите любую клавишу \n");
while (bioskey(1) == 0) {
printf(" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>40 = %d ", inp(PortCan0));
printf("\n Порт40 = %d", inp(PortCan0));
delay(500);
}
getch();
printf("\n <EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 40 <20><><EFBFBD><E1A5AC><EFBFBD> \n");
system("pause");
printf("\n Читаем содержимое порта с адресом 40 ассемблером \n");
while (bioskey(1) == 0) {
asm {
@ -35,27 +38,32 @@ int main(void) {
in al,0x40
}
unsigned char Tmm = _AL;
asm pop ax delay(500);
printf(" \n <20><><EFBFBD><EFBFBD>40 = %d ", Tmm);
asm pop ax
delay(500);
printf("\n Порт40 = %d", Tmm);
}
getch();
printf("\n <EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \n ");
getch();
system("pause");
printf("\n Для продолжения - нажмите любую клавишу \n");
system("pause");
long far *pTime = (long *)0x46C;
long *pTime = (long *)0x46C;
while (bioskey(1) == 0) {
printf("\n %ld", *pTime);
delay(1000);
}
getch();
system("pause");
int Time;
while (bioskey(1) == 0) {
asm push ds asm push si
asm mov ax,
40h asm mov ds, ax asm mov si, 0x6C asm mov ax, [ds : si] asm mov Time,
ax asm pop si asm pop ds
asm push ds
asm push si
asm mov ax, 40h
asm mov ds, ax
asm mov si, 0x6C
asm mov ax, [ds : si]
asm mov Time, ax
asm pop si
asm pop ds
printf("\n %d", Time);
delay(300);
@ -64,7 +72,8 @@ int main(void) {
beep(400, 200);
for (lCnt = 0; lCnt < 1000000; lCnt++) {
a1:
asm { mov ax,iA
asm {
mov ax,iA
mov ax,iA
mov ax,iA
mov ax,iA