①安装好dosbox,然后找到“dosbox...options.bat”,双击它,(别急着点dosbox.exe)。
图1
②在d出的文本编辑器(如,记事本)中调整设置,找到[autoexec]所在行,添加两行(以d:\为例):
mount c: d:\
c:
图2
③下载并安装旁神闭好nasm(一种小的汇编软件)
建议在dosbox中汇编并运行(按图3下文件、打开、解到d:\123);也可以在windows下汇编,dosbox里运行(这个我之前写过……)
图3
④打开dosbox,瞎吵依次输入命令
cd 123
nasm
可以看到nasm安装成功并且能使用了,下一步是准运裂备汇编代码
⑤在d:\123目录下新建一个文本文档123.txt
输入以下代码并保存(XXX可以随便改,$符号要保留)
org 256
jmp begin
s db 'hello, world! @author: XXX$'
begin:
mov dx,s
mov ah,9
int 21h
mov ax,4c00h
int 21h
⑥在dosbox的黑窗口里面继续输入以下命令
nasm 123.txt -o 123.com
123
然后就可以看到输出的字符串
hello, world! @author: XXX
debug是16位的调试工具,目前基本上没有用。而且它缺少宏等功能,写汇编语言基本上活受罪,现在除了学校里面学习,没人用了。nasm是跨平台的开源工具,功能迅大相比MASM很薄弱。所以在Windows平台下面不太好用。Unix/Linux平台下面倒是很有些用户群了。
MASM可以编写Windows程序,支持宏,一直随着Visual Studio的更新而更新,支持最新的64位 *** 作系统,用起来也比较方便,但是学习资料很少(呵呵,你找的到最新的学习资料么?)。它主要用来对VC++写的程序猜渗进行局部调优。但一般也不用它!为什么?看后面!
还有一个你没有说到的就是VC中的__asm { }指令,一般我们都用它来写汇编语言,进行VC的局部调优。
你说的那三个东西,都是基于Intel语法的,还有一个gas汇编器,是AT&T语法的,那个东西是穗昌脊给经由gcc编译的C++语言代码进行汇编步骤的……根本不适合由人来书写它的代码。
就这些,答完了。
习惯了ARM汇编,80x86的生疏了。下面是个人见解:对标号和跳转指令的处理(gas,nasm,masm...),依赖于汇编器。
(1)jmp begin 不改变便CS,所以后面在没有长跳转之前CS一直是0100H。
后面有mov sp,0100h,应该是递减堆栈,大小为0x0100H。
(2)add eax,lablel_gdt
label_gdt 是相对于CS(0x0100H)的偏移,得到label_gdt的绝对地址。
(3)add eax,label_seg_code32
同改迟理,也是没问题的,计算出label_seg_code32的绝对地址。
这种问题,只要想明白“绝陆岩对地址”和“相对地址”的概念就好说了。
开启保护模式之后,“段”的概念就不像8086那样了核悉李,这个也要转变一下观念。
根据汇编器的不同,长跳转的支持形式也有所不同。
jmp far ptr ...
jmp dword ptr...
建议搜索一下“段间跳转”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)