汇编语言
盼盼编程
这个作者很懒,什么都没留下…
展开
-
汇编语言--sbb指令
sbb是带借位减法指令,它利用了CF位上记录的借位值。 指令格式:sbb 操作对象1, 操作对象2 功能:操作对象1 = 操作对象1 - 操作对象2 - CF原创 2020-09-13 16:56:04 · 22120 阅读 · 5 评论 -
汇编语言--iret指令
CPU随时都可能执行中断处理程序,中断处理程序必须一直存储在内存某段空间之中而中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中。中断处理程序的常规编写步骤:保存用到的寄存器; 处理中断; 恢复用到的寄存器; 用iret指令返回。iret 指令描述为:pop IP pop CS popfiret指令执行后,CPU回到执行中断处理程序前的执行点继续执行程序...原创 2020-09-13 16:54:16 · 20964 阅读 · 9 评论 -
汇编语言--单步中断
CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断的中断类型码为1Debug是如何利用CPU所提供的单步中断的功能进行调试?如使用t命令查看寄存器状态Debug提供了单步中断的中断处理程序,功能为显示所有寄存器中的内容后等待输入命令在使用t命令执行指令时,Debug将TF设置为1,在CPU执行完这条指令后就引发单步中断,执行单步中断的中断处理程序,所有寄存器中的内容被显示在屏幕上,并且等待输入命令。在进入中断处理程序之前,设置TF...原创 2020-10-08 12:11:06 · 13114 阅读 · 4 评论 -
汇编语言--int指令
int指令的格式为:int n ,n为中断类型码,它的功能是引发中断过程。 CPU执行int n指令,相当于引发一个n号中断的中断过程 在程序中使用int指令调用任何一个中断的中断处理程序(中断例程) 编写供应用程序调用的中断例程...原创 2020-09-13 16:51:16 · 18561 阅读 · 3 评论 -
汇编语言--BIOS和DOS中断例程
BIOS和DOS提供的中断例程是如何安装到内存中的呢?1、开机后,CPU一加电,初始化(CS)= 0FFFFH,(IP)= 0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条转跳指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。2、初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。注意,对于BIOS所提供的中断例程,只需将入口地址登记在中断向量表中即可,因为它们是固化到ROM中的程序,一直在内存中存在。...原创 2020-09-13 16:50:25 · 14030 阅读 · 4 评论 -
汇编语言--CMOS RAM芯片
PC机中,有一个CMOSRAM芯片,一般简称为CMOS。此芯片的特征如下1、包含一个实时钟和一个有128个存储单元的RAM存储器2、该芯片靠电池供电。关机后内部的实时钟正常工作,RAM中的信息不丢失3、128个字节的RAM中,内部实时钟占用0~0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。BIOS也提供了相关的程序,使我们可以在开机的时候配置CMOSRAM中的系统信息。该芯片内部有两个端口,端口地址为70h和71h。CPU通过这两个端口...原创 2020-09-13 16:49:06 · 13922 阅读 · 3 评论 -
汇编语言--shl和shr指令
shl和shr是逻辑移位指令 shl是逻辑左移指令,它的功能为: 将一个寄存器或内存单元中的数据向左移位; 将最后移出的一位写入CF中; 最低位用0补充。 shr是逻辑右移指令...原创 2020-09-13 16:48:11 · 23659 阅读 · 3 评论 -
汇编语言--不可屏蔽中断
不可屏蔽中断是CPU必须响应的外中断。当CPU检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。对于8086CPU,不可屏蔽中断的中断类型码固定为2,所以中断过程中,不需要取中断类型码。则不可屏蔽中断的中断过程为:①标志寄存器入栈,IF=0,TF=0;②CS、IP入栈;③(IP)=(8),(CS)=(0AH)。几乎所有由外设引发的外中断,都是可屏蔽中断。当外设有需要处理的事件(比如说键盘输入)发生时,相关芯片向CPU发出可屏蔽中断信息。不可屏蔽中断是在系...原创 2020-09-13 16:45:23 · 15667 阅读 · 4 评论 -
汇编语言--可屏蔽中断
可屏蔽中断是CPU可以不响应的外中断。CPU是否响应可屏蔽中断,要看标志寄存器的IF位的设置。当CPU检测到可屏蔽中断信息时,如果IF=1,则CPU在执行完当前指令后响应中断,引发中断过程;如果IF=0,则不响应可屏蔽中断。可屏蔽中断信息来自于CPU外部,中断类型码是通过数据总线送入CPU的;而内中断的中断类型码是在CPU内部产生的。中断过程中将IF置0的原因就是,在进入中断处理程序后,禁止其他的可屏蔽中断。如果在中断处理程序中需要处理可屏蔽中断,可以用指令将IF置1。8086...原创 2020-09-13 16:44:31 · 15771 阅读 · 4 评论 -
汇编语言--串处理指令
串处理指令 对内存中的批量数据进行处理,movsb、movsw、cmps、scas、lods、stos等。若要使用这些指令方便地进行批量数据的处理,则需要和rep、repe、repne 等前缀指令配合使用原创 2020-09-12 23:25:17 · 13148 阅读 · 4 评论 -
汇编语言--常见转移指令
转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。转移指令分为以下几类。(1)无条件转移指令,比如,jmp;(2)条件转移指令,比如,jcxz、je、jb、ja、jnb、jna等;(3)循环指令,比如,loop;(4)过程,比如,call、ret、retf;(5)中断,比如,int、iret...原创 2020-09-12 23:24:38 · 14250 阅读 · 4 评论 -
汇编语言--逻辑指令
8086CPU逻辑指令and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等都是逻辑指令。除了not指外,它们的执行结果都影响标志寄存器的相关标志位。原创 2020-09-12 23:23:46 · 13673 阅读 · 3 评论 -
汇编语言--算术运算指令
算术运算指令add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等都是算术运算指令,这些指令实现存器和内存中的数据的算数运算。它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位...原创 2020-09-12 23:23:10 · 13620 阅读 · 5 评论 -
汇编语言--数据传送指令
8086CPU的数据传送指令 mov、push、pop、pushf、popf、xchg 等都是数据传送指令,这些指令实现寄存器和内存、寄器和寄存器之间的单个数据传送原创 2020-09-12 23:22:28 · 13808 阅读 · 4 评论 -
汇编语言--端口
在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片。 各种接口卡(比如,网卡、显卡)上的接口芯片,它们控制接口卡进行工作; 主板上的接口芯片,CPU通过它们对部分外设进行访问; 其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。在这些芯片中,都有一组可以由CPU读写的寄存器。这些寄存器,它们在物理上可能处于不同的芯片中,但是它们在以下两点上相同。 都和CPU的总线相连,...原创 2020-09-11 23:50:30 · 13066 阅读 · 2 评论 -
汇编语言--单步中断
CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断的中断类型码为1Debug是如何利用CPU所提供的单步中断的功能进行调试?如使用t命令查看寄存器状态Debug提供了单步中断的中断处理程序,功能为显示所有寄存器中的内容后等待输入命令在使用t命令执行指令时,Debug将TF设置为1,在CPU执行完这条指令后就引发单步中断,执行单步中断的中断处理程序,所有寄存器中的内容被显示在屏幕上,并且等待输入命令。在进入中断处理程序之前,设置TF...原创 2020-09-11 23:48:39 · 13488 阅读 · 4 评论 -
汇编语言--内中断
任何一个通用的CPU,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,我们可以称其为:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。中断信息可以来自CPU的内部和外部(内中断,外中断)内中断:当CPU的内部有需要处理的事情发生的时候,将产生中断信息,引发中断过程。这种中断信息来自CPU的内部8086CPU的内中断(下面四种情况...原创 2020-09-11 23:47:47 · 14483 阅读 · 5 评论 -
汇编语言--cmp指令
cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。cmp指令格式:cmp 操作对象1,操作对象2例如:指令cmp ax, ax,做(ax)-(ax)的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位。指令执行后:zf=1,pf=1,sf=0,cf=0,of=0。CPU在执行cmp指令的时候,也包含两种含义:进行无符号数运算和进行有符号数运算。...原创 2020-09-11 23:45:48 · 29043 阅读 · 4 评论 -
汇编语言--adc指令
adc是带进位加法指令,它利用了CF位上记录的进位值。 指令格式:adc 操作对象1, 操作对象2 功能:操作对象1 = 操作对象1 + 操作对象2 + CF原创 2020-09-11 23:44:28 · 25016 阅读 · 7 评论 -
汇编语言--标志寄存器
标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3种作用。 用来存储相关指令的某些执行结果; 用来为CPU执行相关指令提供行为依据; 用来控制CPU的相关工作方式。 这种特殊的寄存器在8086CPU中,被称为标志寄存器(flag)。 8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW-Program Status Word)...原创 2020-09-11 23:42:17 · 13046 阅读 · 4 评论 -
汇编语言--call 指令
call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作: 将当前的 IP 或 CS和IP 压入栈中; 转移(jmp)。 call指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同。 call 标号(近转移) CPU执行此种格式的call指令时,相当于进行 push IP jmp near ptr 标号 call far ptr 标号(段间转移)...原创 2020-09-11 23:40:34 · 21611 阅读 · 4 评论 -
汇编语言--loop指令
loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。 对IP的修改范围都为-128~127。 指令格式:loop 标号 ((cx) = (cx) - 1,如果(cx) ≠ 0,转移到标号处执行)。 (cx) = (cx) - 1;如果 (cx) != 0,(IP) = (IP) + 8位位移。 8位位移 = 标号处的地址 - loop指令后的第一个字节的地址; 8位位移的范围为-128~127...原创 2020-09-11 23:38:44 · 20604 阅读 · 4 评论 -
汇编语言--jcxz指令
jcxz指令 jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移, 在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。 指令格式:jcxz 标号(如果(cx)=0,则转移到标号处执行。) 当(cx) = 0时,(IP) = (IP) + 8位位移 8位位移 = “标号”处的地址 - jcxz指令后的第一个字节的地址; 8位位移的范围为-128~127,用补码表示; 8位...原创 2020-09-11 23:37:34 · 15977 阅读 · 4 评论 -
汇编语言--转移指令的原理
可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。8086CPU的转移行为有以下几类。 只修改IP时,称为段内转移,比如:jmp ax。 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。 短转移IP的修改范围为-128 ~ 127。 近转移IP的修改范围为-32768 ~ 32767...原创 2020-09-11 23:35:36 · 12895 阅读 · 4 评论 -
汇编语言--jmp指令
jmp为无条件转移,转到标号处执行指令可以只修改IP,也可以同时修改CS和IP; jmp指令要给出两种信息: 转移的目的地址 转移的距离(段间转移、段内短转移,段内近转移) jmp short 标号 jmp near ptr 标号 jcxz 标号 loop 标号 等几种汇编指令,它们对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移距离。...原创 2020-09-08 22:01:04 · 17916 阅读 · 4 评论 -
汇编语言--转移指令
8086CPU的转移行为有以下几类。 只修改IP时,称为段内转移,比如:jmp ax。 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。 短转移IP的修改范围为-128 ~ 127。 近转移IP的修改范围为-32768 ~ 32767。8086CPU的转移指令分为以下几类。 无条件转移指令(如:jmp) 条件转移指令 ...原创 2020-09-08 22:00:07 · 13077 阅读 · 4 评论 -
汇编语言--mul 指令
mul是乘法指令,使用 mul 做乘法的时候:相乘的两个数:要么都是8位,要么都是16位。 8 位: AL中和 8位寄存器或内存字节单元中; 16 位: AX中和 16 位寄存器或内存字单元中。 结果 8位:AX中; 16位:DX(高位)和 AX(低位)中。 格式:mul 寄存器 或 mul 内存单元参考资料:<<汇编语言>> 王爽...原创 2020-09-08 21:58:43 · 41109 阅读 · 4 评论 -
汇编语言--div指令
div是除法指令 除数:有8位和16位两种,在一个寄存器或内存单元中。 被除数:默认放在AX或DX和AX中, 如果除数为8位,被除数则为16位,默认在AX中存放; 如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。 结果: 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数; 如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数...原创 2020-09-08 21:57:35 · 17227 阅读 · 4 评论 -
汇编语言--SS 和 SP
在基于8086CPU编程的时候,可以将一段内存当作栈来使用。 栈段寄存器SS,存放段地址,SP寄存器存放偏移地址,任意时刻,SS:SP指向栈顶元素 8086CPU中,入栈时,栈顶从高地址向低地址方向增长。 push ax表示将寄存器ax中的数据送入栈中,由两步完成。 1、SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶; 2、将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶参考...原创 2020-09-08 21:55:32 · 23891 阅读 · 4 评论 -
汇编语言--CS和IP
CS为代码段寄存器,IP为指令指针寄存器, CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址, CPU将CS:IP指向的内容当作指令执行。(即PC)原创 2020-09-08 21:54:01 · 16084 阅读 · 4 评论 -
汇编语言--段寄存器
我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元,可以用分段的方式来管理内存。 用一个段存放数据,将它定义为“数据段”; 用一个段存放代码,将它定义为“代码段”; 用一个段当作栈,将它定义为“栈段”。 段寄存器:8086CPU有4个段寄存器:CS、DS、SS、ES,提供内存单元的段地址...原创 2020-09-08 21:53:12 · 13750 阅读 · 4 评论 -
汇编语言--8086CPU
8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力。 8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。 从8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB。 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。...原创 2020-09-08 21:52:13 · 13202 阅读 · 4 评论 -
汇编语言--通用寄存器
通用寄存器:通常用来存放一般性的数据,有AX、BX、CX、DX,它们可分为两个可独立使用的8位寄存器,16位 8高位 8低位 AX AH AL BX BH BL CX CH CL DX DH DL 在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的一个8位寄存器所能存储的数据范围是0 ~ 28-1。...原创 2020-09-08 21:51:17 · 13490 阅读 · 3 评论 -
汇编语言--寄存器
CPU由运算器、控制器、寄存器等器件构成,这些器件靠片内总线相连。 运算器进行信息处理;控制器控制各种器件进行工作;寄存器进行信息存储; 8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW都是16位 16位结构CPU: 1.运算器一次最多可以处理16位的数据; 2.寄存器的最大宽度为16位; 3.寄存器和运算器之间的通路为16位。 8086CPU...原创 2020-09-08 21:50:27 · 13103 阅读 · 4 评论 -
汇编语言--CPU对外设的控制
CPU对外设都不能直接控制,如显示器、音箱、打印机等。 直接控制这些设备进行工作的是插在扩展插槽上的接口卡。 扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连。CPU可以直接控制这些接口卡,从而实现CPU对外设的间接控制。参考资料:<<汇编语言>> 王爽...原创 2020-09-07 23:04:07 · 13675 阅读 · 4 评论 -
汇编语言--CPU对存储器的读写
1、 CPU通过地址线将地址信息x发出。 2、 CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。 3、 存储器将x号单元中的数据通过数据线送入CPU。写操作与读操作的步骤相似。参考资料:<<汇编语言>> 王爽...原创 2020-09-07 23:02:57 · 13963 阅读 · 4 评论 -
汇编语言--总线
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。 片内总线(芯片内部总线) 系统总线(计算机各部件之间的信息传输线) 地址总线:CPU通过地址总线来指定存储单元 数据总线:CPU与内存或其他器件之间的数据传送是通过数据总线来进行的 控制总线:CPU对外部器件的控制是通过控制总线来进行的...原创 2020-09-07 23:01:04 · 13231 阅读 · 4 评论 -
汇编语言--存储器
随机存储器(RAM)在程序的执行过程中可读可写,必须带电存储,与CPU直接交换数据的内部存储器。它可以随时读写,而且速度很快 只读存储器(ROM)在程序的执行过程中只读,关机数据不丢失,完成对系统的加电自bai检、系统中各功能模块的初始化、系统的基本输入/输出的驱动程序及引导操作系统...原创 2020-09-07 22:58:41 · 13539 阅读 · 3 评论 -
汇编语言--指令
机器指令:CPU能直接识别并执行的二进制编码 汇编指令:汇编指令是机器指令的助记符,同机器指令一一对应。 指令:指令通常由操作码和地址码(操作数)两部分组成 指令集:每种CPU都有自己的汇编指令集参考资料:<<汇编语言>> 王爽...原创 2020-09-07 22:55:38 · 13428 阅读 · 4 评论 -
汇编push和pop指令
push和pop是用来操作栈的2个指令。 push寄存器:将一个寄存器中的数据入栈 pop寄存器:出栈用一个寄存器接收数据 下面用一段汇编代码学习一下栈的操作,用masm编辑的(环境用的<<汇编语言>> 王爽的那套环境)。assume cs:codesg ...原创 2019-06-01 10:16:01 · 88907 阅读 · 8 评论