美文网首页C语言&嵌入式读书我的大学
混子汇编语言学习之03笔记

混子汇编语言学习之03笔记

作者: 那个混子 | 来源:发表于2021-10-17 00:20 被阅读0次

第3章

开篇引言

本章核心内容为字的理解认识、和几个汇编指令的理解。
非常重要,念“zhan”,这个东西也是面试最常考的东西。

1、内存中字的储存

在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
例子容易记忆:


(1)0地址单元中存放的字节型数据:20H;
(2)0地址字单元中存放的字型数据:4E20H;
(3)2地址单元中存放的字节型数据:12H;
(4)2地址字单元中存放的字型数据:0012H;

2、DS 和 [address]

DS寄存器:通常用来存放要访问数据的段地址
[address]表示一个偏移地址为address的内存单元,段地址默认放在ds中
通过数据段段地址和偏移地址即可定位内存单元。
例子:
mov bx, 1000H //bx = 1000H
mov ds,bx //ds = 1000H,前面两步主要是为ds赋值,也就是提供段地址,因为ds寄存器不能直接进行数值赋值!
mov al,[0] //把10000H(1000:0)中的数据赋值给al;

3、字的传送

8086CPU是16位结构,有16根数据线,一次性可以传输16位数据,也就刚好一个字的数据。

例子:

需要注意一个字的数据占两个字节,也就是16位,对应的如果往地址里面写值时,这个偏移地址应该是以2为间隔的!

4、栈

栈是一种具有特殊的访问方式的存储空间。
栈先进的后出,后进的先出
书中的例子比较形象好理解:

栈的基本操作
  • 出栈:从栈顶取出一个元素。
  • 进栈:将一个新元素放到栈顶。
CPU的栈机制

栈是定义的一段内存空间,8086中提供了两个指令来对其进行操作

  • PUSH:出栈指令
  • POP:入栈指令
需要注意8086中对栈的操作都是以字为单位的,也就是操作的是两个字节的空间。

SS、SP

  • 栈段寄存器SS,存放段地址,
  • SP寄存器存放偏移地址,
    任意时刻,SS:SP指向栈顶元素

8086CPU中,入栈时,栈顶从高地址向低地址方向增长

分析:

push ax表示将寄存器ax中的数据送入栈中,由两步完成。

先改变SP,后向SS:SP处传送

SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;
将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。

先读取SS:SP中数据,后改变SP
如图所示: image.png

pop ax表示从栈顶取出数据送入ax,由以下两步完成。将SS:SP指向的内存单元处的数据送入ax中;
SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

例子理解:

要求:
1、将10000H~1000FH这段空间当作栈,初始状态栈是空的;
2、设置AX=001AH,BX=001BH;
3、将AX、BX中的数据入栈;
4、然后将AX、BX清零;
5、从栈中恢复AX、BX原来的内容。

mov ax, 1000H                               
mov ss, ax              //初始化段地址ss为1000H
mov sp, 0010H           //设置栈顶的偏移地址,因为栈空,故SP=0010H(最底部字单元地址加2)
mov ax, 001AH           //ax=001AH
mov bx, 001BH           //bx=001BH

push ax                //将ax压栈,地址为1000:000EH  先进栈
push bx    ;           //将bx压栈,地址为1000:000CH 后进栈

sub ax, ax  // ;将ax清零,也可以用mov ax,0,
             //;sub ax,ax的机器码为2个字节,
            // ;mov ax,0的机器码为3个字节。      
sub bx, bx  //同上
 /*从栈中恢复ax、bx原来的数据*/ 
pop bx  ;     //出栈,数据储存到bx中;先出栈
pop ax  ;     //出栈,数据储存到ax中;后出栈
上述例子对本章进行了一个总结学习,需要明白栈是先进后出的!

参考资料 王爽《汇编语言第三版》

欢迎关注本人微信公众号:那个混子
记录自己学习的过程,分享乐趣、技术、想法、感悟、情感!

相关文章

  • 混子汇编语言学习之03笔记

    第3章 开篇引言 本章核心内容为字的理解认识、栈、和几个汇编指令的理解。栈非常重要,念“zhan”,这个东西也是面...

  • 混子汇编语言学习之02笔记

    第2章 寄存器 开章: 前面有博世面试的时候,就问过一个问题,为什么要有寄存器?当时自己也没有说清楚,看完这一章...

  • 混子汇编语言学习之01笔记

    第一章 基础知识 1、指令 机器指令:CPU能直接识别并执行的二进制编码,就是一些二进制数。汇编指令:汇编指令...

  • 混子汇编语言学习之05笔记

    第五章 前言 本章主要介绍了[BX]、LOOP的相关使用及含义,主要还是通过程序例子学习理解,其中LOOP是一个循...

  • 混子汇编语言学习之04笔记

    第四章 对应参考资料,是第四章内容了 前言 在本章主要简述了程序整个过程(编辑、编译、连接、载入、运行),这个理解...

  • 混子汇编语言学习之06笔记

    引言 看资料的第六章内容,都是一些汇编代码案例,本章内容较少,简单记录一些,方便日后随时随地都可以查看。学到这里,...

  • 混子汇编语言学习之07笔记

    看了第七章内容,大概记录一下 引言 这段时间学的有点慢,不过慢慢的也看了7章的内容了,下面也是通过例子熟悉学习,这...

  • 《Stone历史剧》--两晋 之 西晋有点乱

    《Stone历史剧》--两晋 之 西晋有点乱 原创 2016-03-17 二混子stone 混子曰 西晋有点乱 阅

  • 《Stone历史剧》--两晋 之 东晋真纠结

    《Stone历史剧》--两晋 之 东晋真纠结 原创 2016-05-03 二混子stone 混子曰 一个用生命总结...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

网友评论

    本文标题:混子汇编语言学习之03笔记

    本文链接:https://www.haomeiwen.com/subject/lawroltx.html