汇编move指令如何使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编move指令如何使用相关的知识,希望对你有一定的参考价值。

传送指令
MOV
(move)
指令的汇编格式:MOV
DST,SRC
指令的基本功能:(DST)<-(SRC)
将原操作数(字节或字)传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;
目的操作数DST不能是CS,也不能用立即数方式。
move指令是数据的传送,即拷贝的功能(数据类型不变)。
MOVE时只有大小不匹配才报警!至于数据类型不符,它不会报警的。你把一个整数(例如
100)用move指令传到一个MDXX,原来的二进制不会改变,不过用实型读出来的值已经不是原来的值了,即不会是100.0
传送、转存及复制备份数据时。
你实际编程时,自然就会涉及到
参考技术A mov指令是数据传送指令,传送的当然是数据了。
mov
ecx,edi
;
传送的是寄存器里数据值
mov
eax,dword
ptr
ds:[ecx]
;传送的是dword
ptr
ds:[ecx]中的数据值

如何实现对ARM汇编指令的调试?

学习ARM汇编语言时,少不了对ARM汇编指令的调试。作为支持多语言的调试器,gdb自然是较好的选择。调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控。为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令,具体的调试方法,一起来看看吧。

一、准备ARM汇编程序

首先,我们构造一段简单的ARM汇编程序作为测试代码main.s

.globl _start

_start:

mov R0,#0

swi 0x00900001

以上汇编指令完成了0号系统调用exit的调用。mov指令将系统调用号传入寄存器R0,然后使用0x00900001软中断陷入系统调用。

为了运行ARM汇编代码,需要使用交叉编译器arm-linux-gccARM汇编代码进行编译。下载交叉编译器安装完毕后,对ARM汇编代码进行编译。

arm-linux-gcc main.s -o main -nostdlib

编译选项“-nostdlib”表示不使用任何运行时库文件,编译生成的可执行文件main只能在ARM体系结构的系统上运行。

 

二、编译安装qemu模拟器

为了x86Linux系统内运行ARM体系结构的可执行程序,需要安装qemu模拟器。

首先下载qemu源码,然后保证系统已经安装了flexbison

编译安装qemu

./configure --prefix=/usr

sudo make && make install

然后使用qemuARM模拟器执行ARM程序。

qemu ./main

 

三、编译安装arm-gdb

为了调试ARM程序,需要使用gdb的源码编译生成arm-gdb

首先下载gdb源代码,编译安装。

./configure --target=arm-linux --prefix=/usr/local

sudo make && make install

为了和系统的gdb避免冲突,我们将gdb的安装目录安装到/usr/local,然后建立软链接即可。

ln -s /usr/bin/arm-gdb /usr/local/gdb/gdb

之后便可以使用arm-gdb命令调试ARM程序了。

 

四、调试ARM程序

首先使用qemu打开远程调试端口。

qemu-arm -g 1024 ./main

然后导出环境变量QEMU_GDB

export QEMU_GDB=/usr/local/gdb

最后,进入gdb调试。

arm-gdb ./main

进入arm-gdb后,首先连接远程调试端口。

(gdb) target remote localhost:1024

然后使用gdb常用的调试命令调试代码即可。

(gdb) disassemble // 查看反汇编

(gdb) x /8xw 0x0000808e // 查看内存

(gdb) info register // 查看寄存器

(gdb) continue // 继续执行

(gdb) stepi // 汇编级逐过程

(gdb) nexti // 汇编级逐语句

文章来源:技术点滴

以上是关于汇编move指令如何使用的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言XLAT指令如何使用

困惑如何阅读汇编指令

8086、8088汇编指令大全

如何实现对ARM汇编指令的调试?

在这种情况下,jmp 指令如何在 att 汇编中工作

一条汇编指令如何转化为 CPU 上的电压变化?