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 происходит следующая последовательность действий:

  1. esi := offset A[4] - значение переменной esi устанавливается в смещение для элемента массива A с индексом 4.
  2. edi := offset A[15] - значение переменной edi устанавливается в смещение для элемента массива A с индексом 15.
  3. for i := 0 to sizeof(tovar)-1 - выполняется цикл от 0 до размера переменной tovar минус 1.
  4. temp := byte ptr [esi] - значение переменной temp устанавливается в байт, на который указывает смещение в памяти, хранящееся в переменной esi.
  5. byte ptr [esi] := [edi] - байт, на который указывает смещение в памяти, хранящееся в переменной esi, присваивается значению переменной [edi].
  6. [edi] := byte ptr temp - значение переменной [edi] присваивается значению переменной temp, которое является байтом.
  7. esi := esi + 1 - значение переменной esi увеличивается на 1.
  8. edi := edi + 1 - значение переменной edi увеличивается на 1. Данный код выполняет перестановку байтов в двух указанных элементах массива A.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5