4月7日整理

一、关于之前的testasm项目中的test.asm文件出现过的问题

二、进一步了解了cod文件中的字段含义


一、关于之前的testasm项目中的test.asm文件出现过的问题

test.asm文件

	EXPORT	|?test1@@YAXXZ|
	IMPORT	|?test@@YAXXZ|				

	AREA	|.text|, CODE, ARM

|?test1@@YAXXZ| PROC			
	 bl          |?test@@YAXXZ|
	 ldr         pc, [sp], #4


	ENDP 

	END

会出现内存越界问题


错误原因,缺少对应的str操作


改为:

	EXPORT	|?test1@@YAXXZ|				
	IMPORT	|?test@@YAXXZ|				

	AREA	|.text|, CODE, ARM
	
|?test1@@YAXXZ| PROC	
	str         lr, [sp, #-4]!			
	bl          |?test@@YAXXZ|
	ldr         pc, [sp], #4


	ENDP  

	END
	

LDR,STR是用于寄存器和外部存储器交换数据指令,注意与MOV的区别,后面只在寄存器或常数交换。


LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中

LDR R0,[R1]; R1的值当成地址,再从这个地址装入数据到R0 (R0=*R1)。

LDR R1,=0x30008000 ; 把地址0x30008000的值装入到R1中,LDR中用常数要用=打头。(注意跟MOV的区别,MOV是#)

ldr  r0, =(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0)

用位与的方法赋值


STR(Store) 用于把一个寄存器的值存入外部存储空间,是LDR的逆操作。

STR R0,[R1] ; 把R0的值,存入到R1对应地址空间上(*R1 = R0)。

STR R0,=0x30008000 ;把R0中值存入到地址0x30008000


二、进一步了解了cod文件中的字段含义

; Listing generated by Microsoft (R) Optimizing Compiler Version 14.01.60511.01 

	TTL	d:\test\testasm\testasm\cfile.cpp
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:LIBCMTD "
	DCB	"-defaultlib:OLDNAMES "

	EXPORT	|?test2@@YAXXZ|				; test2
	IMPORT	|?test@@YAXXZ|				; test

  00000			 AREA	 |.pdata|, PDATA
|$T2537| DCD	|$LN5@test2|
	DCD	0x40000301
; Function compile flags: /Odsp
; File d:\test\testasm\testasm\cfile.cpp

  00000			 AREA	 |.text|, CODE, ARM

  00000		 |?test2@@YAXXZ| PROC			; test2

; 4    : {

  00000		 |$LN5@test2|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M2534|

; 5    : 	test();

  00004	eb000000	 bl          |?test@@YAXXZ|

; 6    : }

  00008	e49df004	 ldr         pc, [sp], #4
  0000c		 |$M2535|

			 ENDP  ; |?test2@@YAXXZ|, test2

	END

例如:00004 eb000000 bl          |?test@@YAXXZ|

0004为表示相对于函数开始地址后的偏移

eb000000为编译后的机器代码

将eb000000装换成二进制为1110 1011 0000 0000 0000 0000 0000 0000

各字段对应结构如下图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值