ASM的未定义.data节

时间:2019-04-18 23:43:21

标签: visual-studio assembly x86 irvine32

尝试编译此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 :(得分:0)

因为这是用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
;       ...