Error: invalid instruction operands masm32 - Assembler
Формулировка задачи:
ошибку выдает в 58 строке. не понимаю почему.
.386 .model flat,STDCALL option casemap :none ;case sensitive include E:\masm32\include\windows.inc include E:\masm32\include\masm32.inc include E:\masm32\include\gdi32.inc include E:\masm32\include\user32.inc include E:\masm32\include\kernel32.inc include E:\masm32\include\msvcrt.inc includelib E:\masm32\lib\masm32.lib includelib E:\masm32\lib\gdi32.lib includelib E:\masm32\lib\user32.lib includelib E:\masm32\lib\kernel32.lib includelib E:\masm32\lib\msvcrt.lib tovar STRUC nom db 20 dup (?) kod db ? kst db ? date db 10 dup (?) tovar ends .data n equ 5 base tovar <"Tovar1", 74, 125, "10.12.2012">, \ <"Tovar2", 25, 95, "27.07.1999">, \ <"Tovar3", 13, 16, "10.06.1999">, \ <"Tovar4", 65, 47, "11.01.2025">, \ <"Tovar5", 92, 10, "23.12.2002"> swap tovar <> nom_len dw 6 date_len dw 10 .code start: xor cx, cx j2: mov cl, n dec cl c0: mov bx, cx mov al, base[bx].kod cmp al, base[bx-1].kod ja j1 loop c0 jmp j0 j1: push cx mov cx, nom_len mov edi, offset swap.nom mov esi, base[bx].nom jmp j2 jmp c0 j0: invoke ExitProcess, 0 end start
Решение задачи: «Error: invalid instruction operands masm32»
textual
Листинг программы
esi:=offset A[4] edi:=offset A[15] for i:=0 to sizeof(tovar)-1 temp:=byte ptr [esi] byte ptr [esi]:=[edi] [edi]:= byte ptr temp esi:=esi+1 edi:=edi+1 end
Объяснение кода листинга программы
В данном коде на языке Assembler происходит следующая последовательность действий:
esi := offset A[4]
- значение переменнойesi
устанавливается в смещение для элемента массиваA
с индексом 4.edi := offset A[15]
- значение переменнойedi
устанавливается в смещение для элемента массиваA
с индексом 15.for i := 0 to sizeof(tovar)-1
- выполняется цикл от 0 до размера переменнойtovar
минус 1.temp := byte ptr [esi]
- значение переменнойtemp
устанавливается в байт, на который указывает смещение в памяти, хранящееся в переменнойesi
.byte ptr [esi] := [edi]
- байт, на который указывает смещение в памяти, хранящееся в переменнойesi
, присваивается значению переменной[edi]
.[edi] := byte ptr temp
- значение переменной[edi]
присваивается значению переменнойtemp
, которое является байтом.esi := esi + 1
- значение переменнойesi
увеличивается на 1.edi := edi + 1
- значение переменнойedi
увеличивается на 1. Данный код выполняет перестановку байтов в двух указанных элементах массиваA
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д