ASM 的未定义 .data 部分



当我试图编译这个 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

由于这是用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
;       ...    

相关内容

最新更新