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

标签 assembly keyboard dos x86-16 turbo-basic

我发现这个 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

enter image description here

编辑:非常感谢下面 Michael Petch 先生的回答。此外,我可以看到这个 ASM 例程也是 CTL and ALT KEYS pressed 的解决方案。

最佳答案

您可以使用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 的建议,不要在您的$INLINE 元语句中包含最后的机器代码(&HC3)。

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

关于assembly - 如何将 ASM 程序包含到我的 Turbo Basic 程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63334114/

相关文章:

ios - 当我快速单击单元格中的文本字段时,键盘没有出现

c - 设置编译器 在 Windows XP 中打开 watcom

command-line - 读取/捕获 DOS 输入以在 MsBuild 中使用

assembly - 用汇编语言画线

assembly - ARM 汇编分支到寄存器或内存内部的地址

c++ - 嵌入式 asm 代码中的运行时检查失败 #0

linux - x86 英特尔汇编 Linux sys_write + sys_read

Android:当键盘出现时如何滚动 ScrollView 以显示下一个字段

iphone - 显示键盘但不带动画

assembly - x86除法异常返回地址