012.汇编语言基于x86处理器教材习题4.4.5~5-6:程序以及调试结果

TITLE Pointers			
.386

.model flat,stdcall

.stack 4096
	ExitProcess proto,dwExitCode:dword

.data
	myBytes BYTE 10h,20h,30h,40h
	myWords WORD 8Ah,3Bh,72h,44h,66h
	myDoubles DWORD 1,2,3,4,5
	myPointer DWORD myDoubles		;定义指向DWORD数组的指针

.code
	main PROC
		;mov esi,OFFSET myBytes		;ESI=
		;mov al,[esi]				;AL=
		;mov al,[esi+3]				;AL=
		;mov esi,OFFSET myWords+2	;ESI=
		;mov ax,[esi]				;AX=
		;mov edi,8					;EDI=
		;mov edx,[myDoubles+edi]	    ;EDX=
		;mov edx,myDoubles[edi]		;EDX=
		;mov ebx,myPointer			;EBX=
		;mov eax,[ebx+4]			    ;EAX=
		;-----------------------------------
		mov esi,OFFSET myBytes		;ESI=
		mov ax,[esi]				;AX=
		mov eax,DWORD PTR myWords	;EAX=
		mov esi,myPointer			;ESI=
		mov ax,[esi+2]				;AX=
		mov ax,[esi+6]				;AX=
		mov ax,[esi-4]				;AX=

		INVOKE ExitProcess,0
main ENDP
END main

调试过程中寄存器变化情况如下

myBytes BYTE 10h,20h,30h,40h
myWords WORD 8Ah,3Bh,72h,44h,66h
myDoubles DWORD 1,2,3,4,5
myPointer DWORD myDoubles	


ESI=0x00c04000
AL=0x10'\x10'           ;\x10指的是十六进制下的10
AL=0x40'\x@'
ESI=0x00c04006	 		;在原有偏移量的基础上+2
AX=0x003b
EDI=0x00000008
EDX=0x00000003
EDX=0x00000003
EBX=0x00c0400e			;e指的是myDoubles之前的myBytes与myWords数组的大小14个字节
EAX=0x00000002   		;一个DWORD的大小相当于4*BYTE所以首地址加上4之后EAX存储2


ESI=0x00dc4000			;ESI存储的是myBytes的首地址,也就是它相对于数据段的偏移量
AX=0x2010				;AX2010,由于x86模式的电脑是小端存储方式,[ESI]赋值给AX之后需要
						;一次传给AX四个16进制符号,也就是需要将 10 20两个数字传送给AX,但
						;是因为small endian 的存储模式,导致这两个字节的顺序与定义相反
EAX=0x008a				;一个指向myWords的指针的内存地址
ESI=0x00dc400e
AX=0					;AX变化结果原因暂时不明确
AX=0	
AX=44
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值