王爽汇编笔记1点点

本文详细记录了8086汇编语言的学习笔记,包括基础知识、寄存器、内存访问、第一个程序等内容。讲解了CPU如何通过总线与存储器交互,以及寄存器的使用,如通用寄存器、段寄存器和标志寄存器。还介绍了内存地址的合成方法、数据处理、转移指令和中断处理等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文写了自己在学习时的一些个人笔记,不会啥都记不建议看

一.基础知识

1.汇编
在这里插入图片描述操作:寄存器BX的内容送到AX里面
·汇编语言的组成
(1)汇编指令,核心
(2)伪指令,无对应机器码,由编译器执行机器不执行
(3)其他符号,由编译器识别机器不执行
2.存储
·磁盘上数据或程序被读入存储器即内存中,被CPU使用
·二进制信息可被分为指令和信息
eg
在这里插入图片描述
·存储器被划为若干存储单元,具连续性,一个存储单元是一个Byte即8个二进制位。eg.一个存储器有128个Byte
·存储器分为随机存储器和只读存储器
3.CPU对存储器读写
·CPU对内存读写,需要有:地址信息,控制信息,数据信息。CPU通过总线实现将以上3信息与存储器芯片联系
总线分为地址总线,控制总线和数据总线
·总线
地址总线 一个CPU有N根地址线,则可以说它总线宽度为N,可以寻找2^n个内存单元
数据总线 8088CPU总线宽度为8,8086CPU总线宽度为16,区别在于CPU和外界数据传送速度,8088一次只能传送1字节,而16位可传2字节.若传二字节即16位数据,8088要传2次
控制总线 控制总线宽度决定CPU对外部器件读写能力,命令是由几条控制线综合发出的
·内存存储空间受CPU寻址能力限制

二.寄存器

寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变寄存器内容实现对CPU的控制
1.通用寄存器用来存放一般性数据 eg mov ax,1000H
·AX可分为AH 和AL高低位两个8位寄存器
2.汇编指令操作对象应该同位
3.关于8086CPU
·16位结构,一次性能处理,传输,暂存信息最大长度是16位的
·给出物理地址的方法:段地址*16+偏移地址。
以两个16位地址合成一个20位物理地址
在地址加法器中运行
CPU可以通过不同的段地址和偏移地址访问同一个物理地址
4.关于段
段的划分源自CPU,内存不划分段
5.段寄存器
段寄存器提供CPU要访问内存用的段地址 有CS SS DS ES
·CS 代码段寄存器 Code Segment
IP 指令指针寄存器,存放的偏移地址
CPU将CS:IP指向的内容当作指令执行(区分指令与数据
8086cpu工作可描述为
在这里插入图片描述
修改CS IP指令用jmp指令,不能用mov
jmp 新CS:新IP
若只想修改IP 用jmp 寄存器
jmp ax = jmp ip,ax
4.debug 使用

r查看改变寄存器内容
d查看内存内容
e改写内存内容
u看汇编指令
t执行1步指令
a写汇编指令

三.寄存器(内存访问)

1.DS data string
存放访问数据的段地址
·可用mov指令将内存单元内容送入寄存器中
·[…]表示一个内存单元,其中的内容代表偏移地址,此时内存单元段地址为ds中的数据
·8086CPU不支持将数据直接送入段寄存器
2.栈
入栈和出栈:先进后出和后进先出LIFO
·CPU命令 push和pop(pop ax 表示从栈顶取出数据送入ax
·SS SP SS存放段地址,SP存偏移地址
·push的执行在这里插入图片描述pop的执行
在这里插入图片描述

·栈顶超界问题
在这里插入图片描述
在这里插入图片描述

四.第一个程序

编译过程
在这里插入图片描述
操作系统外壳
在这里插入图片描述
edit masm link debug操作略

第五章 [BX]和 loop 指令

一. [bx]和内存单元的描述
[bx]:偏移地址在bx里面,段地址默认在ds里面,表示一个内存单元
二.loop
1.两步操作①(cx)=(cx)-1;
②判断cx中的值,不为0则转至标识的地址处执行,如果cx为0则退出循环。
2. mov cx,n
s:expression
loop s
3.g IP1 将debug 从当前的CS:IP指向的指令执行,一直执行到(IP)=IP1为止
p直接一次执行完
3. 对于mov ax,[idata],debug 将其解释为mov ax,ds:[idata],而masm 将其解释为mov ax,idata
4. 改变[idata]的段地址用段前缀在这里插入代码片
三.描述符号()
四.idata表示常量

第六章 包含多个段的程序

一.在代码段中使用数据
1.assume cs:code
code segment
dw(b) …

code ends
end
2.dw define word
db define byte
二.在代码段使用栈

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

一.and or
and 按位进行与运算
or 按位进行或运算
二.ASCII
在这里插入图片描述三.以字符形式给出的数据
在这里插入图片描述
四.大小写转化问题

在这里插入图片描述
所以用and指令即可
and al,11011111B
五.[bx+idata]
段地址ds,偏移地址(bx)+idata
mov ax,[bx+idata] 数字化描述(ax) = ((ds)*16+(bx)+idata)
六.用[bx+idata]的方式数组处理
在这里插入图片描述
七.[bx+si\di] [bx+si\di+idata]
[bx+si\di+idata]还可表示为idata[bx][si\di]
八.多做实验总结

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

reg sreg
一.bx,si,di,bp
8086CPU中只有这四个寄存器可以在[…]进行内存单元的寻址,他们要么单独出现,要么只能以 bx和si,bx和di,bp和di,bp和si四种组合出现,而且[bp]对应的段地址默认在ss里
二.机器指令处理的数据在三个地方:cpu内部,内存,端口
三.寻址方式
在这里插入图片描述

四.指令要处理的数据有多长
用寄存器指明或用X(word\byte) ptr指明
eg.1.mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2
其他:push指令默认字操作
五.寻址方式综合运用
mov ax, seg
mov ds, ax
mov bx, 60h ;确定记录地址,ds:bx

mov word ptr [bx+0ch], 38 ;排名字段改为38 [bx].0ch
add word ptr [bx+0eh], 70 ;收入字段增加70 [bx].0eh
mov si, 0 ;用si来定位产品字符串中的字符
mov byte ptr [bx+10h+si], ‘V’ ;[bx].10h[si]
inc si
mov byte ptr [bx+10h+si], ‘A’
inc si
mov byte ptr [bx+10h+si], ‘X’
六.指令
1.div
在这里插入图片描述
2.dd伪指令dd double word
3.dup 用来进行数据重复
db 3 dup (…)

第九章 转移指令的原理

一.操作符
1.offset 取得标号偏移地址
mov ax,offset start 相当于 mov ax,0(start是代码端第一条指令)
2.jmp 可以只修改IP,也可以同时修改CS和IP
·根据位移进行转移的jmp指令
·jmp short 标号
转到标号处执行指令
段内短转移 -128~127
指令结束后CS:IP指向标号
根据机器码后的数字作为偏移位移
·jmp 16位 reg 功能:(IP)= (16位reg)
转移地址在内存中的jmp指令:1.jmp word ptr 内存地址单元(段内转移)
2.jmp dword ptr 内存单元地址(段间转移) 内存地址单元存两字
(cs)=(内存单元地址+2) (IP)=(内存单元地址)
3.jcxz指令 短转移
jcxz 标号 if(cx)==0)jmp short 标号
4.loop 短转移
操作(1)(cx)=(cx)-1;(2)如果(cx)≠0,(IP)=(IP)+8位位移

第十章 CALL 和RET 指令

1.ret 和retf
·ret(f)使用栈中数据,修改IP(和CS)内容,实现近(远)转移
2.call 操作:将IP或IP和CS压入栈中再转移
依据位移进行转移 call 标号 16位位移要求
·转移目的地地址在指令中的call指令 call far ptr 标号 实现段间转移,改变CS IP 至标号所在
·call 16位·reg
push IP
jmp 16位reg
·转移地址在内存单元
call (d)word ptr 内存单元地址
3.mul
在这里插入图片描述4.寄存器冲突问题:子程序使用的寄存器,很可能在主程序中也要使用
解决方案:寄存器里的内容保存再恢复,用栈

标志寄存器

1.flag
在这里插入图片描述
zf 记录指令结束后结果是否为0,为0zf不为0,不为0zf为
pf 奇偶标志位,1的个数为偶数pf=1,为奇数pf=0
sf 记录相关指令是否为负 为负sf=1,非负sf=0
cf 记录借(进)位值 无符号数
of
溢出
of 记录有符号运算的结果是否发生溢出,若有溢出,of=1,若没有溢出,of=0
2.abc 带进位加法指令
·格式:abc 操作对象1,操作对象2
·功能:操作对象1=操作对象1+操作对象2+(CF)
3.sbb
在这里插入图片描述
4.cmp指令
比较减法指令,不保存结果,仅对标志寄存器产生影响
5.检测比较结果的条件转移指令
在这里插入图片描述6.pushf和popf
将标志寄存器压栈
从栈中弹出数据送标志寄存器中
7.
在这里插入图片描述

第十二章 内终端

贴3张一个的大佬的图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述处理中断程序和iret指令
中断向量表

第十三章 int 指令

相当于引发n号中断过程
在这里插入图片描述
二.bios
在这里插入图片描述安装过程

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值