学习汇编,不像学习c,c++,java等等一样,可以一开始就来个Hello world,得先熟悉相关寄存器,指令,在跟着小甲鱼的教学中,说用编译器写指令
mov ax,[0]
实际上,执行的是mov ax,0
感觉很奇怪,之前在debug上执行mov ax,[0],是将段地址为ds,偏移地址为0的物理地址的内存单元处的数据传送给ax,所以就自己测试了下,首先用debug看看:
顺便说一下,debu好像是xp自带的,我电脑是win10 64位的,默认没有debug程序,然后网上搜了搜,用的是Dosbox,不过不太好用,不像cmd那样可以翻页,最大化,有时还莫名其妙自动打出”Z”……..有的用就行了,总不能为了搭建汇编环境去虚拟机装xp吧
下面是一些常用命令:
.R命令查看、改变cpu寄存器的内容
执行后,会看到寄存器的内容,然后输入r ax,就可以在下面输入值,ax就会是改变后的值
. D命令查看内存中的内容
. E命令改写内存中的内容(机器指令的格式)
//比如-e 1000:0 23 11 22 66就是将段地址为1000,偏移地址为0的数据写为23,1000:1为11,1000:2为22...
. U命令将内存中的机器指令翻译成汇编指令
. T命令执行一条机器指令
. A命令以汇编指令的格式在内存中写入一条机器指令
. Q 退出debug
好了,可以看到ax值为0,执行mov ax,111,然后ax的值就会是111(默认是16进制),然后命令-t单步执行:
然后看看mov ax,[0]
嗯,debug下是这样的,那试着来写第一个汇编程序:
在dosbox输入edit,就可以编写汇编程序了
一些基础知识还是不说了吧,每天时间都好紧张,,,,,,,,
然后保存为t2.asm文件,然后masm t2.asm,就得到图t2.obj文件,然后链接,就得到exe文件
果然,编译器将mov ax,[0]指令当成mov ax,0,那么我们如果要让ax的值为数据段偏移地址为0处的内存单元的数据呢?可以mov bx,0,然后
mov ax,[bx],
下面就来试一下