2016-03-20 52 views
0
var1 db 20 

;--------code 1------- 
lea bx, var1 
mov byte ptr[bx],40 

;--------code 2------- 
lea bx,var1 
mov [bx], 40 

这是否都是有效的?和相同?如果是,那么为什么我们使用字节ptr?这两个代码会做同样的事情吗?

+1

_“如果我们想改变字节,我们可以采取bl”_你的意思是'mov [bl],40'?这是无效的,即使它不具有相同的含义。 – Michael

+2

_“这两个代码是否会做同样的事情?”_组装它,看看会发生什么。一些装配商可能会把它们对待,有些则可能不会。直接40的大小是未知的,这就是为什么使用'byte ptr'的原因。 – Michael

+2

使用'byte ptr'明确地说要移动一个* byte *,否则汇编器必须推导出被移动数据的大小,它可能会假设大小错误(如一个字,16位),这将在你的情况下是错误的。 –

回答

2

不,他们不是。

第一段代码包含大小说明符:byte ptr。没有这个,没有什么可以给汇编提供关于源和目的地的大小的暗示。虽然你可能找到一些情况下(各种指令控制代码的总体组装),他们执行相同的方式,这是不能依赖。

可能看起来不明确的是,您可以将其写为mov var1, 40而没有大小说明符。但是,如果您要拆解生成的代码,则会发现汇编程序使用var1 db行中的提示来处理场景背后的事务,这表明这是一个字节而不是单词,双字等。在其他字汇,汇编器实际上会产生:

mov byte ptr [var1], 40 
相关问题