简明x86汇编语言教程(4)
2010-01-10 09:37:41 来源:WEB开发网核心提示:让我们来看看下面的代码:mov ax,[0]方括号表示,里面的表达式指定的不是立即数,简明x86汇编语言教程(4)(5),而是偏移量,在实模式中,也有许多种可能的方式,下一节中,DS:0中的那个字(16-bit长)将被装入AX,然而0是一个常数
让我们来看看下面的代码:
mov ax,[0]
方括号表示,里面的表达式指定的不是立即数,而是偏移量。在实模式中,DS:0中的那个字(16-bit长)将被装入AX。
然而0是一个常数,如果需要在运行的时候加以改变,就需要一些特殊的技巧,比如程序自修改。汇编支持这个特性,然而我个人并不推荐这种方法——自修改大大降低程序的可读性,并且还降低稳定性,性能还不一定好。我们需要另外的技术。
mov bx,0
mov ax,[bx]
看起来舒服了一些,不是吗?BX寄存器的内容可以随时更改,而不需要用冗长的代码去修改自身,更不用担心由此带来的不稳定问题。
同样的,mov指令也可以把数据保存到内存中:
mov [0],ax
在存储器与寄存器之间交换数据应该足够清楚了。
有些时候我们会需要操作符来描述内存数据的宽度:
操作符 | 意义 |
byte ptr | 一个字节(8-bit, 1 byte) |
word ptr | 一个字(16-bit) |
dword ptr | 一个双字(32-bit) |
例如,在DS:100h处保存1234h,以字存放:
mov word ptr [100h],01234h
于是我们将mov指令扩展为:
mov reg(8,16,32), mem(8,16,32)
mov mem(8,16,32), reg(8,16,32)
mov mem(8,16,32), imm(8,16,32)
需要说明的是,加减同样也可以在[]中使用,例如:
mov ax,[bx+10]
mov ax,[bx+si]
mov ax,es:[di+bp]
等等。我们看到,对于内存的操作,即使使用MOV指令,也有许多种可能的方式。下一节中,我们将介绍如何操作串。
更多精彩
赞助商链接