汇编寻址与消除歧义 -- 汇编学习笔记(二)
来源:互联网 发布:重庆网络小额贷款牌照 编辑:程序博客网 时间:2024/05/06 04:21
学完了C语言来学汇编,有一个容易困惑的地方,那就是如何去访问一个变量,怎么对其进行修改,运算。
在C语言中,我们有两种方式,取值和取值,可以直接 a+b,也可以用*a+*b
但在汇编中,更底层的认识让我们明白所谓的取值只是C语言的一个解释,想访问一个非立即数的元素,唯一的方法就是寻址,我们多种方式的目的就是为了找到我们需要变量的物理地址。
直接寻址:存储器
名字容易让人想到立即数,我们可以 MOV AL,[2CH]
但是我们也可以 MOV AX,BUF
这个操作的意义就是把BUF的值传递给AX。
在C语言中。 Int a[10], int *p = a; 只是拿到该地址,但在汇编中,只能到得到地址里的数据。 如果想得到 int *p ,要MOV AX, OFFSET BUF 这样来实现
间接寻址:寄存器
间接的意思不直接读取存储器中的值而是从寄存器中间接得到,由于BX中会有一种歧义,他可以存放一个地址数据,或者一个变量数据,所以我们要用[BX]来消除这种误会。
基址寻址: 基址 + 偏移量
这样可以直接定位一个一维数组里的变量,有两种书写形式
为了消除歧义,BX仍然必须放在[]里
MOV DL,[BX+10]
MOV DL 10[BX]
基址 变址区别:
基址一般是数组头或者字符串头,而变址就是后面的index了
所以基址一般由OFFSET的来,而变址大多是自己的来的值
变址寻址
和基址寻址的区别,可以有比例因子,因此可以更加灵活,如果访问WORD,用
2*SI + 偏移量就可以了。
如果在变址寻址中没有比例子因子的情况下,只能用SI,DI这2个16位寄存器。
基址加变址寻址
利用[基址+变址*比例因子+偏移量]得到的值
消除歧义
严谨是汇编最大的特性,所以很多地方要提到如何去消除歧义。
比如BYTE PTR 就是一个很好的说明:
MOV中,ADD中等:
在操作中,如果目标是 间址或者基址,变址或者基址加变址来寻址的内存单元,而源是立即数,则必须用PTR来说明目标操作数的属性。
- 汇编寻址与消除歧义 -- 汇编学习笔记(二)
- 汇编--学习笔记(二)-寻址方式
- 汇编学习笔记(二)
- 汇编学习(二)内存地址及寻址方式
- 寻址方式——汇编学习笔记(三)
- 8086汇编学习笔记6-寻址方式
- Win32汇编学习笔记(二)
- Win32汇编学习笔记(二)
- IL 汇编学习笔记(二)
- 嵌入式汇编学习笔记(二)----寄存器
- 汇编入门学习笔记(二)
- 汇编学习笔记(二)-- 配置编辑器
- 学习汇编(二)
- 汇编学习--7.11--内存寻址
- 汇编学习笔记--更灵活的寻址方式
- 汇编学习笔记之实模式/保护模式内存寻址
- 关于OD破解汇编基础知识(二)--寻址方式
- 8086汇编笔记:寄存器和寻址
- Ubuntu设置静态IP,解决重启后需要重新设置的问题
- TomCat6.0数据库连接池配置实例(mysql数据库)
- Ext.form表单中各种属性应用详解!
- 周济下台了!
- 汉化ejxjs ext.form.datefield控件
- 汇编寻址与消除歧义 -- 汇编学习笔记(二)
- 陪着你慢慢地走
- 建站攻略
- PKU2688 Cleaning Robot(BFS + DFS)
- 扩展Ext.form.DateField实现定义日期面板默认展示日期
- 山寨手机流行海外贡献排行
- Http处理程序学习(一)
- 为什么要使用using System.Collections.Generic;?
- 自我领导