如何将 ASM 程序包含到我的 Turbo Basic 程序中?

2023-12-21

我找到了这个 ASM 例程来按下按键。用于按下按键的 ASM 例程 http://www.fysnet.net/kbuffio.htm现在我想将其包含到 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

编辑:非常感谢下面迈克尔·佩奇先生的回答。此外,我可以看到这个 ASM 例程也是一个解决方案按下 CTL 和 ALT 键 https://stackoverflow.com/questions/63206937/is-there-a-way-to-read-the-keyboard-modifier-key-such-as-alt-or-ctrl-in-dos-base


您可以使用DEBUG.COM输入汇编代码,然后执行十六进制转储以获取机器代码。

它看起来像这样:

D:\>DEBUG
-A 100
0ABD:0100 IN AL,60
0ABD:0102 XCHG DX,AX
0ABD:0103 XOR AX,AX
0ABD:0105 TEST DL,80
0ABD:0108 JNZ 10C
0ABD:010A MOV AL,DL
0ABD:010C RET
0ABD:010D
-R CX
CX 0000  :D
-N KEY.COM
-W
Writing 000D bytes
-Q

D:\>HEXDUMP KEY.COM
00000000    E4  60  92  31  C0  F6  C2  80  75  02  88  D0  C3                  .`.1....u....

D:\>

这样现在您就可以封装每个机器代码了$INLINE.

$INLINE &HE4, &H60, &H92, &H31, &HC0, &HF6, &HC2, &H80, &H75, &H02, &H88, &HD0 

正如 @Michael Petch 所建议的,不要包含最后的机器代码(&HC3) 在你的$INLINE元陈述。

注意:虽然HEXDUMP.EXE是我自己的程序,您可以轻松地找到互联网上可用的任何十六进制编辑器来查看二进制文件的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 ASM 程序包含到我的 Turbo Basic 程序中? 的相关文章

随机推荐

  • 当 C 说全局变量的启动值为零时,是否也意味着结构成员?指针的初始值是多少?

    当 C 说全局 static 变量的启动值为零时 是否也意味着结构成员 全局 静态 指针的初始值是多少 无效的 是的 这是由 C99 6 7 8p10 指定的 如果一个对象具有自动 存储期限未初始化 明确地 它的值是 不定 如果一个对象有
  • 打印 char 数组的一部分

    So char someCArray something 我想从 某物 中打印出 ethin 您可以使用printf精度说明符 include
  • 在循环中替换 Pandas 数据框中的值

    我正在尝试循环遍历 pandas 数据框 并在某些列中的值满足某些条件时替换它们 我意识到一般有更直接的方法可以做到这一点 但在我的具体示例中 我需要一个循环 因为一行的结果可能取决于前一行 下面是一个可重现的错误示例 当我尝试替换文本时
  • `.map(f)` 和 `.map(|x| f(x))` 有什么区别?

    做的时候沙沙声standard library types iterators2 rs https github com rust lang rustlings blob main exercises standard library ty
  • 替换SWF中的字符串[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们已经为大型 Flash 项目的不同客户修改了数十个 SWF 版本 现在必须替换每个副本中脚本中嵌入的
  • 将 RMagick 与 Ocra 捆绑在一起

    我正在尝试使用 Ocra 创建 Ruby 脚本的可移植版本 该脚本取决于rmagick这还需要安装 ImageMagick 生成的可执行文件在我的计算机上可以运行 但在其他所有计算机上都会失败 除非最终用户手动安装 ImageMagick
  • 取消引用双指针

    我有一段代码片段 我无法理解它是如何工作的 因为有一行执行了双重取消引用 代码如下所示 void afunction int x x malloc 2 sizeof int x 12 x 1 13 int main int v 10 afu
  • 比较 MSE 损失和交叉熵损失的收敛性

    For a very simple classification problem where I have a target vector 0 0 0 0 and a prediction vector 0 0 1 0 2 1 would
  • 强制编译器遵循 C99 标准

    当我在我的项目上编码时 我发现我已经使用了一段时间的匿名结构实际上只在 C11 中可用 而不是我想要针对的标准 C99 中可用 给出以下代码 struct data int a struct int b int c int main str
  • 将 INFO 和 ERROR 日志与 java.util.logging 分开

    我正在为 Java 应用程序配置日志记录 我的目标是两个日志 一个用于所有消息 另一个仅用于高于特定级别的消息 该应用程序使用java util logging 类 我按原样使用它 所以我只能通过logging properties fil
  • 经典 ASP - SQL Server 不存在或访问被拒绝

    我正在尝试连接到本地主机上的 SQL Server Express DB 但收到以下错误消息 用于 SQL Server 的 Microsoft OLE DB 提供程序 0x80004005 DBNETLIB ConnectionOpen
  • 注入时 Jquery 对话框无法正确显示

    我正在制作一个 Chrome 扩展 并尝试在用户单击页面上的元素时注入 Jquery 当我尝试通过 Jquery 创建对话框时 var box document createElement div box id box box title
  • 如何从 vue 中的所有子复选框组件中收集选定的复选框?

    我有一个表 其中行元素全部由子组件填充 每个子组件中都有一个复选框 现在我想立即获取所有选中的复选框 我可以使用首选项发出作为两种方式绑定并更新父级上的数组或对象 但我想知道是否有更好的方法 这是模板部分的简短示例 table thead
  • 如何设置 IIS 以使应用程序保持活动状态?

    我认为我的网络应用程序会在一段时间后关闭 如果我大约 5 分钟内没有使用该应用程序 它会返回一个新会话 会话超时设置为 720 分钟 因此这不会成为问题 可能是应用程序池中的设置或类似的设置 我认为这是某种资源管理 我使用的是IIS 7 0
  • 在 bash 中使用 IFS 使用 \r\n 分割字符串

    我想在 bash 中拆分包含 r n 的字符串 但回车符和 n 会出现问题 谁能给我关于不同 IFS 的提示 我也尝试过 IFS input projects google tests inbox document 01 r nprojec
  • 通过管道将 JSON 转换为 ForEach 时的奇怪行为

    为什么以下不迭代元素System object 返回的数组ConvertFrom Json ConvertFrom Json 1 2 3 ForEach Object 但这确实 ConvertFrom Json 1 2 3 ForEach
  • 如何将开发者工具嵌入到 GeckoFx 网络浏览器中?

    我正在构建一个以开发人员为主题的C NET Windows 窗体应用程序中的浏览器并希望让用户能够使用 Chrome 或 Firefox DevTools 编辑 调试他们正在查看的当前页面 我在网上找到了几个存储库 但似乎没有一个是我想要的
  • 删除未连接到分支的提交

    我想合并来自另一个存储库的一些更改 因此我添加了远程 获取并合并 但我没想到会添加另一个分支的提交 我支持合并中的一项提交 并手动添加更改的文件并推送该提交 所以现在我在一个分支中有两个断开连接的提交树 像这样的事情 A B C D mas
  • 可拉伸的标头,如 StackExchange

    我怎样才能用CSS做一个像这样的网站布局webmaster stackexchange com该网站位于中心 页眉和页脚与用户的窗口分辨率一样长 而内容位于中心 请检查图像fs 您不明白我的意思 谢谢 您的帮助 http imageshac
  • 如何将 ASM 程序包含到我的 Turbo Basic 程序中?

    我找到了这个 ASM 例程来按下按键 用于按下按键的 ASM 例程 http www fysnet net kbuffio htm现在我想将其包含到 Turbo Basic 例程中 但不知道如何执行此操作 这里有人能告诉我这是怎么做的吗 谢