vs使用教程汇编语言
汇编语言中MOVS的使用方法?
汇编语言中MOVS的使用方法?
首先背景知识指令包含两个部分:操作码和操作数
1:立即数寻址
立即数寻址一般被用在初始化寄存器的初始值,例如你在C 中的一个函数里写下
char a 4,翻译成汇编语言就是 MOV AL, 0x04,进一步翻译成机器码就是 0xB004。
汇编:MOV AL,0x04
机器码:0xB004
这个机器码是一个指令,其高字节为操作码:0xB0告诉CPU把一个立即数放入寄存器AL中(MOV AL, immed8),低字节0x04是操作数,代表立即数的值。
2:直接寻址
汇编:MOV AL, [0x04]
机器码:0x8A042504000000
这里的操作码:0x8A0425告诉CPU从一个偏移地址的内存中取出一个字节数据到AL中。
操作数: 0x04为该偏移地址,这里的0x04是一个立即数,只不过解释为偏移地址。
3:相对寻址:
汇编:MOV AL,[RCX 0x04]
机器码:8A4104
操作码:0x8A41,告诉CPU利用RCX中的值和偏移量一起作为内存偏移地址,取出该偏移地址中内存的一个字节数据到AL中
操作数:0x04,就是一个固定偏移量,是一个立即数,解释为地址偏移量。
所以立即数都是存放在指令中的操作数单元,仅仅跟随着操作码。而对于这个值来说你可以解释为数字,也可以解释为地址,就好比数字4816511,你可以解释为人民币数值,也可是电话号码。
立即数当然是存在内存中啊,指令都在内存中,你说立即数呢?
立即数具体是什么含义那得看操作码了,也就是看指令本身是做什么的?你把他当数据,
那就是数据,你把他当地址,然后访问该地址的内存单元,那就是地址了啊。
为啥不能做除数?你可以看看CPU怎么做除法的,用寄存器的值去除以寄存器的值,没有对应指令啊,就这么简单,如果把CPU指令集中加上该方法不就可以了吗?(当然应该是不可以加的,这里涉及到其他的原因,我个人觉得和CPU架构设计有关,没办法用内存中的值去直接和寄存器相互运算,除非内存速度很高可以直接做寄存器使用)。
如何在VisualStudio中运行和调试汇编代码?
vs中界面上方中间位置有个运行按钮,调试的话,双击某一行代码最左边或者按F9。该行代码左边