汇编操作数长度怎样确定?

例如:mov bx, 05h ;操作数长度为2,是因为bx寄存器类型
但是:mov [bx], 05h; 地址[bx]类型是什么?写指令时需不需要加属性操作符?
初学者求教啦!

这个问题问的很好,在不确定的时候确实需要属性操作符,比如MOV WORD PTR [BX],05H就表明要传送的数据是字型的,而不是字节(BYTE).追问

这么说例如:
数据段中定义: table dw ?
lea bx, table

1: mov table, 05h
2: mov [bx], 05h
指令1是正确的,因为table的属性为字类型
智力2是错误的,因为[bx]只是个地址,类型不确定,这和bx中的地址是从哪来的无关。
对吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-09
80x86 的一些指令,可以处理 8 位数,也可以处理 16 位数。

指令中,如果使用了寄存器,那么,多少位数,就很明确了。

指令中,如果仅仅是使用了存储器,那么,位数,就必须使用 PTR 来说明。

建议楼主下载一个编译软件。
用它编译一下你的程序,是不是应该加上属性,它就会提示你了,不用你自己空想。本回答被提问者和网友采纳
第2个回答  2013-04-24
不知道楼主有没有接触过霍夫曼树。如果你了解霍夫曼树的话就比较容易理解指令操作数的长度了。从指令的结构来看,每指令中最开始的那一部分已经确定指令中操作数的长度和类型,比如mov ax,16位立即数的指令结构可能是 78 + 两个字节(这个是我瞎写的)。78大致对应于 mov ax,8指令中的第二和第三个字节大致对应于16位立即数。这也出现了一些问题,就是如果从某条指令中间开始反汇编的话,可能后面所有的指令的反汇编很可能会全部出错,不过在正常操作下是根本不会发生这种情况的。而汇编语言编辑器隐藏了一部分必须指明的对操作数的长度和类型的限制,只要不会引起二义性,对操作数的长度和类型是不需要指明的。

在汇编中如何判断数是几位的,比如1000H是如何判断是16位的?
每条汇编指令中,相关的源操作数和目的操作数都有长度约定。程序编写完成后,汇编过程对所有操作数进行预处理,以符合指令要求。比如,AAH,就不一定是8位的,10AAH,也不一定是16位的。而是看实际指令对操作数的约定。有些指令中数据的实际有效内容甚至不是8的倍数。

AT&t汇编当中寄存器前面两个%%什么意思
AT&T 汇编语言在指定操作数长度时,通常使用符号后缀来表示。这些符号包括b(byte, 8位)、w(word, 16位)、l(long, 32位)。例如,指令“movb %al, %bl”使用b后缀表示操作数为8位字节。同样,“movw %ax, %bx”使用w后缀表示操作数为16位字。对于32位操作数,“movl %cx, %dx”则使...

《x86汇编语言》学习11 指令的格式及其操作尺寸
16位处理器:操作尺寸与实例在16位处理器如8086和80286中,指令操作数通常为8\/16位,有效地址固定为16位。以经典的指令为例:8086: mov al, cl —— 8位寄存器操作,add dx, [bx] —— 16位地址操作,push dx —— 16位值入栈。80286: 与8086类似,只是在实模式和保护模式中,尽管操作数和...

汇编语言中的操作码占多少字节?
在51汇编语言中,操作码一般占用一个字节,操作数一般占用0到2个字节。比如:MOV A,R0,操作码E8H占用一个字节,操作数占用0个字节 MOV A,#20H,操作码74H占用一个字节,操作数#20H占用一个字节 MOV DPTR,#2000H,操作码90H占用一个字节,操作数2000H占用两个字节。

如何知道一条汇编指令有多少个字节?
一般比较实用的方法是汇编以后查看汇编生成的列表文件,或汇编并连接生成可执行文件以后在调试软件中查看指令对应的机器码。若不汇编,则需要查找指令手册。8086的指令长度与指令、操作数类型、寻址方式组合有关。同一条指令但操作数用不同的寻址方式,其指令长度就会不一样。所以,这么查会很累人。

...IP指针增加的值为什么不是2,而是与指令长度有关。指令和地址不都_百...
指针移动一次不代表的是1或2,而是具体要看它所在内存中的字节数。例如在C语言中p指向的x是整型变量,那么它移动一下是2个字节,如果x是字符型,它移动一次是1个字节,如果是长整弄,就是4个字节,如果是double型,就是8个字节了。

CPU如何知道指令中操作数的类型、长度及所在地址?
一条cpu指令分操作码、操作数两部分,根据操作数确定寻址方式:立即数、基址寻址、变址寻址等等,找到数据后送入cpu,根据操作吗确定要进行什么样的操作

汇编语言指令length是什么意思
汇编语言中的“length”指令并不是标准的指令。关于“length”在汇编语言中的含义,需要结合具体的上下文和使用的汇编器或编译器来判断。在某些特定的汇编环境或应用中,“length”可能用于表示操作数长度的指示,或者用于获取某个数据结构的长度。但总体来说,“length”并不是一个具有固定含义的汇编指令。...

函数长度的计算方法有哪些?
函数长度的计算方法通常指的是在计算机科学和编程中,确定一个函数(或程序、代码块)所执行的操作数或者说指令数。这在不同的上下文和目的中有不同的意义和计算方式。以下是一些常见的函数长度计算方法:代码行数:最直接的方法是简单地计算函数中的代码行数。这种方法很直观,但在不同编程语言和编码...

汇编语言中,字节操作和字操作,到底什么时候要强调?!
1、指令中有寄存器,就可确定内存单元长度或操作数尺寸,如:mov ax,1mov bx,ds:[0]等,操作数为2字节,字单元(16位)。mov al,1mov bh,ds:[0]等,操作数为1字节,字节单元(8位)。 2、指令中有pop、push,操作数为2字节,字单元(16位)。以上两种情况都可确定内存单元长度或操作数尺寸,不需用X ptr说明。

相似回答