ТОР 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";}
Не нашли, что искали? Воспользуйтесь поиском:
|