博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟着锅子一步步学习32位汇编(6)---OFFSET ALIGN
阅读量:6040 次
发布时间:2019-06-20

本文共 943 字,大约阅读时间需要 3 分钟。

OFFSET 操作符返回的是 数据标号的偏移地址,看代码

;test_03INCLUDE irvine32.incINCLUDELIB Irvine32.libINCLUDELIB KERNEL32.LIB.datab_val	BYTE	?w_val	WORD	?d_val1	DWORD 	?d_val2  DWORD 	? .codemain PROC	mov	eax,offset b_val	mov	ebx,offset w_val	mov	ecx,offset d_val1	mov	edx,offset d_val2		call	DumpRegs	exitmain endpEND main

这段代码 ,一共4个标号,3种不同大小类型,OK,我们看下寄存器图

我们可以从中看出 .data数据段起始内存是00403000,第一个标号是BYTE 类型,占去了一个字节,用OFFSET w_val,就能看出w_val起始内存是00403001,正好是一个字节大小,后面的以此类推。

 

在计算机内存中,处理偶数地址的数据比奇数快的多,可是刚才的EBX却是奇数,怎么让他到偶数位呢,那我们就需要ALIGN了。

ALIGN伪指令可以跟上 1 ,2 ,4,16  ,表示将地址对齐的空间大小。

改下上面的程序:

;test_04INCLUDE irvine32.incINCLUDELIB Irvine32.libINCLUDELIB KERNEL32.LIB.datab_val	BYTE	?ALIGN	4w_val	WORD	?ALIGN	4d_val1	DWORD 	?d_val2  DWORD 	? .codemain PROC	mov	eax,offset b_val	mov	ebx,offset w_val	mov	ecx,offset d_val1	mov	edx,offset d_val2		call	DumpRegs	exitmain endpEND main

我们加了 2句ALIGN 4 ,看下寄存器,大家就明白了。

转载于:https://www.cnblogs.com/guogairenjia/archive/2011/11/05/2237062.html

你可能感兴趣的文章
FOJ有奖月赛-2015年11月 Problem A
查看>>
电商网站中添加商品到购物车功能模块2017.12.8
查看>>
android 模拟器 hardWare 属性说明
查看>>
六款值得推荐的android(安卓)开源框架简介
查看>>
max_element( )
查看>>
CSS Grid 布局
查看>>
接口的幂等性
查看>>
java中的类
查看>>
android 自定义文字跑马灯 支持拖拽,按住停止滚动,自定义速度
查看>>
SpringMVC完成文件上传的基本步骤
查看>>
实例168 使用指针输出数组元素
查看>>
bind 与unbind
查看>>
CSS: Flexbox
查看>>
Python学习
查看>>
Java并发_volatile实现可见性但不保证原子性
查看>>
百度地图添加带数字标注
查看>>
【luogu 1908】逆序对
查看>>
pthread_create线程创建的过程剖析(转)
查看>>
android存储访问框架Storage Access Framework
查看>>
周总结
查看>>