Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Перевод из одной системы исчисления в другую




.model small

.stack 100h

.data

number DW 47

base DW 16

str_res DB 'Результат: $'

.code

start:

my_proc PROC

mov ax, @Data

mov ds, ax

lea dx,str_res

mov ah,9h

int 21h

call convert

mov ah, 4ch

int 21h

 

my_proc ENDP

convert PROC

push ax

push cx

push dx

mov ax, @Data

mov ds, ax

mov ax, number

sub cx, cx

again:

sub dx, dx

div base

inc cx

cmp ax, 0

jne again

output:

pop dx

add dx, 30h

cmp dx

jle number_9

 

number_9:

mov ah, 2

int 21h

 

loop output

pop dx

pop cx

pop ax

ret

convert ENDP

 

 

7. Программа на Asm. Заданы две строки, скопировать в 3-ю те символы первой, кот. есть во второй. Определить число символов в результирующей строке.

.model small

.Stack 100h

.data

String1 db ‘ab123cd45’

String2 db ‘0123456789’

N1 db 9; длина 1-й строки

N1 db 10; длина 2-й строки

Res db 9 dup (?)

N db?

.code

Mov ax,@data

Mov ds,ax

Lea di,res

Mov ax,0

Mov cx,n1

Lea si,string1

Fori: push cx

Lea bx,string2

Mov cx,n2

Forj: mov dl,[si]

Cmp dl,[bx]

Jne nextj

Mov [di],dl

Inc ax

Inc di

Jmp breakj

Nextj: inc bx

Loop forj

Breakj: pop cx

Inc si

Loop fori

Mov n,ax

Mov ah,4ch

Int21h

end

СПИОС

1 Розробити консольну програму, яка відкриває файл порціями по 4Кб та відображае його зміст в вікні. Для роботи з файлами викорастати Win32 Api

#include <windows.h>

#include <tchar.h>

#ifndef UNICODE

#include <stdio.h>

#endif

#define BUFFERSIZE 0x1000

int_tmain(int argc, TCHAR * argv[])

{

TCHAR szFile[_MAX_PATH];

HANDLE hReadFile;

_tprintf(_T(“Имя файла”));

_getts (szFile);

hReadFile = CreateFile(szFile, GENERIC_READ,0,(LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATRIBUTE_NORMAL, (HANDLE) NULL);

if(hReadFile==INVALID_HANDLE_VALUE) {

_tprintf(_T(“Ошибка открытия файла”));

return;}

else

{

//считать порциями по 4 Кб и отобразить на экран

BYTE buffer[BUFFERSIZE];

DWORD dwRead;

do

{BOOL fRead = ReadFile(hReadFile, buffe, BUFFERSIZE, &dwRead, NULL);

If(fRead ==FALSE)

{

_tprintf(_T(“Ошибка чтения”));

break;}

else if(dwRead == 0)

{_tprintf(_T(“\r EOF обнаружен\n”));

break;}

else{

//отобразить данные

DWORD ndx;

For(ndx=0; ndx<dwRead;ndx++)

{_tprintf(_T(“%c [%#2.2hx]\t”),buffer[ndx], (USHORT) buffer[ndx]);}}}

while(dwRead == BUFFERSIZE);

CloseHandle(hReadFile);

Return 1;}

 

 

2 Написать 2 варианта запуска Notepad.exe для обработки файла

#include "iostream.h"

#include "string.h"

#include "windows.h"

void main()

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

char FileName[100],CmdLine[100];

strcpy(CmdLine,"Notepad.exe");

cout<<"Text file name: ";

cin>>FileName; // ввод названия текстового файла

ShellExecute(NULL,NULL,CmdLine,FileName,NULL,SW_SHOW); // вариант №1

strcat(CmdLine," ");// формируем содержимое командной строки

strcat(CmdLine,FileName);

WinExec(CmdLine,SW_SHOW); // вариант №2

ZeroMemory(&si,sizeof(si)); // устанавливаем нужные параметры в структуре STARTUPINFO

si.cb=sizeof(si);

si.wShowWindow=SW_SHOW;

si.dwFlags=STARTF_USESHOWWINDOW;

CreateProcess(NULL,CmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); // вариант №3}

 

3 Написать 2 конс. Программы Master и Slave. Master запускает Slave и передает ей через ком. строку дескриптор своего процесса. Slave ожидает окончания работы Master и выдает сообщение.

// Master.exe

#include "iostream.h"

#include "string.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{

char cmd[100];

if(argc!=1) strcpy(cmd,argv[1]);

else strcpy(cmd,"slave.exe");

int pid=GetCurrentProcessId();

sprintf(cmd+strlen(cmd)," %d",pid);

cout<<"Master:Starting, PID="<<pid<<"\n";

cout.flush();

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory(&si,sizeof(si));

si.cb=sizeof(si);

si.wShowWindow=SW_HIDE;

si.dwFlags=STARTF_USESHOWWINDOW;

if(!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL,&si,&pi))

{cout<<"Master:Slave not loaded\n";

cout.flush();}

cout<<"Master:Sleeping\n"; cout.flush();

Sleep(5000);

cout<<"Master:Exiting\n"; cout.flush();

}

//--------------------------

//Slave.exe

#include "iostream.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{cout<<"Slave:Started\n"; cout.flush();

if(argc!=2)

{cout<<"Slave:Load Master.exe first\n";

cout<<"Slave:Finishing\n";

exit(1);}

int pid=atoi(argv[1]);

HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|SYNCHRONIZE,FALSE,pid);

if(!hProcess)

{cout<<"Slave:Open process error\n"; cout.flush();

}

else

{cout<<"Slave:Waiting for master finishing\n";

cout.flush();

if(WaitForSingleObject(hProcess,INFINITE)==STATUS_WAIT_0)

{cout<<"Slave:Master finished\n";

cout.flush();}

else

{cout<<"Slave:Unknown error\n";

cout.flush();}}

cout<<"Slave:Finishing\n";}

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных