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变量交换高位低位字)相关推荐

  1. 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop

    与数据相关的运算符和伪指令 offset 数据标号的偏移量,按字节计算,表示数据标号到数据段开始的距离 .data bVal byte ? wVal word ? dVal dword ? dVal2 ...

  2. 汇编语言PTR运算符:重写操作数的大小类型

    PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型.只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的. 例如,假设想要将一个双字变量 myDouble 的低 16 ...

  3. 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定 ...

  4. [YTU]_2570 指针练习——变量交换

    Description 指针的功能多种多样,指针是c语言的灵魂,所以说掌握指针是很重要的. 下面要求你用指针实现两个数字的交换 Input 两个int型的变量 Output 交换后的两个变量 Samp ...

  5. 对函数指针与typedef的理解:typedef void (*sighandler_t)(int)

    文章目录 缘由 解释函数指针int (\*f)(int*); 解释typedef void(*sighandler_t)(int) 缘由 2021年9月22日在刷CS:APP的时候,邂逅了一种函数指针 ...

  6. 利用指针完成两个数字的交换(c语言)

    在最近的C语言学习中,老师讲到了指针,原来就听说指针这一块比较难以理解.我把最近的学习心得分享在此. 通常在我们的机器中都会有一系列的连续编号的或编址的存储单元,这些存储单元可以进行单个操作,也可以进 ...

  7. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  8. 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++ 作者 往年试卷 单位 浙江大学 ...

  9. 指针练习——变量交换I

    Description 指针的功能多种多样,指针是c语言的灵魂,所以说掌握指针是很重要的. 下面要求你用指针实现两个数字的交换 Input 两个int型的变量 Output 交换后的两个变量 Samp ...

最新文章

  1. CSP认证201412-2 Z字形扫描[C++题解]:模拟
  2. 文巾解题 116. 填充每个节点的下一个右侧节点指针
  3. Vmware中安装Ubuntu的步骤
  4. TCp传输粘包问题
  5. HDU2043 密码【密码】
  6. 计算机安装应用程序卸的步骤,怎么彻底删除电脑安装的软件程序
  7. JRE和JDK的区别
  8. 表格票据识别-助力各行业单据录入
  9. 南卡和声阔蓝牙耳机哪个比较好用?降噪效果好的蓝牙耳机推荐
  10. charles抓PC端的包
  11. ArcGIS裁剪时警告 warning001003:Datum conflict between input and output
  12. Git 和 GitHub
  13. ubuntu16.04耳机没有声音解决办法
  14. 养生“六伤”、“十二莫”、“十二少”
  15. [Unity]利用Mesh在Unity中绘制扇形图片2
  16. selenium 反爬虫之跳过滑块验证
  17. 《绿皮书》中的经典台词
  18. jQuery添加插入元素技巧
  19. 探索java的 protect/private变量
  20. RYU+mininet——RYU

热门文章

  1. 箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...
  2. Canvas-图片旋转
  3. 解决maven项目Cannot change version of project facet Dynamic web module to 3.0
  4. 浅谈servlet与jsp的关系
  5. 我对CSS选择器的认识
  6. WAP自助建站 我编程之路的启蒙
  7. 转:只能选择GridView中的一个CheckBox(单选CheckBox)
  8. 学习网页栅格系统的几篇好文
  9. 用javascript读取xml,并进行修改xml数据,解决保存没有权限问题
  10. java jni helloword_JNI入门教程之HelloWorld篇