主题:关于在QB主程序中向汇编子程序传递参数的一点想法
CLS
DEFINT A-Z
DIM asmprog(30)
INPUT n
DATA &h55,&h89,&He5,&H8b,&h5e,&H06,&H8a,&h17
DATA &hb4,&h02,&Hcd,&h21,&h5d,&hca,&h02
RESTORE
DEF SEG = VARSEG(asmprog(0))
p = VARPTR(asmprog(0))
FOR i = 0 TO 14
READ j
POKE p + i, j
NEXT i
CALL absolute(n, p)
DEF SEG
END
===========================================================================
以上DATA中的机器码的含意为:
&h55 PUSH BP BP入栈
&h89,&He5 MOV BP,SP 栈顶值存入BP,将来用BP寻址
&H8b,&h5e,&H06 MOV BX,[BP+6] 把N的地址存入BX中
&H8a,&h17 MOV DL,[BX] 把[BX]的值存入DL
&hb4,&h02 MOV AH,2 AH=2
&Hcd,&h21 INT 21 调用21中断
&h5d POP BP BP出栈
&hca,&h02 RET 2 返回主程序
============================================================================
这是个在QB主程序中输入ASCII码,之后在内嵌的汇编子程序中输入对应的字符的小程序,在这个程序中涉及到了如何从QB主程序向汇编子程序传递参数的问题。这个问题比较有实际意义,举一个简单的例子,如果想在自己编的QB程序中实现格式化磁道,就涉及到调用汇编,并且把要格式化的磁道的地址传到寄存器中,从QB主程序向汇编子程序传递和以前说过的从汇编子程序向QB主程序传递参数基本一样,在本程序中N已经赋值,所以在以上的汇编代码中就要有把N的值存到DL中的一部分(MOV BX,[BP+6]、MOV DL,[BX]),之后在汇编子程序中输出相应的字符。
=============================================================================
今天突然想到的一个问题,有不对的地方请大家指正,谢谢。
DEFINT A-Z
DIM asmprog(30)
INPUT n
DATA &h55,&h89,&He5,&H8b,&h5e,&H06,&H8a,&h17
DATA &hb4,&h02,&Hcd,&h21,&h5d,&hca,&h02
RESTORE
DEF SEG = VARSEG(asmprog(0))
p = VARPTR(asmprog(0))
FOR i = 0 TO 14
READ j
POKE p + i, j
NEXT i
CALL absolute(n, p)
DEF SEG
END
===========================================================================
以上DATA中的机器码的含意为:
&h55 PUSH BP BP入栈
&h89,&He5 MOV BP,SP 栈顶值存入BP,将来用BP寻址
&H8b,&h5e,&H06 MOV BX,[BP+6] 把N的地址存入BX中
&H8a,&h17 MOV DL,[BX] 把[BX]的值存入DL
&hb4,&h02 MOV AH,2 AH=2
&Hcd,&h21 INT 21 调用21中断
&h5d POP BP BP出栈
&hca,&h02 RET 2 返回主程序
============================================================================
这是个在QB主程序中输入ASCII码,之后在内嵌的汇编子程序中输入对应的字符的小程序,在这个程序中涉及到了如何从QB主程序向汇编子程序传递参数的问题。这个问题比较有实际意义,举一个简单的例子,如果想在自己编的QB程序中实现格式化磁道,就涉及到调用汇编,并且把要格式化的磁道的地址传到寄存器中,从QB主程序向汇编子程序传递和以前说过的从汇编子程序向QB主程序传递参数基本一样,在本程序中N已经赋值,所以在以上的汇编代码中就要有把N的值存到DL中的一部分(MOV BX,[BP+6]、MOV DL,[BX]),之后在汇编子程序中输出相应的字符。
=============================================================================
今天突然想到的一个问题,有不对的地方请大家指正,谢谢。