1.

编码系统,表示系统:

地球的经纬度,时间的小时分钟秒、天上的星星:白羊座,金牛座。。用图形编码,表示。

汉字,中文语言。汉字用图形对世界进行表示、用拼音字母对声波,声音的一种表示。

编码是人类对世界的一种表示。

汇编语言是 低级语言 低级的表示系统

C语言,C++语言,java语言,python语言都是高级语言,高级的表示系统

但是汇编语言 提供了一种观测手段,是其他语言不具备的、

从机器的角度思考问题的思维方式

2.

18十进制、位的概念

例如:十进制的437就是4*10^0+3*10^1+7*10^2=437

其他的进制也是这样,计算机中都是2进制。

19.二进制

通过观察,发现二进制的1和0可以表示有和没有。可以加速计算速度。2^1,2^2,2^3分别有没有,有就相加,没有就不管,可以加速计算。

20.十进制转换为2进制 通过观察和尝试,发现新的计算方法

从下往上写上去,就是二进制(同数字逻辑)

21.

在合适的位置上填上1

<---------------------------------------------

256 128  64   32  16  8  4  2  1

例如 84=64+20=64+16+4

43=32+11=32+8+3=32+8+2+1

22.十六进制

”10~15“~“ABCDEF”

即“0~F”

一个数 H   /十六进制

一个数,后边啥也没有就是十进制

一个数 B    /二进制

还有八进制,但不讲

22.转换十六进制方法同转换二进制方法一(自下而上)

23.十进制快速转换十六进制。

还是凑16的倍数。一般只在数字比较小的情况下使用。不要超过255

25.十六进制快速转换二进制

因为是四个二进制表示一个十六进制,

不满足四位的自动补齐四位。

27.汇编语言知识

计算机由什么驱动:电

只有电吗?          很多部件,机器组成、组织在一起运行,指令告诉它怎么做,机器指令即二进制

cpu部件、将一串二进制数字,转换成高低电平,驱动计算机运行。

dosbox -debug -u

左边是一串相同的十六进数字,某种编号。       十六进数字          一些英语单词的简写  一些数字

/* 左边是机器指令,右边是汇编指令。

例如: mov ax 0005 :        将0005移动到ax的箱子里

翻译软件:编译器;        作用:翻译汇编指令到机器指令

伪指令        告诉编译器,也就是翻译软件,这里怎么翻译,哪里怎么翻译。

符号体系        编译器管

28.汇编指令存放

汇编指令放在cpu里

绝大多数 指令和数据都是存放在内存条中。        /存放在内存中

/*内存编号为什么都是 073F:02CE这样的形势

/*内存编号为什么都是从0开始的

内存的最小单元是什么?         23 H E9 H     即一个字节,八个二进制位。1byte= 8bit

1kb=1024byte

,,,,,,

机器指令和汇编指令是以什么形式存放在内存中?                二进制,译码器为了方便人们阅读

29.cpu区分指令和数据,

内存编号信息:         地址线 内存地址

数据信息:                 数据线

读写信息:                 控制线

电路可以表示,高低电平,即表示0和1

地址线的数量决定了能找到多大的内存地址,即寻址能力。

地址线的数量决定能传多少个0或者1、决定了能找到多大地址

30.数据线

决定了cpu和 其他部件进行数据传送时  一次性能够传送     多少数据的能力

8KB需要13跟地址线。8kb=8*1024=2^13  正好。所以是13跟地址线。   一个字节是一根线,即两个十六进制数

33.显卡,显存,向显存中修改东西,会直接显示在屏幕上。cpu  内存空间,内存条,显存还有rom。假设内存条的地址是100~200、显存地址是201~300、即向201中写入即在屏幕中显示出来。

ram                允许读取和写入        断电后 指令和数据就丢失了

rom                 只允许读取                断电后  指令和数据还存在  一般用在启动计算机

34.主板上可以插什么?                鼠标键盘 音箱麦克风

cpu通过主板上的端口访问        port

input           out                分别是端口的读取和写入

cpu可以通过主板上的电路读到所有的数据。

35. cpu也是给 各个端口编了号的。

现在有了GPU、早期是没有的,都是CPU搞。后来CPU忙了,要分工

也有GPU的专门的语言,但是很少,需要物理知识和数学知识。        别碰

汇编针对CPU、通过汇编指令去修改  寄存器中的内容,从而控制CPU  就可以控制整个计算机。

AX是数据寄存器

DS   ES   SS    CS   都是冒号左边的地址信息,ip很像。

36.

AX  的高8位构成 AH寄存器                H即 high

AX  的第8位构成AL寄存器                L即low

0000 0000~1111 1111 0~FF  0~255  即256种状态

为了兼容,8位寄存器,以前编写的程序,稍加修改,就可以允许在8086CPU

16跟数据线,所以,8086cpu一次性可以处理 2种尺寸的数据

字节型数据        byte  8bit      -8位寄存器中

字型数据            2byte -  16bit    - 16位寄存器中    2个字节

即一个字节是这个字型数据的高位字节,一个是低位字节

翻译软件在使用mov指令时、要注意寄存器位数的一致性。即AX是16位,所以翻译器会翻译为16位即四位十六进制数,不够的会自动补齐。AL是8位,只有八位即两位16进制数。

位数不一致即,报错。error

翻译器不认识十进制,会自动翻译位16位。即即使是mov ax,0005也会报错,但mov ax,0005H就不会报错。

39.汇编指令:

mov ax,1000        /*修改ax的数值为十进制的1000,若要修改为二进制则 1000B、十六进制为1000H

add ax,al                /*让ax 的al相加,保存在ax中。即ax=ax+al        /*al可以换成数

8位寄存器运算时,超过了存的数值,只留下后边几个数。前面的进位了,进位到了其他地方。

即        寄存器是互相独立的,不会互相影响。

若输入指令时候,直接就超过了数值,则报错,不会执行。

40.

打开dosbox后,输入debug

然后r回车,写入mov指令或add指令等

输入后,按两次回车,再按t回车,显示一步一步的运算结果。

地址信息也可以当作一种数据,ax=ah+al、bx、cx、dx

41.地址寄存器

段地址寄存器,                偏移地址寄存器

ds                                        sp

es                                        bp

ss                                        si

cs                                        di

ip

bx

地址寄存器也都是两个十六位

8086cpu是20跟地址线,即只有

地址加法器        :地址的计算方式

段地址*16(10H)+偏移地址=物理地址

还有种说法是,段地址*16 = 基础地址

即基础地址+偏移地址=物理地址

例:

段地址           +              偏移地址          物理地址

F230H *10H                C8H                =F23C8H

一个最终的物理地址只要满足,段地址*10H+偏移地址(0~FFFFH)就可以找到同一个物理地址

43.  偏移地址范围:0~FFFFH         反过来思考,能不能找到物理地址

44.cpu怎么区分指令和数据

u指令                将某个内存地址  开始的字节  全部当作  指令

d指令                将某个内存地址开始 字节  全部当作数据

r ds就可以改变ds的值,回车后输入值,再回车,再r回车就显示改了没

在内存中,指令和数据是没有任何区别的,都是二进制信息,只要cpu在工作的时候才将有的信息当作指令,有个信息当作数据。cpu根据什么将内存中的信息当作指令,,cpu将cs,ip指向的内存单元中的内容当作指令。

45.cs和ip决定了cpu从哪里读取指令

一条指令可以由多个字节构成

46.指令的执行过程:

1.CPU从cs:ip所指向的内存单元读取指令,存放到指令缓存器中

2.IP = IP  +  所读取指令的长度,从而指向下一条指令

3.执行指令缓存器中的内容,回到步骤一 (即从新的cs:ip中读取指令)

通过dosbox可以看到,一次性输入多个指令后,按t看的时候能看出,指令缓存区

47.        jmp        :转移指令,可以修改cs和ip这2个寄存器,决定了CPU从哪里读取指令

如果不能直接通过  jmp,100

检测:

a 2000:0

即运行下边的指令的时候,要先用r  cs   改到2000;r  ip   改到0

再r看运行的结果

(可以通过 u cs :ip看这个地址往后的指令)

/*call cpy Boot        转移指令,将ip保存起来,用的时候用ret再拿出来,直接给ip

49.sub         减法

mov ax,bx

sub ax.ax

jmp ax

cpu修改了ip四次,分别是,执行123语句及jmp  ax的时候,最后的IP为 0

调试工具

50.

r        可以查看,和改变寄存器中的内容

d        可以查看,内存中的内容                /*最右边的是ascll编码 数字符号和英语字母

d  1000:0  F        看0到F的编码即一行                2F则是两行

d  1000:9      从第9个开始看(最后九个也减去)但是d  1000:9 F的时候,最                                                        后九个不去掉,只倒数的九个去掉。

u        可以将内存中的机器指令翻译成汇编指令                u 1000:0  从1000:0开始的指令翻译成                                                      汇编指令,方便我们人看。

a        以汇编指令的格式在内存中写入                        可以在想改的位置改成自己的指令。

t        执行当前 cs :ip所指向的机器指令                        执行指令。

e        可以改写,内存中的内容                                        /*修改前可以先看一下有没有内容

/*Alt  +G  是英文的双引号 Alt +;是英文的单引号

中间的是用ascii编码        /*可以自己在记事本中,按住alt同时按键盘右边的小数字键盘打出对应的数字,看看是不是一样。

51.

这里要运行就得先,跳转到指定的cd:ip                /*因为是在这里加的指令

52.

输入简单的代码后,

a 2000:0000

mov ax,1

add ax,ax

jmp 2000:0003

然后开始运行,先看看下一步执行哪里的代码,用a cs:ip修改掉,直接跳转2000:0000

然后t看运行结果,截图是一步一加,一步一跳转

因为是rom内存,只能读不能写

53.寄存器        1.数据寄存器        2.地址寄存器(段地址寄存器、偏移地址寄存器)        3.标志位寄存器

AX

BX        也可以被当作偏移地址寄存器

CX        其他

DX        AX、DX用来处理数据

这四个都是通用寄存器

上边四个十六位寄存器、每个都可以分成两个独立的八位寄存器

寄存器之间是相互独立的,不会一个寄存器进位到另一个寄存器

段地址寄存器:        ds        es        ss        cs

偏移                          sp        bp        si         di        ip        bx

54.

字节型数据  字型数据      2byte

字型数据        高位字节和低位字节

一个字型数据,        存放在内存中  可以由2个连续的地址的内存单元组成

高地址        内存单元存放  字型数据的  高位字节

低地址        内存单元存放  字型数据的  低位字节

55.ds 段地址寄存器  一般访问数据用

mov al,ds:[0]                /*这个指令输入后,CPU从内存中读取一个字节。al寄存器是八位

dosbox中不能这样输入,只能这样:        mov al,[0]

将这些值赋值给ds

不能直接使用 mov ds,1000来给ds赋值,只能 mov bx,1000 mov ds,bx来赋值。/*8086没这个功能

ax是字型数据,mov ax,dx:[0]        因为ax是十六位寄存器

56.

用e指令修改内存中的内容,然后使用各种mov  **  【0】来执行修改内容

/*修改哪里,看ds的值是多少,就修改哪里。记得加上:0

58.小结:

字节型数据        字型数据在从内存中的存放

字型数据        在内存中存储时,需要两个地址连续的

数据的长度不同,字节型数据的1在内存中是01;字型数据在内存中是01 00

7.6  检测点3.1

7.10   栈的概念

栈: 一段连续的内存单元,一段连续的内存地址

特殊的访问形式        可以通过mov移动指令

mov ax,1000

mov ds,ax

mov ax.ds:[0]

mov ax,ds:[2]

……

7.11栈的指令

入栈:push                将16位寄存器 或者内存中的 字型数据  放到栈顶标记的上边 修改栈顶标记

出栈:pop                   将栈顶标记的 所标识的 字型数据 16位寄存器或内存中,修改栈顶标记

数据的长度是字型数据,即用入栈操作的时候得用ax、bx这十六位寄存器,不能用八位

栈顶标记 在入栈时,决定放置的位置并修改栈顶标记;出栈时,决定拿走数据的位置,并修改栈顶标记

栈顶标记        就是内存地址

在8086CPU中在任意时刻  将短地址寄存器SS和偏移地址寄存器SP所组合出来的内存地址当栈顶标记

push ax        修改sp寄存器中的数值    sp=sp-2

将ax中的字型数据存放到ss:sp所组合出来的内存地址中。即入栈

pop bx           ss:sp所组合出来的内存地址中的字型数据存放到bx中

修改栈顶标记sp=sp-2        即成为新的栈顶标记,,出栈

7.13

可以看栈在内存中的存放

7.14        栈的设置

确定栈的位置                很简单,定义一个ss即可

mov ax,2000

mov ss,ax

/*不能直接mov ss,2000

定义栈的大小:                 因为每次使用pop指令都会使ip-2、所以起始地址  +  设定的栈大小 字节

mov sp,10

/*老师建议设置的时候设置16的倍数

7.15        栈的越界

存放的个数超过了栈的上限,可能会把之前存放 的数据弄错,也可能把别的地方的数据弄错

且 8086CPU无法设置栈的大小,无法限制。所以只能靠自己设置栈的大小预防越界

7.16        栈的极限大小

SP寄存器的变化范围:0~FFFFh 即65536,即32768个字型数据

即一个栈的极限存放数量是32768个,放的再多了就会覆盖原来的数据。

7.17        栈的作用

1.临时性保存数据

因为寄存器就那么多,不想编程语言一样可以自定义无数个变量。所以变量多了不好控制,变量冲突的 时候,后边的要用先入栈,然后使用完了再取出来(换回原来的变量)

2.用栈进行数据交换

例如1.ax与bx的数据交换、2.将内存中的ds[0]与ds[2]的数据交换

 

7.21 实验任务

做实验发现,即使只用了mov移动指令,也会改变栈中的值

每执行一条指令,就会把一些信息保存在栈中

7.23  承上启下

我们可以用e指令来在一块连续的内存中存放数据,也可以用a指令在一块连续的内存中存放指令

然后用u 1000:0查看指令

用d1000:0 f看数据

我们可以通过修改cs  ip这两个寄存器,去指向我们定义的代码段,这样CPU就会执行我们定义的代码段

修改ss:sp指向的地方当作栈空间;push和pop

安全性问题

要是不小心修稿了系统存放在内存中的重要数据或指令,会导致程序的崩溃,甚至是系统的崩溃。

安全的内存空间:                0:200~0:2FFH

操作系统分配给你内存空间,操作系统不会让你与其他的程序产生冲突

一般来说有两种方法:程序加载的时候系统给其分配的空间

程序在执行过程中,向系统再去申请内存

以后写程序要从源程序里写,安排自己的代码段,数据段,栈段。

以后写代码会有伪指令,告诉翻译器怎么翻译

哪里是代码段,哪里是地址,哪里是数据。从而让CPU按照我们的安排访问数据段,栈段

至于代码段,由cs:ip来带

补充:执行exe文件就是系统分配内存的过程。

不同的系统就是不同的内存分配器,xp和win7运行同样的dosbox时,内存的使用情况是不一样的。

汇编语言的基础知识一相关推荐

  1. 汇编怎么从内存地址写入连续的数字_汇编语言 第一章 基础知识

    系列文章见:Neptune 第一章 基础知识 1.1 机器语言 机器语言是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令. 由图可见,机器语言是十分晦涩难懂和不易查错的. 1.2 汇编 ...

  2. 汇编语言二进制转十进制_汇编语言笔记(一)——基础知识

    汇编语言基础知识 汇编语言组成 汇编指令:就是机器指令的助记符 伪指令 其他符号 计算机中数的表示 2^10=1K 2^20=1M 2^30=1G 2^40=1T 进制运算 二进制运算:1+1=0(向 ...

  3. 汇编语言(一)-基础知识

    基础知识 0. 教材版本信息 1. 汇编语言的特点 2. 数制及之间的转换 3. 运算模式及规则 4. 涉及的符号编码 5. 习题 0. 教材版本信息 IBM-PC 汇编语言程序设计(第二版) 沈美明 ...

  4. 《汇编语言》第1章 基础知识

    汇编语言是直接在硬件之上工作的编程语言,我们首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程.在本章中,我们对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行.当课彺进 ...

  5. 《汇编语言》- 读书笔记 - 第1章-基础知识

    <汇编语言>- 读书笔记 - 第1章-基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储 ...

  6. 【汇编语言】一章 基础知识 机器语言 CPU 存储器 内存地址空间

    汇编语言有助于我们理解高级语言,了解基于内存地址的内存操作,建立指针与实际内存单元之间的思维映射 C语言中的数据类型,形参实参,函数调用,全局变量,局部变量等内容都与之相关,通过学习汇编语言的操作关联 ...

  7. Win32基础知识5 - Win32汇编语言006

    Win32基础知识5 让编程改变世界 Change the world by program Windows的内存安排 这节课我们需要理解三个概念: 每个应用程序都有自己的4 GB的寻址空间,就算这个 ...

  8. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...

    文档介绍: 计算机基础知识+ Word基础知识+ Excel基础知识 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为(    ). A.UNIVAC    B.EDSAC    C.E ...

  9. 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc

    计算机基础知识习题.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机基础知识题计算机的诞生:第一台电子计算机是1946 ...

最新文章

  1. IAR切BANK--BANK说明
  2. mysql不同的类的个数_Mysql数据库-SQL优化-统计某种类型的个数
  3. java的注解_java-注解相关
  4. 宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)
  5. GSK携手学术机构共建健康大数据系统
  6. 【英语学习】【Level 07】U04 Rest and Relaxation L3 The finest hotel
  7. nodejs的安装和使用
  8. 520晚上,我用python破解了前女友的加密文件,结果却发现。。。
  9. 结合django动态生成salt的pillar数据
  10. ubuntu主题美化
  11. CLRInjection - 通用托管注入(超级灰色按钮克星升级版)
  12. C语言冒泡排序(从小到大排序)
  13. MATLAB图像分割GUI
  14. Dubbo Monitor 分析
  15. iOS APP审核注意事项
  16. Zigbee通讯之开发篇(基于TI 的Z-Stack)
  17. 如何写互联网产品分析报告
  18. 最新pycharm安装教程
  19. 从零开始搭建环境安装FCOS(Ubuntu18.04)
  20. OAuth2第三方登录快速接入

热门文章

  1. 按键精灵---插件关于窗口的各种操作
  2. 批处理之批量修改文件扩展名
  3. 王慧文清华产品课(一)
  4. Win11如何调整鼠标dpi?
  5. 架构师的 36 项修炼第07讲:高性能系统架构设计
  6. ROS2—服务(Service)
  7. u盘/移动硬盘的视频文件出现损坏怎么办?修复损坏视频办法分享!
  8. 31.3 Java进阶之lambda方法引用
  9. Windows下安装Nexus私服及更新索引
  10. 关于开发人员学习的网站【收藏】