TASM中byte ptr操作数用法、不同mov写法差异及转NASM方法
TASM代码相关问题解答
参考代码
mov cx,65535 _copy: mov [di], byte ptr 127 ; <---- 该行作用是什么? mov al, fs:[di] stosb loop _copy
1. 第3行代码的具体作用
该行的作用是:向di寄存器存储的偏移地址对应的内存单元中,写入1字节长度的十进制数值127(对应十六进制0x7F)。byte ptr是用来显式指定本次内存写操作的操作数宽度为1字节,避免汇编器判定操作数宽度歧义。
2. 三种mov指令写法的区别
三种写法的差异如下:
- 写法1
mov [di], byte ptr 127:属于TASM/MASM兼容的合法语法,byte ptr显式指定操作数宽度为1字节,汇编器可以正常编译生成对应机器码,只是写法不符合通用规范,可读性一般。 - 写法2
mov [di], 127:属于存在歧义的非法写法。立即数127本身没有宽度属性,内存操作数[di]也没有指定宽度,汇编器无法判断需要写入的是1字节、2字节还是4字节的127,会直接抛出「操作数宽度不明确」的编译错误。 - 写法3
mov byte ptr [di], 127:属于x86汇编的标准规范写法,byte ptr直接修饰内存操作数[di],明确指定该内存操作数的宽度为1字节,所有主流x86汇编器(TASM/MASM等)均完全兼容该写法,编译后生成的机器码和写法1完全一致,可读性最好。
3. 转换为等效的NASM语法语句
NASM语法不识别ptr关键字,内存操作数的宽度标识直接放在内存操作数前,等效语句为:
mov byte [di], 127
内容的提问来源于stack exchange,提问作者Fract
相关产品推荐
相关产品推荐

