汇编学习笔记03(寄存器内存访问)

1. 字在内存中存储时, 要有两个地址连续的内存单元来存放. 字的低位字节存放在低地址单元中, 高位字节存放在高地址单元中.

2. DS: 存放段地址的寄存器, 这个段是存放数据的.

[address]: 偏移地址

mov指令在访问内存单元时, 只给出偏移地址, 段地址默认在DS段寄存器中

3. mov ax, 1000

mov ds, ax 8086CPU不支持将数据直接送入段寄存器, 所以只能通过通用寄存器来进行中转.

4. 字的传送

80806CPU是16位结构, 有16根数据线, 所以一次性传送16位数据, 也就是一个字, 也就是两个单元

在内存和寄存器之间传送数据时, 高地址单元和高8位寄存器, 低地址单元和低8位寄存器相对应.

5. mov指令的形式有以下8种

mov 寄存器, 数据

mov 寄存器, 寄存器

mov 寄存器, 内存单元

mov 内存单元, 寄存器

mov 寄存器, 段寄存器

mov 段寄存器, 寄存器

mov 段寄存器, 内存单元

mov 内存单元, 段寄存器

add, sub指令同mov.

6. 数据段: 地址连续, 起始地址为16倍数的内存空间来当作专门存储数据的内存空间, 这就是数据段

7. 栈: 栈是一种特殊访问方式的存储空间, 它的特殊性在于, 最后进入这个空间的数据, 最先出去(LIFO)

8. CPU提供的栈机制:

push ax

a. SP = SP - 2

b. 将寄存器ax中的数据送入栈中

pop ax 从栈顶取出数据送入ax中

a. 从栈顶取出数据送入ax中

b. SP = SP + 2

SS: 段寄存器, 存放栈顶的段地址

SP: 寄存器, 存放栈顶的偏移地址

任意时刻, SS:SP指向栈顶元素

9. 栈顶越界的问题

8086CPU只记录栈顶, 栈空间的大小要我们自己管理

用栈来暂存以后要恢复的寄存器内容时, 寄存器出栈的顺序要和入栈的顺序相反.

10. 段的综述

我们可以将一段内存定义为一个段, 它即可以是代码段, 数据段, 还可以是栈段, 这取决于我们以什么方式去访问这段内存.

总结: 通过第三章的学习, 发现自己只是理解了表面的内容, 没有去深入的探讨, 深入的学习, 这样容易忘记, 这章的笔记也是照搬原话, 没有一些自己的理解, 所以自己要努力加油, 不要只追求学习汇编的进度, 面忽略了学习知识要融会贯通, 要有自己的理解, 这才叫学习了知识, 为已所用, 希望下一章, 自己经引以为鉴, 继续加油...

时间: 2024-10-14 01:11:32

汇编学习笔记03(寄存器内存访问)的相关文章

汇编学习笔记02(寄存器CPU工作原理)

1. 什么是寄存器呢? 就是可以用指令进行读写的部件. 程序员通过改变各种寄存器中的内容实现对CPU的控制. 如果是16位CPU的话, 就是相当于2个存储单元. 2. 字在寄存器中的存储? 8086CPU可以一次性处理两种尺寸的数据 Byte: 字节型数据, 一个字节由8个bit组成, 可以存在8位寄存器中. Word: 字型数据, 一个字型由16个bit组成, 也就是两个字节, 称为这个字的高位字节和低位字节. 3. 常用汇编指令的学习(需要注意的是汇编指令是不区分大小写的) mov ax,

(转)ARM汇编学习笔记——CPSR寄存器、CPSR_C

转自:http://blog.csdn.net/cos_sin_tan/article/details/7667582 内容有所改动 1:ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做 "当前程序状态寄存器",CPSR中一些位被用于标识各种状态,一些位被用于标识当前处于什么工作模式. 2:这个状态寄存器的32位可以分为四个8位的域. 其中cpsr_c代表的是cpsr寄存器的低8位,也就是控制位 有些程序里这样写msr cpsr_c, #0xd2   

AT&T汇编学习笔记

AT&T汇编和intel汇编的区别 (1)在Intel格式中大多使用大写字母,而在AT&T格式中都是用小写字母. (2)在AT&T格式中,寄存器名要加上"%"作为前缀,而在intel格式中则不带前缀. (3)在AT&T的386汇编语言中,指令的源操作数与目标操作数的顺序与在intel的386汇编语言中正好相反.在intel格式中是目标在前,源在后:而在AT&T格式中则是源在前,目标在后.例如,将寄存器eax的内容送入ebx,在intel格式中为&

AT&T汇编学习笔记(一)

file命令使用介绍 file最常用的场景就是用来查看可执行文件的运行环境,是arm呢,还是x86呢,还是mips呢?一看便知 $ file a.out a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xa240b1958136fc294a6ee5833de2a0fc8c9e

python学习笔记(03):函数

默认参数值:   只有在行参表末尾的哪些参数可以有默认参数值,即 def func(a, b=5 )#有效的 def func( a=5,b )#无效的 关键参数: #!/usr/bin/python # Filename: func_key.py def func(a, b=5, c=10): print 'a is', a, 'and b is', b, 'and c is', c func(3, 7) func(25, c=24) func(c=50, a=100) #输出: $ pyth

HTTP 学习笔记03

通用信息头 Cache-Control : no-cache(不缓存当前请求) [*] Connection:close(返回当前请求后立即断开)[*] Date:...(HTTP消息产生的时间) Pragma:no-cache (不缓存) [*] Trailer:Date(哪些能放到实体内容后的头字段) Transfer-Encoding:chunked (指定传输编码方式)[*] Upgrade:HTTP/2.0,SHTTP/1.3 (支持的版本) Via:HTTP/1.1 Proxy1,H

C++ GUI Qt4学习笔记03

C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QMainWindow可以创建一个窗口 图形用户界面(GUI)应用程序通常会使用很多的图片,最常见的为应用程序提供图片的方法是使用Qt的资源机制(resource mechanism) 使用Qt资源系统,必须创建一个资源文件,并且在识别该资源文件的.pro文件中添加一行代码. RESOURCES = spr

mongodb 学习笔记 03 -- 查询表达式

mongodb 学习笔记 03 – 查询表达式 不等于,大于,小于 !=: db.stu.find({name:{$ne:'billvsme'}}) 名字不是'billvsme' > : db.stu.find({age:{$gt:18}}) 年纪大于18 < : db.stu.find({age:{$lt:18}}) 年纪小于18 >=: $gte <=: $lte in/not in/all $in :db.goods.find(stu_id:{$in:[93001,93002

Android自定义View学习笔记03

Android自定义View学习笔记03 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值.这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明.半透明颜色(Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as w