1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 读书笔记-《汇编语言(第二版)》

读书笔记-《汇编语言(第二版)》

时间:2021-11-28 20:41:34

相关推荐

读书笔记-《汇编语言(第二版)》

文章目录

前言笔记第一章1.11.21.31.41.51.61.71.81.91.10小结1.111.121.131.141.15第二章2.1 通用寄存器2.2 字在存储器中的存储2.3 几条汇编指令2.4 物理地址2.5 16位结构的CPU2.6 寻址方式2.7本质含义2.8 段的概念2.9 段寄存器2.10 CS和IP2.11 修改CS和IP的指令2.12 代码段实验第三章3.1 内存中字的存储3.2 DS和【address】3.3 字的传送3.4 mov、add、sub3.5 数据段3.6 栈3.7 CPU提供的栈机制3.8 栈顶越界问题3.9 push、pop指令3.10 栈段实验第四章 第一个程序4.1 一个源程序从写出来到执行的过程4.2 源程序4.3 -4.8第五章 [BX]和loop5.1 [BX]5.2 Loop指令5.3 debug中使用loop5.4 debug和masm对于汇编的处理不同5.5 loop和[bx]的联合使用5.7

前言

为了深入了解JVM虚拟机,需要一定的汇编基础,且汇编作为底层语言,在思想上可以带来一定的启发、以及对汇编语言一直的向往,所以学习汇编语言。

笔记

第一章

1.1

机器语言就是机器能直接执行的指令集

机器语言是0,1存在难维护、难发现错误的问题,引出汇编语言

1.2

汇编指令是机器指令的另一种表达形式(与机器指令一一对应)

1.3

汇编语言有三种命令:

汇编指令:机器码的助记符,有对应的机器码。伪指令:没有机器码、由编译器识别并执行。计算机不执行其他符号:如+、-、*、/,由编译器识别,没有机器码

1.4

要灵活的利用汇编语言编程,要了解CPU和内存的交互

1.5

指令和数据是应用层的概念,在内存和磁盘上无法区分,都是二进制信息

1.6

一个存储单元一般为1B=8bit

1.7

存储器作为数据存放的中间媒介

还需要知道对哪个芯片做什么操作

总线分为三种:1.地址总线、2.数据总线、3.控制总线

通过地址总线告诉内存我要的是哪个地址,通过控制总线告诉内存我要干什么,通过数据总线传输数据

通过地址总线告诉内存,我要找哪个存储单元。然后告诉存储单元通过数据总线把数据读或者写

1.8

可寻址存储单元数=2^地址总线数

1.9

数据总线的跟数决定了一次能向内存写入的数据位数

1.10

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hizY5S7M-1595670283577)(https://upload-images.jianshu.io/upload_images/11270231-b94f4cbba7f9a5ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

(1) 13 。 8KB=81024B,寻址能力为8KB表示能找到81024个存储单元(一个存储单元为1B)所以为2^13为13

(2)1024个,0-1023

(3)10248,1024

(4)102410241024,10241024,1024

(5)64,1,16,4

(6)1,1,2,2,4

(7)512,256

(8)二进制数

1.11

内存地址空间,指CPU可以寻址的空间。10跟地址总线,为1024个存储单元,构成了CPU的寻址空间

1.12

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-73Teoz3m-1595670283577)(https://upload-images.jianshu.io/upload_images/11270231-f7186a97f5d27b2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

1.13

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5zN13k1-1595670283578)(https://upload-images.jianshu.io/upload_images/11270231-7c97030c7d77e62b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

1.14

存储器分为RAM和ROM,RAM可读可写,ROM只读一般为BIOS

1.15

CPU看待各个物理器件为逻辑存储器,各个逻辑存储器总的内存单元为CPU的内存地址空间

第二章

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZgNJCJN-1595670283579)(https://upload-images.jianshu.io/upload_images/11270231-b8a9d9a86102f485.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

2.1 通用寄存器

AX、BX、CX、DX。16位,因为8086上一代为8位,为了兼容每个寄存器分为两个单独的8位寄存器

AX=AL+AH、BX=BL+BH、CX=CL+CH、DX=DL+DH

2.2 字在存储器中的存储

字=2字节=16bit,是出于兼容性考虑而衍生的

16进制是H,2进制是B

2.3 几条汇编指令

寄存器存储数据由低到高存储呢,高位溢出。

以AL为寄存器时,认为AH和AL是两个完全不同的寄存器,毫无关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQGWQ07R-1595670283580)(https://upload-images.jianshu.io/upload_images/11270231-dc4471ccaf5c86fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTa12dEY-1595670283580)(https://upload-images.jianshu.io/upload_images/11270231-10c596c55f6018b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

(1.1)F4A3H

(1.2)31A3H

(1.3)3123H

(1.4)6246H

(1.5)826CH

(1.6)6246H

(1.7)826CH

(1.8)04D8H

(1.9)0482H

(1.10)6C82H

(1.11)D882H

(1.12)D888H

(1.13)D810H

(1.14)6246H

(2)MOV AL 2

ADD AL AL

ADD AL AL

ADD AL AL

2.4 物理地址

2.5 16位结构的CPU

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AniaJD8T-1595670283581)(https://upload-images.jianshu.io/upload_images/11270231-06f4c1448bf5c9b5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

2.6 寻址方式

8086的地址总线由20位,而8086是16位结构,所以需要一种地址合成方法。

所以物理地址=段地址*16+偏移地址

2.7本质含义

*16表示左移4位,即16位变成了地址总线的20位

2.8 段的概念

起始地址一定是16的倍数(起始地址需要最低位为0为以后转变为段地址作准备)偏移量为16位即2^16=64KB,所以两个地址段的距离最大位64KB

对8086来说21F60H数据存储在2000:1F60单元中(以段地址+偏移表示)

(1)00010H-1000FH

(2)1001H、2000H

2.9 段寄存器

CS代码段寄存器,IP指令指针寄存器

执行的指令地址为CS*16+IP即CS:IP

有四个段寄存器,CS、DS、SS、ES

2.10 CS和IP

CPU

执行过程

从CS:IP中读取指令到指令缓冲器

2.IP寄存器内容增加指令长度,指向下一个地址

3.执行指令,跳转到1

2.11 修改CS和IP的指令

jmp 2AE3:3

jmp ax 表示把AX的值赋给IP

2.12 代码段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbgdeXuw-1595670283584)(https://upload-images.jianshu.io/upload_images/11270231-190e62e30a9c629a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

代码段是一段连续的内存地址,用来存放代码的地址成为代码段,16的倍数开头,长度小于2^16 (64KB)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AebUQtMz-1595670283585)(https://upload-images.jianshu.io/upload_images/11270231-3c8c134e1f3c304a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z9OcENwO-1595670283585)(https://upload-images.jianshu.io/upload_images/11270231-3fd7623d647f0492.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

4次

mov将指令读入指令缓冲器后,sub将指令读入指令缓冲器后,jum将指令读入指令缓冲器后,执行jum之后

0000H

实验

-u 查看内存汇编指令

-a 修改内存中汇编指令

-d 查看内存二进制

-e 编辑内存二进制,空格继续编辑下一个内存单元

-t 运行指令

-r 查看内存内用

(-r 寄存器编号)修改寄存器内容

第三章

3.1 内存中字的存储

N地址字单元:从地址N开始的存放字的存储单元,高位(逻辑内存地址大的位)存储高位,低位存储低位。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hbmm6Lo-1595670283586)(https://upload-images.jianshu.io/upload_images/11270231-b8b77582d7c8fcf9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrOx1RjB-1595670283587)(https://upload-images.jianshu.io/upload_images/11270231-85301f9e1fe9f049.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

(1)20

(2)4E20

(3)12

(4)0012

(5)124E

3.2 DS和【address】

DS寄存器,存放要访问数据的段地址

mov 支持

将内容写入寄存器将一个寄存器的内容写入另一个寄存器(段地址寄存器不能用汇编指令直接写入内容,只能从另一个寄存器写入)将内存内容写入寄存器 (mov ax […],…为内存地址偏移量,段地址取自DS寄存器)

mov bx, 1000

mov ds, bx

mov [0], al

3.3 字的传送

mov 内存和寄存器时,只要指定寄存器为16位的(ax是16位的,al是8位的)就可以从内存中取一个字在内存和寄存器之间传递(因为数据总线是16位的)

ax:1000

ds:1000

ax:1123

bx:6622

cx:2211

bx:8833

cx:8833

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLBvyaWA-1595670283588)(https://upload-images.jianshu.io/upload_images/11270231-6034fb135a472056.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

ax:1000

ds:1000

ax:2C34

[0]:34 [1]2C

bx:2C34

bx:1B12

[2]: 12 [3]:1B

3.4 mov、add、sub

段寄存器、寄存器、内存可以互相写入数据,数值可以直接写入寄存器,不能直接写入段寄存器、和内存

mov、add、sub都遵循以上规则

3.5 数据段

与代码段类似,起始地址是16的整数倍,长度小于64KB的内存段。叫法为起始地址为xxx,长度为yyy的数据段。

访问时以ds为存放起始地址访问。

mov ax,1234

mov ds,ax

mov ax,0

add ax,[0]

add ax,[2]

add ax,[4]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tyk68dQ9-1595670283591)(https://upload-images.jianshu.io/upload_images/11270231-390eb5e3f92af652.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

AX=2662

BX=E626

AX=E626

AX=2662

BX=D6E6

AX=1D48

AX=2C14

AX=0000

AL=00E6

BX=0000

BL=0026

AL=000C

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wztcM9tB-1595670283592)(https://upload-images.jianshu.io/upload_images/11270231-a21577d4b4fbb6e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

1 & 2.

mov ax,6622 CS:IP 2000:0003 AX:6622

jmp 0ff0:0100 CS:IP 2000:0008 CS:IP 000F:0100

mov ax,2000 CS:IP 1000:0003 AX:2000

mov ds,ax CS:IP 1000:0005 DS:2000

mov ax,[0008] CS:IP 1000:0008 AX:C389

mov ax,[0002] CS:IP 1000:000B AX:EA66

3.

没有区别,取决于是CS:IP中取的还是,DS中取的

3.6 栈

对于栈研究的角度,仅限于后进先出

3.7 CPU提供的栈机制

8086CPU对于栈的操作都是以字为单位的

push ax表示将ax中的数据送入栈中,pop ax表示将栈顶的元素取出来放入ax中

入栈时,先入高8位,后入低8位(高地址放高8位,低地址放低8位)

SS:SP 指向CPU的栈顶元素

push 执行过程:

先移动SS:SP,再放入元素,SP=SP-2,从高地址向低地址增长

SS:SP 是空栈,所以栈顶指针指向栈空间+1位1000:(000F+1)0010

pop执行过程:

与push一致都是先移动指针,再取元素,取出元素后原来的值不变

3.8 栈顶越界问题

CPU本身不保证越界检测

3.9 push、pop指令

支持,寄存器,段寄存器,内存

mov ax,1000

mov ss,ax

mov sp,0010

push ax

push bx

push ds

mov ax,1000

mov ss,ax

mov sp,0010

mov ax,001A

mov bx,001B

push ax

push bx

mov ax, 0 sub ax,ax(mov 三个字节码,sub两个字节码)

mov bx,0 sub ax,ax

pop bx

pop ax

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0SU8JcoO-1595670283595)(https://upload-images.jianshu.io/upload_images/11270231-d8c3b00a0dd934bf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

mov ax,1000

mov ss,ax

mov sp,0010

mov ax,001A

mov bx,001B

push ax

push bx

pop ax

pop bx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06peZjWl-1595670283596)(https://upload-images.jianshu.io/upload_images/11270231-5ce524030859ddb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

mov ax, 1000

mov ss,ax

mov sp, 0002

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjwg0icM-1595670283597)(https://upload-images.jianshu.io/upload_images/11270231-0abd79a9ef4084cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.10 栈段

栈段与代码段、数据段一样均为16的整数倍开头,最大长度为64Kb的逻辑连续内存段,是一个逻辑概念CPU不识别

不存在溢出问题,此时正好为SS:0000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWAok6KB-1595670283599)(https://upload-images.jianshu.io/upload_images/11270231-c3f03f75c5868a48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

64KB,栈地址为SS:SP,SS固定SP为16位,变化范围为0-(2^16-1)为64KB

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xfS18h9b-1595670283599)(https://upload-images.jianshu.io/upload_images/11270231-438881ff80680c2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZtdrMHF-1595670283600)(https://upload-images.jianshu.io/upload_images/11270231-de4ac2516883a9b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWzD909k-1595670283601)(https://upload-images.jianshu.io/upload_images/11270231-cfbc264831317f8c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

mov ax,2000

mov ss,ax

mov sp,0010

mov ax,1000

mov ss,ax

mov sp,0000

实验

执行修改SS后,debug的会紧接着执行下一调指令,中间不会中断

第四章 第一个程序

4.1 一个源程序从写出来到执行的过程

编写源程序对源程序进行编译链接执行

4.2 源程序

分为指令、伪指令、标号

伪指令

assume cs:xxx 将CS段寄存器指向xxx代码段

xxx segment 代码段xxx开始

xxx ends 代码段xxx结束

end 程序结束

以上伪指令都由编译器执行

指令

程序返回

mov ax, 4c00H

int 21H

4.3 -4.8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdzrP884-1595670283602)(https://upload-images.jianshu.io/upload_images/11270231-3883977e9f2750bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

第五章 [BX]和loop

【bx】表示偏移量在bx中

(al)表示al的内容。()表达式中不能有:

5.1 [BX]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sopCXt72-1595670283602)(https://upload-images.jianshu.io/upload_images/11270231-97ff7fe2767258a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

BE

00

BE

00

BE

BE

5.2 Loop指令

s:

loop

用cx寄存器控制执行次数

5.3 debug中使用loop

g 内存地址偏移量,直接改变IP为指定地址,之前完前面的所有命令

汇编语言中数据不能以字母开头

p 可以跳过当前循环

5.4 debug和masm对于汇编的处理不同

masm中mov ax,[0]必须显示的指定段寄存器应为mov ax, ds:[0]

5.5 loop和[bx]的联合使用

mov ax,ds:[bx] 偏移量只能存储在bx中

5.7

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。