0

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

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

它在“输入数据库”处崩溃,说“无效参数”。如果我将其更改为“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
4

1 回答 1

2

该行mov input, al试图将 al 移动到该行定义的值中input db 0,例如编译器将其转换为mov 0, al. 您想要做的是将 al 移动到“输入”位置,所以我想(ASM 编码是前一段时间对我来说)mov [input], al或者mov 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 
于 2011-01-05T18:58:52.933 回答