【发布时间】:2020-08-10 04:23:49
【问题描述】:
我找到了这个 ASM 例程来获取按键。 ASM routine to get key pressed 现在我想将它包含到 Turbo Basic 例程中,但不知道如何执行此操作。这里有人可以告诉我它是如何完成的吗?谢谢
编辑:我找到了一种方法:$INLINE,但是如何将我的 asm 代码转换为机器语言,以便将其内联到我的基本程序中?
编辑:我没有成功地将这个带有 Asm 代码的 QBASIC 放入 TURBO BASIC 程序中。我会很感激任何帮助如何做到这一点:
DECLARE FUNCTION GetKeyH% ()
CLS
DO
LOCATE 10, 10
PRINT "Key = "; HEX$(GetKeyH%); " "
LOOP UNTIL INKEY$ = CHR$(27)
END
和 ASM 部分:
Dosseg
.model medium, basic
.286
.stack
.code
Even
public getkeyh ; make getkeyh public
getkeyh proc far basic uses bp dx ; save registers
in al,60h
xchg dx,ax
xor ax,ax ; assume no key
test dl,10000000b
jnz short getkeyhD
mov al,dl
getkeyhD: ret
getkeyh endp ; end of procedure
end ; end of assembly code
编辑:非常感谢下面 Michael Petch 先生的回答。此外,我可以看到这个 ASM 例程也是CTL and ALT KEYS pressed的解决方案@
【问题讨论】:
-
这个问题让你看起来像是一个 30 年前的时间旅行者。您有哪些可用于 Turbo Basic 的资源?你搜索过什么?你试过什么?请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请学习如何edit你的问题来改进它们,比如展示你自己尝试的minimal reproducible example。
-
是的,我知道这是 30 年前的话题,我想我可以通过 include 或 poke 将一些 ASM 行直接添加到程序中。所以这个问题只针对那些在 30 年前还学过基础知识的老怪胎。
-
您可以使用像 NASM 这样的汇编程序来生成机器代码,然后您只需将其转换为内联汇编语句中的字节即可。您还可以获取内联汇编中的字节并生成二进制文件并查看反汇编以了解示例中的代码的作用。
&H仅表示十六进制值,后面的 2 位数字是十六进制数字。 -
您也可以创建 COM 程序,并使用
$INLINE语句将它们包含在基本程序中。这可能更方便,因为您不需要在机器代码和字节之间进行转换,反之亦然。它只是从一个简单的 DOS COM 程序中读取的内联程序集。文档附录 C 中的汇编语言接口部分提供了很多附加信息。 -
那么就可以直接输出为BIN格式了。
nasm -f bin first.asm -o first.com。在 first.asm 的顶部放置org 0x100,然后是汇编代码。无论您做什么,都不要在末尾添加ret。字节将直接加载到 turbo basic 程序中,turbo basic 将提供返回给调用者的机制。org 0x100并不是必需的,因为 inline 不能在 com 程序中使用绝对内存位置
标签: assembly keyboard dos x86-16 turbo-basic