我知道每条指令都有操作码。
我可以找到mov,sub指令的操作码
但变量及其类型的操作码是什么
我们使用汇编程序指令来定义变量和常量?
它们如何在x86操作码中表示?
segment .bss
largest resb 2 ; reserves two bytes for largest
segment .data
number1 DW 12345 ; defines a constant number1
我在网上尝试了这个https://defuse.ca/online-x86-assembler.htm#disassembly程序集来操作代码转换器。但是,当我使用nasm代码定义变量时,它显示错误!
答案 0 :(得分:3)
变量没有操作码。机器码中甚至没有变量。
有CPU和内存。内存包含一些值(字节)。
CPU有cs:ip
指令指针,指向存储器地址,下一条指令在哪里执行,因此它将从该地址读取字节,解释它们为操作码,并将其作为指令执行。
无论你在内存中存储数据还是机器代码无关紧要,都是字节值。
什么使得内存“数据”或“变量”的一部分是由正在运行的代码创建的逻辑解释,它的代码是将内存的某些部分仅用作“数据/变量”而将内存的其他部分用作“代码” “(或最终同时,如同this DOS 51B长COM代码在屏幕上绘制希腊旗帜,其中XLAT
指令使用代码操作码也作为蓝/白条配置的源数据)。
您是否在信息来源中写道:
x:
add al,al
或
x:
db 0x00, 0xC0
无关紧要,生成的机器代码是相同的(在两种情况下,当指向要作为指令执行的内存时,CPU将执行add al,al
,mov ax,[x]
将设置ax
在两种情况下都用0xC000
作为“变量”。
您可能需要检查汇编程序(-l <listing_file_name>
的{{1}}命令行选项)中的列表文件,看看自己无法分辨哪些字节是代码,哪些是数据。
答案 1 :(得分:1)
public function get_results($search_term)
{
//var_dump($search_term);die;
$this->db->select('*');
$this->db->from('Competitor_Products');
$this->db->where('CProduct_Article_Number', $search_term);
return $this->db->get()->result();
}
,segment
或resb
等汇编程序指令不是指令,与操作码不对应。这就是为什么他们是指令而不是指令的原因。粗略地说,有两种指令:
dw
指令将汇编程序配置为在您提供的部分中继续汇编。segment
指令将给定的数据发送到目标文件中。这可用于将任意数据放入内存以与程序一起使用。