汇编语言 王爽

汇编语言

王爽

目录

汇编语言... 1

王爽... 1

第一章:基础知识

第二章:寄存器

第三章 寄存器(内存访问)

第四章 第一个程序

第六章  包含多个段的程序

第七章 更灵活定位内存的方法

第八章 数据处理的两个基本问题

第一章:基础知识

汇编语言:汇编语言是什么?为什么学习汇编语言?学习汇编语言是学习什么?

早起使用机器语言,但机器语言 晦涩难懂也难以使用,所以出现了汇编语言。即用通熟易懂的汇编指令替代全是二进制0和1的机器指令。

于是也就出现了编译器,即把汇编指令翻译成机器指令。

机器指令和汇编指令都不能脱离具体的硬件设计和内部结构,没有可移植性故而又产生了高级语言。

汇编语言发展至今,由一下3类指令组成。

1、  汇编指令:即机器码的助记符,有对应的机器码

2、  伪指令: 没有对应的机器码,有编译器执行,计算机并不执行

3、  其他符号:如:+ 、- 、*、%等有编译器识别,没有对应的机器码

汇编语言的核心即汇编指令,它也决定了汇编语言的特性

何为CPU 即 指令和数据的处理!

指令和数据存储的地方 即内存

CPU来完成具体指令和数据的动作,那么存取就要和内存交互

1、  存储单元的地址(地址信息)

2、  器件的选择、读或写的命令 (控制信息)

3、  读或写的数据(数据信息)

地址总线: 决定寻址能力

数据总线:决定一次传输的数据位数

控制总线:决定了CPU对外部器件提供了多少种控制 即CPU对外部器件的控制能力

一句话:CPU为具体外部器件分配对应内存地址空间并通过各种控制器(接口卡)对其进行控制。

8086地址总线宽度为20,(0~220)即内存地址空间为1MB

80386地址总线款第为32, (0~232)内存地址空间为4GB

大B 小 b ,默认一个内存空间大小为1BYTE = 8bit  即字节和位的区别

为什么一个内存单元是8位? 看计算机组成原理吧

第二章:寄存器

一个典型的CPU由运算器 寄存器 和控制器组成;运算器进行运算,寄存器负责存储,控制器控制各个器件进行工作;内部总线负责连接各个器件在他们之间传递数据。

对于一个程序员来讲,CPU主要器件是寄存器,我们通过改变各种寄存器中的内容来现实对CPU的控制。

8086CPU有14个寄存器:AX BX CX DX

CS DS SS ES

SI DI SP BP IP PSW

CPU如何寻址内存?

20位地址线  16位宽寄存器

8086采用 物理地址 = 段地址X16  + 偏移地址 的方式

由地址加法器完成

“段地址X 16 + 偏移地址 = 物理地址” 的本质含义是: CPU在访问内存时 用一个基础地址(段地址X16)和一个相对于基础地址的偏移地址相加 给出内存单元的物理地址

注意: 分不分段  段的大小  代码段 数据段 堆栈段 。。。和内存绝无关系 内存只是内存

一切只是CPU如何根据我们的安排操作而已

段地址自然由四个段寄存器提供    CS DS ES SS

CS 和IP

CS为代码段寄存器 IP 为指令指针寄存器 CS:IP 指向的内容当作当前指令执行

CS:IP指令段寄存器

MOV 传送指令

JMP  转移指令 能够修改CS IP内容的指令被统称为转移指令

jmp 段地址:偏移地址

Jmp 某一合法寄存器  : 用寄存器中的值修改IP

Jmp 2AE3:3  执行后: CS=2AE3H  IP=0003H

Jmp ax,       执行前: ax=1000H  CS=2000H IP=0003H

执行后: ax=1000H    CS=2000H IP=1000H

第二章从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。

关于DEBUG实验

1、R   查看 改变寄存器内容  -r, r ax

2、D   查看 内存中内容      d 1000:0  (指定地址开始的128个内存单元)

使用d之后 可以继续d

d  1000:0 10

3、E    修改内存的内容      e 1000:0 0 1 2 3 4 5 6 7 8 9

4、U         查看机器码对应汇编指令

5、T    执行一条或多条指令

6、A    以汇编指令形式在内存中写入机器码

实验一:

查看、修改CPU中寄存器的内容: R指令

查看内存中的内容: D 命令

修改内存中的内容: E 命令(可以写入数据、指令,在内存中他们实际没有区别)

将内存中的内容解释为机器指令和对应的汇编指令:U命令

执行CS:IP指向的内存单元处的指令: T 指令

以汇编形式向内存中写入指令: A指令

第三章 寄存器(内存访问)

字节单元

字单元

DS和[address]

DS 通常用来存放要访问数据的段地址

Mov bx,1000H

Mov ds,bx

Mov al,[0]

[…]  表示一个内存单元  数据表示内存单元的偏移地址  自动取DS为段地址

思考: 写几条指令 ,将al 数据传送到内存单元10000H处

即: Mov al,[0]    mov [0],al

MOV 内存单元地址,寄存器名

目前为止:

MOV 寄存器,数据

MOV 寄存器,寄存器

MOV 寄存器,内存单元---MOV 段寄存器,内存单元

MOV 内存单元,寄存器---MOV 内存单元,段寄存器

MOV 段寄存器,寄存器—MOV 寄存器,段寄存器

第三章从内存访问角度学习寄存器

字单元   N地址字单元

8086CPU 不支持将数据直接送入段寄存器的操作 只好用一个寄存器中转

这属于硬件设计的问题,不必深究

Mov bx,1000H

Mov ds,bx

栈 是一种具有特殊的访问方式的存储空间,其特殊性在于,最后进入这个空间的数据最先出去。

LIFO  Last In First Out  后进先出

入栈 出栈

CPU提供栈机制

于是我们可以把一段内存当作栈来使用

最基本的两个指令即 PUSH(入栈) POP(出栈)

相应的 提供两个寄存器 段寄存器SS 和 寄存器SP

栈顶的段地址放在SS中  任意时刻,SS:SP指向栈顶元素

PUSH 和POP 是 CPU从SS:SP中得到栈顶的地址

入栈时 栈顶从高地址到底地址方向增长

SS:SP指向栈空间最高地址单元的下一个单元

CPU对栈的操作是否越界不负责任

Push 寄存器

Pop 寄存器

栈也是内存一部分

自然有

PUPSH 内存单元

POP内存单元

PUSH 段寄存器

POP  段寄存器

改变SP后 写入内存

读内存后 改变SP

[1]

第四章 第一个程序

1、  编辑  预处理  编译 链接 执行(载入内存)

伪指令格式:

XXX segment

XXX ends

end   汇编程序的结束标记

assume  “假设” 某些情况下可以将段寄存器和某一段关联

DOS程序加载过程

学习汇编的目的就是通过汇编语言进行编程而深入理解计算机底层的基本工作机理,进而随心所欲的控制计算机。

第五章 [bx] 和loop

1、[bx]  和[0]类似   段地址也都在ds中

2、loop 循环

3、定义描述性符号”()”

(ax) 表示ax中的内容

4、  约定idata 表示常量

@来个[bx] 有啥意思呢???

Loop指令执行过程

1、(cx)=(cx)-1

2、判断cx值 不为0则转至标号处执行,为0 向下执行

考虑这样一个问题: 计算ffff:0006单元中的数乘以3,结果存到dx中.

Debug 和masm 处理mov a1,[0]方式不同

段前缀

第六章  包含多个段的程序

第七章 更灵活定位内存的方法

第八章 数据处理的两个基本问题

第九章 转移指令的原理

段内转移

段间转移

短转移

近转移


[1]

时间: 2024-10-26 21:20:45

汇编语言 王爽的相关文章

汇编语言 王爽第二版 总结

汇编语言 王爽第二版 总结,所以内容都是8086的 summary asssembly ,汇编总结 why: 最初始的编程语言就是使用打孔机,打出来的0 1 代码,然后把卡片插入到电脑中运行然后 看输出结果,这种纯01的二进制代码,编写困难调试困难运行结果的显示看着也很蛋疼,就像 一个简单的"hello world",11个字符,需要11×8个二进制,并且再进行输出,就更麻烦,因为 全部都是二进制,代码.为了更高效的开发程序,就出现了汇编语言,用来代替二进制代码的输入. what: 汇

汇编语言(王爽)pdf

下载地址:网盘下载 <汇编语言(第2版)>是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作.汇编语言是很多相关课程(如数据结构.操作系统.微机原理等)的重要基础.为了更好地引导.帮助读者学习汇编语言,作者以循序渐进的思想精心创作了<汇编语言(第2版)>.<汇编语言(第2版)>具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索:在深入本质的层面上对汇编语言进行讲解:对关键环节进行深入

汇编语言 王爽著

汇编语言让我们深入了解计算机底层,值得去学习了解. 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植.

汇编语言 王爽著第三章

汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植.

汇编语言(王爽) 第1章基础知识

1.1 机器语言 机器语言就是机器指令的集合.机器指令是啥呢?就是一列二进制的数据,计算机把它转成高低电平,使计算机的其他器件驱动并运算.(计算机如何使用2进制语言?) 早期程序都是用机器语言写的,但是有个问题就是太麻烦,数据信息太长,写错一个0或1就会来BUG了. 这种机器语言根本不是人写的,注定会被淘汰. 1.2 汇编语言 这个时候,汇编语言就挺身而出. 汇编语言就是机器语言的便于记忆的格式把 一个指令1000100010001000 表示把寄存器A1的内容弄到寄存器A2上.如下 操作介绍:

汇编语言(王爽) 第6章包含多个段的程序

程序到了内存中我们分为code(代码)段,也就是大部分指令段,数据段,栈 6.1 在代码段中使用数据 上图 dw表示define word定义一个字,16位 会出现cs执行的前16位是数据段,后面才是指令,所以要把IP设成10h 或者直接在第一条指令前面在start,再在最后面的end start 程序运行的第一条不是汇编指令可能会报错把 6.2 在代码段中使用栈 这的题目都是从内存单元的数据换到另一个内存单元 开始奇怪,为啥不直接换,还要专门定义一个栈空间出来做个中间体 查了资料才知道,内存单

汇编语言(王爽) 第11章 标志寄存器

这里讲一个特殊的寄存器,flag 先看flag的16位显示 11.1 zf 指令执行后,结果0,ZF=1 指令执行后,结果不为0,ZF=0 11.2 pf 指令执行后,所有bit位中1的个数是否位偶数,若为偶数,那么pf=1 若为奇数,pf=0 11.3 sf 指令执行后,结果负,SF=1 指令执行后,结果不为负,SF=0 11.4 cf 进位 若出现进位,那么CF=1 没有的话CF=0 11.5 of 溢出, 数字的溢出. 8位范围是-128-127 若130就是溢出了 11.6 abc指令

汇编语言(王爽) 第7章 寻址方法

这章讲一些寻址方法,对前面寻址方法的总结把 7.1 and or 2个指令 上栗子 mov al,00001111b and al,11110000b al=00000000b mov al,00001111b or al,11110000b al=11111111b 7.2 ASCII码 之前就写过一篇ACSII码的,这里主要写下我们在键盘上按键再输出到屏幕的过程 我们在键盘上按下a键 这个信息被传到计算机,计算机用ASCII码对它编码,成为61h, 再扔到一个内存段中 文本编辑器把内存中的6

汇编语言(王爽) 第2章 寄存器

CPU由运算器,控制器,寄存器等器件组成 汇编指令可以操作寄存器中的数据.如mov AX,BX就是把寄存器BX中的值加上寄存器AX中的值,再把结果放在AX上 8086CPU的寄存器的有14个,这里就讲AX,BX,CX,DX,CS,IP这么几个先 2.1通用寄存器 就是指AX,BX,CX,DX 用来存放一般数据 如AX是16位,但是8086CPU之前的一代是8位的,所以AX分为AH,AL来兼容之前版本的数据 同理 BX,CX,DX.另外AH的H是high的意思,在左边高位,L是low的意思在右边是