无法写入变量(ASM)

时间:2011-01-05 18:39:44

标签: assembly mov

我正在尝试学习汇编程序并遵循教程,并且第一个示例完美运行。我知道一些基础知识,但我遇到变量问题。这是我正在尝试编译的代码:

leftbr db "("
rightbr db ")"
input db

start:
mov ah,08
int 21h
mov input,al

output:
mov dl,leftbr
mov ah,02
int 21h
mov dl,key
int 21h
mov dl,rightbr
int 21h

exit:
mov ah,4ch
mov al,00
int 21h

它在“输入db”处崩溃,说“无效参数”。如果我将其更改为“input db”“”,那么它会在“mov input,al”声称“无效的操作数”时崩溃。我将其更改为以下内容,现在可以正常使用。

start:
mov ah,08
int 21h
mov [input],al

output:
mov [leftbr], "("
mov [rightbr], ")"
mov dl,[leftbr]
mov ah,02
int 21h
mov dl,[input]
int 21h
mov dl,[rightbr]
int 21h

exit:
mov ah,4ch
mov al,00
int 21h

leftbr db 0
rightbr db 0
input db 0

1 个答案:

答案 0 :(得分:2)

mov input, al尝试将al移动到行input db 0定义的值,例如编译器将其转换为mov 0, al。您想要做的是移动到位置“输入”,所以我猜(ASM编码是我前一段时间)mov [input], almov byte ptr:[input], al会更好用。

编辑:这是为我显示“(a)”的内容。为Windows运行CrunchBang Linux / Wine / FASM。

format MZ
org 0x100

jmp start
leftbr db "(", 0
rightbr db ")"
input db "a"

start:
xor ax,ax
mov ah,08
;int 21h ; commenting this line because wine doesn't seem to like it
;mov [input],al

output:
mov dl,byte [leftbr]
mov ah,02
int 21h
mov ah,02 ; not sure if ah gets modified, probably not
mov dl,[input]
int 21h
mov ah,02
mov dl,[rightbr]
int 21h

exit:
mov ah,4ch
mov al,00
int 21h