汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)
1: LABEL : 为一个标号定义大小属性,但不分配内存与下一个变量共用内存,与C中UNION类似
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
val16 LABEL WORD
val32 DWORD 12345678hLongValue LABEL DWORD
val1 WORD 5678h
val2 WORD 1234h.code
main PROCmov ax,val16 ;5678hmov dx,[val16+2];1234hmov eax,LongValue ;12345678hINVOKE ExitProcess,0
main ENDP
END main
2: 间接寻址,因为常数偏移量寻址多个数组元素时,直接寻址不实用,反之,用寄存器作为指针(称为间接寻址) 并控制寄存器的值,如果一个操作数使用的间接寻址,就称为间接操作数
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
byteVal BYTE 10h.code
main PROCmov esi,OFFSET byteValmov al,[esi];PTR与间接操作数一起使用;inc [esi] 一个操作数的大小无法从指令看出,报错inc BYTE PTR [esi] INVOKE ExitProcess,0
main ENDP
END main
3: 间接寻址访问数组案例
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
arrayB BYTE 10h,20h,30h
arrayW WORD 1000h,2000h,3000h
arrayD DWORD 10000h,20000h,30000h.code
main PROCmov esi,OFFSET arrayBmov al,[esi]inc esimov al,[esi]inc esimov al,[esi]mov esi,OFFSET arrayWmov ax,[esi]add esi,2mov ax,[esi]add esi,2mov ax,[esi]mov esi,OFFSET arrayDmov eax,[esi]add esi,4mov eax,[esi]add esi,4mov eax,[esi]INVOKE ExitProcess,0
main ENDP
END main
4:变址操作数,访问数组更灵活
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
arrayB BYTE 10h,20h,30h
arrayW WORD 1000h,2000h,3000h
arrayD DWORD 10000h,20000h,30000h.code
main PROCmov esi,0mov al,arrayB[esi] ;第一种格式constant [reg]mov esi,OFFSET arrayW ;第二种格式 [constant + reg]mov ax,[esi]mov ax,[esi+2]mov ax,[esi+4];比例因子mov esi,3 * TYPE arrayDmov eax,arrayD[esi];更简单的做法mov esi,3 ;下标mov eax,arrayD[esi * 4];使用TYPE 更灵活mov eax,arrayD[esi * TYPE arrayD]INVOKE ExitProcess,0
main ENDP
END main
5: 指针使用
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
arrayB BYTE 10h,20h,30h,40h
arrayW WORD 1000h,2000h,3000h,4000h
ptrB DWORD arrayB
ptrW DWORD arrayW
;使用OFFSET运算符使这种关系更加准确
optrB DWORD OFFSET arrayB
optrW DWORD OFFSET arrayW.code
main PROCINVOKE ExitProcess,0
main ENDP
END main
6: TypeDef : 定义新类型,与C的typedef 类似,不在.data段内定义的
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORDPBYTE TYPEDEF PTR BYTE ;字节指针
PWORD TYPEDEF PTR WORD ;字指针
PDWORD TYPEDEF PTR DWORD ;双字指针.data
arrayB BYTE 10h,20h,30h,40h
arrayW WORD 1,2,3
arrayD DWORD 4,5,6ptr0 PBYTE ? ;未初始化
ptr1 PBYTE arrayB
ptr2 PWORD arrayW
ptr3 PDWORD arrayD.code
main PROCmov esi,ptr1mov al,[esi]mov esi,ptr2mov ax,[esi]mov esi,ptr3mov eax,[esi]INVOKE ExitProcess,0
main ENDP
END main
7: LOOP : 循环伪指令使用
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
count DWORD ?
bytes BYTE 1,2,3,4
.code
main PROCmov ecx,100 ;设置外层循环计数
L1:mov count,ecx ;保存外层计数mov ecx,20 ;设置内层计数
L2:mov eax,ecxloop L2 ;重复内层mov ecx,count ;恢复外层计数loop L1 ;重复外层INVOKE ExitProcess,0
main ENDP
END main
8: LOOP_ARRAY : 数组元素求和例子
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
intarray DWORD 10000h,20000h,30000h,40000h.code
main PROCmov edi,OFFSET intarray ;EDI=intarray地址 作变址操作数mov ecx,LENGTHOF intarray ;循环计数器初始化为元素个数mov eax,0 ;EAX 记录总数
L1:add eax,[edi] ;加一个元素add edi,TYPE intarray ;指向下一个元素loop L1 ;重复INVOKE ExitProcess,0
main ENDP
END main
9: LOOP_STRAING : 复制字符串例子
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP(0).code
main PROCmov esi,0 ;变址计数器mov ecx,SIZEOF source ;循环计数器
L1:mov al,source[esi] ;从源字符串取一个字符mov target[esi],al ;保存到目标字符串inc esi ;指向下一个字节loop L1 ;重复INVOKE ExitProcess,0
main ENDP
END main
10: DWORD变量交换高位低位字
.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
tword LABEL WORD
three DWORD 12345678h ;56781234.code
main PROCmov si,tword ;或者用WORD PTR threemov di,[tword+2] ;WORD PTR [three + 2]mov tword,di ;WORD PTR threemov [tword+2],si ;WORD PTR [three + 2]mov eax,threeINVOKE ExitProcess,0
main ENDP
END main
汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)相关推荐
- 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
与数据相关的运算符和伪指令 offset 数据标号的偏移量,按字节计算,表示数据标号到数据段开始的距离 .data bVal byte ? wVal word ? dVal dword ? dVal2 ...
- 汇编语言PTR运算符:重写操作数的大小类型
PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型.只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的. 例如,假设想要将一个双字变量 myDouble 的低 16 ...
- C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)
文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...
- [YTU]_2570 指针练习——变量交换
Description 指针的功能多种多样,指针是c语言的灵魂,所以说掌握指针是很重要的. 下面要求你用指针实现两个数字的交换 Input 两个int型的变量 Output 交换后的两个变量 Samp ...
- 对函数指针与typedef的理解:typedef void (*sighandler_t)(int)
文章目录 缘由 解释函数指针int (\*f)(int*); 解释typedef void(*sighandler_t)(int) 缘由 2021年9月22日在刷CS:APP的时候,邂逅了一种函数指针 ...
- 利用指针完成两个数字的交换(c语言)
在最近的C语言学习中,老师讲到了指针,原来就听说指针这一块比较难以理解.我把最近的学习心得分享在此. 通常在我们的机器中都会有一系列的连续编号的或编址的存储单元,这些存储单元可以进行单个操作,也可以进 ...
- C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址. 取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符 地址的大小 ...
- 2-1若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。(1分)A.p++B.x++C.*(p++)D.x++作者往年试卷单位
2-1 若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____. (1分) A. p++ B. x++ C. *(p++) D. &x++ 作者 往年试卷 单位 浙江大学 ...
- 指针练习——变量交换I
Description 指针的功能多种多样,指针是c语言的灵魂,所以说掌握指针是很重要的. 下面要求你用指针实现两个数字的交换 Input 两个int型的变量 Output 交换后的两个变量 Samp ...
最新文章
- CSP认证201412-2	Z字形扫描[C++题解]:模拟
- 文巾解题 116. 填充每个节点的下一个右侧节点指针
- Vmware中安装Ubuntu的步骤
- TCp传输粘包问题
- HDU2043 密码【密码】
- 计算机安装应用程序卸的步骤,怎么彻底删除电脑安装的软件程序
- JRE和JDK的区别
- 表格票据识别-助力各行业单据录入
- 南卡和声阔蓝牙耳机哪个比较好用?降噪效果好的蓝牙耳机推荐
- charles抓PC端的包
- ArcGIS裁剪时警告 warning001003:Datum conflict between input and output
- Git 和 GitHub
- ubuntu16.04耳机没有声音解决办法
- 养生“六伤”、“十二莫”、“十二少”
- [Unity]利用Mesh在Unity中绘制扇形图片2
- selenium 反爬虫之跳过滑块验证
- 《绿皮书》中的经典台词
- jQuery添加插入元素技巧
- 探索java的 protect/private变量
- RYU+mininet——RYU
热门文章
- 箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...
- Canvas-图片旋转
- 解决maven项目Cannot change version of project facet Dynamic web module to 3.0
- 浅谈servlet与jsp的关系
- 我对CSS选择器的认识
- WAP自助建站 我编程之路的启蒙
- 转:只能选择GridView中的一个CheckBox(单选CheckBox)
- 学习网页栅格系统的几篇好文
- 用javascript读取xml,并进行修改xml数据,解决保存没有权限问题
- java jni helloword_JNI入门教程之HelloWorld篇