Другие языки программирования и технологии
Помогите!!! задача ассемблер.
Вводится матрица 4*4.Найти произведение элементов на побочной диагонали,которые - являются палендромом.И вывести произведение на экран.
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 200h
.data
Prompt db 'Введите элементы матрицы: ',13,10,0
txtElem db 'A(%u,%u): ',0
ResNo db 'Нет палиндромов на побочной диагонали',0
Result db 'Произведение элементов-палиндромов побочной диагонали = %u',0
hStdIn dd ?
hStdOut dd ?
Array dd 4 dup (4 dup (?))
Buff db 80 dup (?)
.code
InputInt proc
push edx
push ecx
push esi
lea esi,Buff+4
invoke ReadConsole,hStdIn,esi,12,addr Buff,0
mov ecx,dword ptr Buff
xor edx,edx
BegConv:
lodsb
cmp al,0Dh
je EndConv
sub al,30h
movzx eax,al
imul edx,10
add edx,eax
loop BegConv
EndConv:
mov eax,edx
pop esi
pop ecx
pop edx
ret
InputInt endp
Print proc
push ebp
mov ebp,esp
push ecx
invoke lstrlenA,[ebp+8]
invoke WriteConsole,hStdOut,[ebp+8],eax,0,0
pop ecx
pop ebp
ret 4
Print endp
N69882851:
invoke GetStdHandle,STD_INPUT_HANDLE
mov hStdIn,eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
push offset Prompt
call Print
mov ebx,1
lea esi,Array
mov ecx,4
RowLoop:
push ecx
xor edi,edi
mov ecx,4
ColLoop:
push ecx
inc edi
invoke wsprintfA,addr Buff,addr txtElem,ebx,edi
push offset Buff
call Print
dec edi
call InputInt
mov [esi+edi*4],eax
inc edi
pop ecx
loop ColLoop
inc ebx
add esi,16
pop ecx
loop RowLoop
mov ecx,4
lea esi,Array+12
mov ebp,0
mov ebx,10
DiagLoop:
xor edi,edi
mov eax,[esi]
or eax,eax
jz NoPlnd
PlndLoop:
cdq
div ebx
imul edi,ebx
add edi,edx
or eax,eax
jnz PlndLoop
cmp edi,[esi]
jne NoPlnd
cmp ebp,1
adc ebp,0
imul ebp,edi
NoPlnd:
add si,12
loop DiagLoop
or ebp,ebp
jz NoResult
invoke wsprintfA,addr Buff,addr Result,ebp
push offset Buff
jmp OutRes
NoResult:
push offset ResNo
OutRes:
call Print
call InputInt
invoke ExitProcess,0
end N69882851
P.S. Программа не проверяет корректность ввода и переполнение при умножении.
.386
.model flat, stdcall
option casemap: none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.stack 200h
.data
Prompt db 'Введите элементы матрицы: ',13,10,0
txtElem db 'A(%u,%u): ',0
ResNo db 'Нет палиндромов на побочной диагонали',0
Result db 'Произведение элементов-палиндромов побочной диагонали = %u',0
hStdIn dd ?
hStdOut dd ?
Array dd 4 dup (4 dup (?))
Buff db 80 dup (?)
.code
InputInt proc
push edx
push ecx
push esi
lea esi,Buff+4
invoke ReadConsole,hStdIn,esi,12,addr Buff,0
mov ecx,dword ptr Buff
xor edx,edx
BegConv:
lodsb
cmp al,0Dh
je EndConv
sub al,30h
movzx eax,al
imul edx,10
add edx,eax
loop BegConv
EndConv:
mov eax,edx
pop esi
pop ecx
pop edx
ret
InputInt endp
Print proc
push ebp
mov ebp,esp
push ecx
invoke lstrlenA,[ebp+8]
invoke WriteConsole,hStdOut,[ebp+8],eax,0,0
pop ecx
pop ebp
ret 4
Print endp
N69882851:
invoke GetStdHandle,STD_INPUT_HANDLE
mov hStdIn,eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
push offset Prompt
call Print
mov ebx,1
lea esi,Array
mov ecx,4
RowLoop:
push ecx
xor edi,edi
mov ecx,4
ColLoop:
push ecx
inc edi
invoke wsprintfA,addr Buff,addr txtElem,ebx,edi
push offset Buff
call Print
dec edi
call InputInt
mov [esi+edi*4],eax
inc edi
pop ecx
loop ColLoop
inc ebx
add esi,16
pop ecx
loop RowLoop
mov ecx,4
lea esi,Array+12
mov ebp,0
mov ebx,10
DiagLoop:
xor edi,edi
mov eax,[esi]
or eax,eax
jz NoPlnd
PlndLoop:
cdq
div ebx
imul edi,ebx
add edi,edx
or eax,eax
jnz PlndLoop
cmp edi,[esi]
jne NoPlnd
cmp ebp,1
adc ebp,0
imul ebp,edi
NoPlnd:
add si,12
loop DiagLoop
or ebp,ebp
jz NoResult
invoke wsprintfA,addr Buff,addr Result,ebp
push offset Buff
jmp OutRes
NoResult:
push offset ResNo
OutRes:
call Print
call InputInt
invoke ExitProcess,0
end N69882851
P.S. Программа не проверяет корректность ввода и переполнение при умножении.
Похожие вопросы
- Помогите с ассемблером (задачей про матрицы) внутри...
- Помогите по ассемблеру
- Задача ассемблер
- Архитектура ЭВМ помогите с ассемблером
- Помогите с ассемблером
- Помогите с ассемблером
- помогите с Ассемблером
- помогите с ассемблером. если можно с объяснениями...огромное спасибо
- помогите с ассемблером (i8085) Программа должна считать количество нулей в ячейке. Какие команды использовать?
- Помогите с Ассемблером пожалуйста