汇编语言王爽老师第四版(寄存器解读与实验二)
内存中字的存储
汇编语言所有实验链接
CPU中用16位(2bytes)进行存储字,16位分为高8位和低8位。
例如:
- 0 20H
- 1 4EH
- 2 12H
- 3 00H
0地址单元中存放的 字节型的数据是: 20H
0地址单元中存放的 字型的数据是: 4E20H(字型是两个字节)
2地址单元中存放的 字型的数据是: 0012H(注意00是高八位,12是低八位)
DS和[address]
DS与CS类似,同样也是一个段寄存器,功能是存放需要读取的数据的端寄存器。
我们知道内存地址由段地址和偏移地址构成,例如我们需要读取10000H的内容,就需要段地址1000H和偏移地址0来进行访问
mov bx,1000H
mov ds,bx
mov al,[0]
第三行中的[0]就代表偏移地址,那么段地址呢?其实默认他会取ds寄存器中的数据作为段地址,因此我们在读取内存中的数据的时候就需要提前设定好段地址放在DS中。
那么为什么要分两步将地址存放到DS中呢,因为8086CPU不支持 将数据直接送入到DS中 ,但是可以将另一个寄存器的内容转移到DS中,因此我们可以从bx进行中转数据。
样例:将al中的数据送入内存单元10000H中。
mov bx,1000H
mov ds,bx #将bx作为中转的寄存器
mov [0], al
字的传送
由上文中我们可以知道,一个字的组成是由两个字节组成的,内存单元中一个单位就是一个字节。
样例:已知内存情况如下,请说明执行结束后的ax, bx, cx的值
10000H 23
10001H 11
10002H 22
10003H 66
mov ax, 1000H ->此时ax中的值为1000H
mov ds, ax ->将ax中的数据转移到ds中,此时ds为1000H
mov ax,[0] ->将内存中的1000:0开始的内容填充到ax寄存器中 值为 ax=1123H
mov bx,[2] ->同上,将内存中1000:2开头的内容填充到bx中 值为 bx=6622H
add cx,[1] ->同上, cx=2211H
mov add sub 指令
在基本的类型中注意不能的类型
不能实现mov 内存单元,内存单元
不能实现add ds,ax
不能实现mov 段寄存器,数据
样例:请写指令,累加数据段(123B)的前三个 字型数据
mov ax,123BH
mov ds,ax //将内存段ds设置为ax中存储的内容123B
mov ax,0
add ax,[0]
add ax,[2]
add ax,[4]
总结
- 字在内存中进行存储的时候用两个 连续的内存单元来进行存放,低位放在低位,高位放在高位
- 【address】表示偏移地址为address的内存单元,此时段地址取ds中的数据
- mov, add, sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令
- 当将数据进行相加如果超出了范围,那么超过的范围的字段直接舍弃掉
栈(FILO)
在CPU中的栈机制:
- push ax 表示将寄存器ax中的数据送入到栈中(将数据送到栈内)
- pop ax 表示将从栈顶取出来的数据送入到ax中(将栈顶的数据拿出来)
- 8086CPU的入栈和出栈操作的基本单位都是 字
- 由于基本单位是字,所以一定要注意高位和低位的区别
Q:我们怎么确定那一段是栈呢?我们在push和pop的时候,怎么确定栈顶呢?
A: 其实如同CS:IP代表下一次需要执行的内存的位置,栈也有SS和SP来进行表示栈的位置,其中 在任意
时刻,SS:SP指向栈顶的元素 因此push和pop命令执行之后,栈顶元素会发生改变。
push:
- SP=SP-2 SP指向当前栈顶元素的单元
- 入栈时候,栈顶元素由高地址方向朝着低地址方向增长
例题:如果将10000H~1000FH作为栈,初始栈的状态是空的,SS = 1000H,那么SP=?
谨记一点,SS:SP一直是指向栈顶元素,那么这个栈的栈底是1000F,而栈是空的,不存在栈顶元素,那么只能指向栈底元素的下一个单元了,SS:SP = 10010
因此SP=10H
pop:
原理就是跟push向反,得到的栈顶元素会填充到你的目标寄存器中
问题1:将10000H~1000FH作为栈,初始栈的状态是空的,将AX,BX,DS中的数据入栈
mov ax,1000
mov ss,ax
mov sp,0010H #栈的空间到1000F 但是栈顶元素应该是这个单位加上1(因为初始栈为空)
push ax
push bx
push dx
例题2:将10000H~1000FH这段空间看做是栈,初始状态为空
设置Ax = 001AH , BX = 001BH
利用栈,交换AX与BX中的数据
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001AH
mov bx,001BHpush ax
push bx //此时栈顶到栈底分别为bx ax
pop ax //将栈顶字 bx放置到ax中
pop bx //将栈顶字 ax放置到bx中
总结cs、ss、ds
- CS:IP 代码段
- SS:SP 栈段
- DS:IP 数据段
实验二:用机器指令和汇编指令编程
汇编语言王爽老师第四版(寄存器解读与实验二)相关推荐
- 汇编语言 王爽(第四版)复习笔记
第一章 基础知识 机器语言是机器指令的 集合. 汇编语言的主体是汇编指令,决定了汇编语言的特性. 汇编语言 汇编指令:机器码的助记符,有对应的机器码. 伪指令:由编译器执行,无对应机器码. 其他符号: ...
- 汇编语言实验四-《汇编语言-王爽老师》
4.实验四 1.编程传送数据到内存 编写代码 编译连接 debug调试 调试几次循环发现没有错误,可以直接在 loop 指令处使用 p 指令,跳过剩余的循环 执行结束后查看一下内存,是否正确写入 2. ...
- 汇编语言(王爽)第四版检测点2.2答案
(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为0010H到1000fH. 物理地址 = 段地址 * 16 + 偏移地址 注:偏移地址16位,变化范围为0~FFFFH 物理地址 ...
- 汇编语言实验一-《汇编语言-王爽老师》
1.实验一 1.预备知识:debug的使用 r :查看寄存器值 r ax :修改寄存器ax值 d :查看内存中的值,d 段地址:偏移地址(从指定位置,默认显示128个内存单元内容) d 1000:0 ...
- 汇编语言实验八-《汇编语言-王爽老师》
8.实验八 首先将程序编译连接,然后debug调试跟踪. 查看一下寄存器内容 发现IP的初始值为5,说明代码段前面还有其他内容(start前面的两条程序结束指令).然后查看一下各个指令所占的内存空间 ...
- 汇编语言实验七-《汇编语言-王爽老师》
7.实验七 首先查看data段中各个数据的存放位置 076A:0H-076A:53H:存放年份 076A:54H-076A:0A7H:存放收入 076A:0A8H:开始存放雇员数 编写代码如下(htt ...
- 汇编语言实验十-《汇编语言-王爽老师》
10.实验十 1.显示字符串 主要需解决的问题:字符串在显存中的地址定位 代码及注释如下: ;LAB10-1.asm assume cs:code data segmentdb 'Welcome to ...
- 汇编语言实验五-《汇编语言-王爽老师》
5.实验五 (1).输入程序,debug调试跟踪 问题一:data段中数据不变 问题二:cs=076C.ss=076B.ds=076A 问题三:X-2.X-1 (2) 数据段以及栈均定义了两个字的数据 ...
- 汇编语言环境准备-《汇编语言-王爽老师》
0.环境准备 1.DOSBox 1.1.简介 基于 x86 架构的 DOS(磁盘操作系统(Disk Operating System),是早期个人计算机上的一类操作系统.DOS是1979年由微软公司为 ...
- 汇编语言实验九-《汇编语言-王爽老师》
9.实验九 思路大概就是一个大循环(s0)两个小循环(s1.s2),大循环执行三次,内嵌两个小循环,每一次大循环结束后,均会完成一行的字母和属性复制到目的地址.两个小循环的作用分别是复制字符到目的地址 ...
最新文章
- Ajax Toolkit Control ——CollapsiblePanelExtender(隐藏显示效果)
- Android-使用FindBugs
- BO QUERY BUILDER - SI_INSTANCE相关属性
- 动态路由协议之OSPF
- eclipse中安装Tomcat
- Leetcode题目:Binary Tree Paths
- docker容器别人访问很卡_一篇文章带你走进Docker的世界
- 01-hadoop学习环境准备
- R学习笔记:《R语言入门与数据分析》
- 联合几位大佬给大家送110本技术书籍!包邮到家!!
- 大环境之下软件测试行业趋势能否上升?
- http前后端传参写法
- msib450i gaming plus ac 开机vga长亮
- 内存泄露方式有哪些和如何查询内存泄露?
- RedisUtils工具类,设置缓存,然后需要在删除,更新插入的时候清空缓存,保持redis和mysql的数据一致
- 阿松嘚嘚嘚-数据库篇3-查询优化不简单(上)
- 电脑疑难杂症之Windows更新
- 编译安装redis6.2.6
- 移动互联网下半场争夺战:逃不过娱乐大网,得年轻中产得天下
- 转:人的认识如何自我超越
热门文章
- 建文本文档 怎么改成html,文本文档怎么改格式 怎么把文本文档改成CFG格式
- sqlserver2005安装(附加sqlserver2005 和 sqlserver2005 sp4补丁,完整安装包)
- 计算机程序设计vb怎么保存,VB编程:读取文本文件和保存文本文件的方法
- 【读书笔记《Android游戏编程之从零开始》】14.游戏开发基础(Bitmap 位图的渲染与操作)
- C语言数据结构——数组的定义与顺序存储
- XMind软件简易使用教程
- 一文读懂python中数据纬度是怎么数的。
- python游戏程序代码大全_python小游戏代码,python小游戏代码大全打枪
- 如何实现现实人脸照片的编码
- 区块链技术指南之分布式的一致性