WEB开发网
开发学院软件开发汇编语言 简明x86汇编语言教程(4) 阅读

简明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指令,也有许多种可能的方式。下一节中,我们将介绍如何操作串。

上一页  1 2 3 4 5 

Tags:简明 汇编语言 教程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接