нужно очень срочно решить задачку, я вообще не понимаю этот ассемблер как бы не старалась, помогите пожалуйста кто разбирается!!! !
Ввести текст в байтовый массив. Осуществить замену строчных букв на прописные и вывести весь текст.
Текст вывести как в файл так и на экран. Имя файла берется из командной строки, если он задан, если нет, то запросить ввести имя файла.
ВУЗы и колледжи
помогите с Ассемблером
Вы заочница?
На дневной форме обучения такие "задачки" приравниваются к курсовой работе. А у заочников - это всего лишь рядовые задачки :D
32-разрядное консольное приложение Windows, компилятор MASM:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.stack 100h
.data
Prompt1 db 'Введите имя файла: ',0
Prompt2 db 'Введите текст: ',0
Result1 db 10,'Преобразованный текст: ',0
Result2 db 10,'Создан файл ',0
.data?
hStdIn dd ?
hStdOut dd ?
hFile dd ?
TxtBuff db 1026 dup (?)
BuffLength equ $ - TxtBuff
FileName db 65 dup (?)
NameLength equ $ - FileName
NameBuff db NameLength dup (?)
.code
N84943613:
invoke GetStdHandle,STD_INPUT_HANDLE
mov hStdIn,eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
invoke GetCommandLine
mov edi,eax
invoke lstrlenA,edi
mov ecx,eax
mov al,20h
repne scasb
jne NoFileName
mov esi,edi
lea edi,FileName
inc ecx
rep movsb
invoke lstrlenA,addr FileName
test eax,eax
jz NoFileName
mov ecx,eax
inc ecx
lea edi,NameBuff
lea esi,FileName
rep movsb
invoke CharToOem,addr FileName,addr FileName
jmp InputText
NoFileName:
lea esi,Prompt1
call Print
lea edi,FileName
mov ecx,NameLength
call Input
invoke OemToChar,addr FileName,addr NameBuff
InputText:
lea esi,Prompt2
call Print
lea edi,TxtBuff
mov ecx,BuffLength
call Input
lea esi,TxtBuff
invoke lstrlenA,esi
mov ecx,eax
mov edi,esi
DoLoop:
lodsb
mov bl,20h
cmp al,61h
jb CopyChar
cmp al,7Ah
jbe UpCase
cmp al,0A0h
jb CopyChar
cmp al,0AFh
jbe UpCase
cmp al,0E0h
jb CopyChar
add bl,30h
cmp al,0EFh
jbe UpCase
mov bl,1
cmp al,0F7h
ja CopyChar
UpCase:
sub al,bl
CopyChar:
stosb
loop DoLoop
lea esi,Result1
call Print
lea esi,TxtBuff
call Print
invoke CreateFile,addr NameBuff,GENERIC_WRITE,0,\
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax
invoke lstrlenA,addr TxtBuff
invoke WriteFile,hFile,addr TxtBuff,eax,addr hStdIn,0
invoke CloseHandle,hFile
lea esi,Result2
call Print
lea esi,FileName
call Print
invoke ExitProcess,0
Print proc
invoke lstrlenA,esi
invoke WriteConsole,hStdOut,esi,eax,0,0
ret
Print endp
Input proc
local Len
invoke ReadConsole,hStdIn,edi,ecx,addr Len,0
mov ecx,Len
mov al,0Dh
repne scasb
mov byte ptr [edi-1],0
ret
Input endp
end N84943613
P.S. Никакие ошибки не обрабатываются.
На дневной форме обучения такие "задачки" приравниваются к курсовой работе. А у заочников - это всего лишь рядовые задачки :D
32-разрядное консольное приложение Windows, компилятор MASM:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.stack 100h
.data
Prompt1 db 'Введите имя файла: ',0
Prompt2 db 'Введите текст: ',0
Result1 db 10,'Преобразованный текст: ',0
Result2 db 10,'Создан файл ',0
.data?
hStdIn dd ?
hStdOut dd ?
hFile dd ?
TxtBuff db 1026 dup (?)
BuffLength equ $ - TxtBuff
FileName db 65 dup (?)
NameLength equ $ - FileName
NameBuff db NameLength dup (?)
.code
N84943613:
invoke GetStdHandle,STD_INPUT_HANDLE
mov hStdIn,eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
invoke GetCommandLine
mov edi,eax
invoke lstrlenA,edi
mov ecx,eax
mov al,20h
repne scasb
jne NoFileName
mov esi,edi
lea edi,FileName
inc ecx
rep movsb
invoke lstrlenA,addr FileName
test eax,eax
jz NoFileName
mov ecx,eax
inc ecx
lea edi,NameBuff
lea esi,FileName
rep movsb
invoke CharToOem,addr FileName,addr FileName
jmp InputText
NoFileName:
lea esi,Prompt1
call Print
lea edi,FileName
mov ecx,NameLength
call Input
invoke OemToChar,addr FileName,addr NameBuff
InputText:
lea esi,Prompt2
call Print
lea edi,TxtBuff
mov ecx,BuffLength
call Input
lea esi,TxtBuff
invoke lstrlenA,esi
mov ecx,eax
mov edi,esi
DoLoop:
lodsb
mov bl,20h
cmp al,61h
jb CopyChar
cmp al,7Ah
jbe UpCase
cmp al,0A0h
jb CopyChar
cmp al,0AFh
jbe UpCase
cmp al,0E0h
jb CopyChar
add bl,30h
cmp al,0EFh
jbe UpCase
mov bl,1
cmp al,0F7h
ja CopyChar
UpCase:
sub al,bl
CopyChar:
stosb
loop DoLoop
lea esi,Result1
call Print
lea esi,TxtBuff
call Print
invoke CreateFile,addr NameBuff,GENERIC_WRITE,0,\
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax
invoke lstrlenA,addr TxtBuff
invoke WriteFile,hFile,addr TxtBuff,eax,addr hStdIn,0
invoke CloseHandle,hFile
lea esi,Result2
call Print
lea esi,FileName
call Print
invoke ExitProcess,0
Print proc
invoke lstrlenA,esi
invoke WriteConsole,hStdOut,esi,eax,0,0
ret
Print endp
Input proc
local Len
invoke ReadConsole,hStdIn,edi,ecx,addr Len,0
mov ecx,Len
mov al,0Dh
repne scasb
mov byte ptr [edi-1],0
ret
Input endp
end N84943613

P.S. Никакие ошибки не обрабатываются.
Похожие вопросы
- Помогите с написанием программы на АССЕМБЛЕРЕ!!! (внутри)
- Помогите решить задачу на ассемблере
- Рассчитать контрольную сумму строки, введённой пользователем. Задача на Ассемблере.
- Помогите составить небольшую программу на ассемблере
- помогите пожалуйста написать программу на ассемблере вычислить D = (A*B)*B E = (A-B)*(C-A)/B
- Ассемблер. Циклы. Найти кол-во числе больше 10h (10 в 16ой системе) . Массив слов
- Нужна помощь с Ассемблером!!!!
- Срочно нужна помощь в Tasm( язык ассемблер).
- Составить программу на Ассемблере для вычисления выражения
- Написать программу для перевода введённого с клавиатуры шестнадцатеричного числа в десятичное на ассемблере (MASM).