dosbox怎么运行asm 运行游戏 显示 Driver is unloaded 怎么解决呀?

因为当前路径是D:\你看下D盘根目錄里有没有helloworld.asm这个文件?肯定没有的吧

 
不好意思,dosbox怎么运行asm我就不会用了这个挂载怎么回事我就不知道了,我都是直接用masm的

有可能你下的是DOS版本的,需下载个DOS模拟工具——dosbox怎么运行asmDOS时代的经典游戏都可以使用这个工具来玩。

dosbox怎么运行asm使用很简单运行后:

简洁的讲,你把你要虚拟的文件夹位置换掉上面的 D:\DOS (或者你DOS游戏所在的盘符)

在刚才的提示符下输入 c: 这样就切换到虚拟的c盘,也就是你要的游戏目录

运行C目录下的游戏以後操作按DOS命令。由于是dos系统所以你的金庸文件夹名称最好是E文

举例 你的游戏文件夹名为jyqxz,在D盘中目录为D:\jyqxz

那么你运行dosbox怎么运行asm之后 1-在輸入框输入mount c d:\ 此时你的D盘即是模拟的DOS C盘 2-接着输入c:即进入c盘 3-输入dir/w 会列出你d盘里所有文件夹目录 4-输入cd jyqxz 即进入金庸群侠传目录 5-输入play 好了进入游戲了。


首先需要***nasm不同版本的OS X可能沒有装nasm,或者版本比较老


下载到的nasm可以直接运行。

也可以通过brew来***nasm它上面的版本也是比较新的。至于如何***brew就不在这里介绍了

mov rdx, 2 ; 從内核缓存获取两个字节,一个给字符一个给回车 mov rdx, 2 ; 这里两个字节,因为第二个是回车

1. global对外公开了函数的名称这样ld时就可以指定它为入口函數;

2. syscall是内核调用函数,前面的mov指令都是用来提供参数的在"syscall.h"中可以找到调用的具体作用(根据rax来确定);具体所有参数要怎么写,我也没有找箌具体的说明...

关于syscall在这里补充一些内容:

syscall指令使CPU从用户态跳转到了内核态,并执行内核态的代码(本例中就是控制台的读写操作)

上述代碼中的寄存器使用也是有规定的:首先rax用来确定内核态中需要执行的具体函数,这一部分在《深入理解Linux内核》一书的“系统调用”这一节Φ有讲到;其次rdi、rsi、rdx等寄存器是用来传递内核态所执行的函数的参数的,在《nasmdoc.pdf》中的“Interfacing to 64-bit Programs(Unix)》一节中有如下的说明:

与代码中的参数传递一致


通过上面的说明,就可以基本理解例子中的代码了

顺便说明下ABI是什么(摘自):

应用程序二进制接口 描述了应用程序和操作系统之间,┅个应用和它的库之间或者应用的组成部分之间的低级接口 。
ABI涵盖了各种细节如:
数据类型的大小、布局和对齐;
调用约定(控制着函數的参数如何传送以及如何接受返回值),例如是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数參数;通过栈传递的第一个函数参数是最先push到栈上还是最后;
系统调用的编码和一个应用如何向操作系统进行系统调用;
以及在一个完整嘚操作系统ABI中目标文件的二进制格式、程序库等等。

另外syscall.h中的参数并没有包含高字节中的2,原因在里面有说明这里只摘抄一段:


这裏需要了解nasm的编译时的一些参数。

比如-f用来指定编译环境本机是mac x64的环境(就是这里的macho64,顺便说一句这里的mach是一个操作系统内核,mac的系统昰在此基础上开发的所以是mach,而不是mac或者其它)

在nasm编译器自带的nasmdoc.pdf手册中有更多的介绍。

参考资料

 

随机推荐