Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
Об'яcните строки программы
Вот задания
Разработать программу,которая должна позволять ввести две строки S1 и S2 произвольной одинаковой длины. Сформировать строку C в обратном порядке,а потом четные элементы строки S1 в прямом порядке.Разпечатать исходные строки S1 и S2,а также результующую строку С.
Вот код
Цитата:
.486
.model flat, stdcall
option casemap:none
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
STD_INPUT_HANDLE equ -10
STD_OUTPUT_HANDLE equ -11
STD_ERROR_HANDLE equ -12
.data?
data_string1 db 2000 dup (?)
data_string2 db 2000 dup (?)
len_str1 dd ?
len_str2 dd ?
data_stringC db 2000 dup (?)
data_stringChet db 2000 dup (?)
handle_output dd ?
handle_input dd ?
G_temp dd ?
I_temp dd ?
.data
text_inp1 db 'Ввести строку S1:',00Dh,00Ah,000h
text_inp2 db 'Ввести строку S2:',00Dh,00Ah,000h
out_text db 'Press Enter to exit',00Dh,00Ah,000h
End_str db 00Dh,00Ah,000h
.code
;-----------------------------------------------------------------------------
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [handle_output], eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov [handle_input], eax
invoke WriteConsoleA, [handle_output], offset [text_inp1], (SIZEOF text_inp1)-1, offset [G_temp], 0
invoke ReadConsoleA, [handle_input], offset [data_string1], 2000, offset [G_temp], 0
mov ecx, [G_temp]
sub ecx, 2
mov [len_str1], ecx
lea esi, [data_string1]
add esi, ecx
mov byte ptr [esi], 0
invoke WriteConsoleA, [handle_output], offset [text_inp2], (SIZEOF text_inp2)-1, offset [G_temp], 0
invoke ReadConsoleA, [handle_input], offset [data_string2], 2000, offset [G_temp], 0
mov ecx, [G_temp]
sub ecx, 2
mov [len_str2], ecx
lea esi, [data_string2]
add esi, ecx
mov byte ptr [esi], 0
lea esi, [data_string1]
lea edi, [data_stringC]
mov ecx, [len_str1]
add esi, ecx
dec esi
next_fieldC:
cmp ecx, 0
je end_fieldC
mov al, byte ptr [esi]
mov byte ptr [edi], al
dec esi
inc edi
dec ecx
jmp next_fieldC
end_fieldC:
mov byte ptr [edi], 0
lea esi, [data_string1]
lea edi, [data_stringChet]
mov ecx, [len_str1]
inc esi
dec ecx
next_fieldChet:
cmp ecx, 0
jle end_fieldChet
mov al, byte ptr [esi]
mov byte ptr [edi], al
add esi, 2
inc edi
sub ecx, 2
jmp next_fieldChet
end_fieldChet:
mov byte ptr [edi], 0
invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0
invoke lstrlen, addr [data_string1]
inc eax
invoke WriteConsoleA, [handle_output], offset [data_string1], eax, offset [G_temp], 0
invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0
invoke lstrlen, addr [data_string2]
inc eax
invoke WriteConsoleA, [handle_output], offset [data_string2], eax, offset [G_temp], 0
invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0
invoke lstrlen, addr [data_stringC]
inc eax
invoke WriteConsoleA, [handle_output], offset [data_stringC], [len_str1], offset [G_temp], 0
invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0
invoke lstrlen, addr [data_stringChet]
inc eax
invoke WriteConsoleA, [handle_output], offset [data_stringChet], eax, offset [G_temp], 0
invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0
exit_proga:
invoke WriteConsoleA, [handle_output], offset [out_text], (SIZEOF out_text)-1, offset [G_temp], 0
invoke ReadConsoleA, [handle_input], offset [I_temp], 1, offset [G_temp], 0
invoke ExitProcess, 0
end start
|
напишите пожалуста коментари к коду!!!
|