Неопределенный раздел .data для ASM - PullRequest
0 голосов
/ 19 апреля 2019

Я получил ошибку при попытке компилировать этот ASM

Write an assembly program to implement the following. 
while X > 0
if  X != 3 AND (X > A OR X <B)
X = X –2
else
X = X –1
end while

Использовать оценку короткого замыкания. Предположим, что A, B и X являются 16-разрядными целочисленными переменными со знаком. Предположим, что A = 9, B = 8 и X = 11

Я получил .code область, но мне не хватает .data?

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data
     ; declare variables here
     X WORD ?

.code
main proc
     ; write your code here
     mov eax, X
     beginwhile:
     cmp eax, 0
     jng endwhile
     mov ebx,A
     mov ecx,B
     cmp X,3
     jne L1
     jmp L3
     jmp endwhile
L1:  
    cmp X, ebx
    jl L2
    cmp X,ecx
    jg L2
    jmp L3
    jmp endwhile
L2:
    mov X, X-2
    jmp endwhile
L3:
    mov X, X-1
    jmp endwhile
    endwhile:
    mov X, eax

    invoke ExitProcess,0
main endp
end main

1 Ответ

0 голосов
/ 19 апреля 2019

Поскольку это помечено в Visual Studio, я бы предположил, что используется MASM (ML.EXE), и в этом случае можно использовать директивы с точками, но я не уверен, что это будет целью задания.Операторы директивы точка должны быть переведены в реальные инструкции, поэтому сравнение памяти с памятью недопустимо.

Тем не менее, заголовок и вопрос задаются относительно раздела неинициализированных данных, который является .data?, И показан вэтот пример.

        .data?
;                   ;for signed word, use sword instead of word
A       word    ?
B       word    ?
X       word    ?

        .code
;       ...    
        mov     ax,A
        mov     bx,B
        .while  (X > 0)
          .if     (X != 3) && (X > ax || X < bx)
            sub     X,2
          .else
            sub     X,1
          .endif
        .endw
;       ...    
...