
汇编
Chen_Hulk
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
汇编(一) 基础知识
1.1 机器语言每一种微处理器,由于硬件和内部结构的不同,需要不同的电平脉冲来进行工作。所以每一种微处理器都有自己的机器指令集,即机器语言。机器语言晦涩难懂,于是产生汇编语言。程序员用汇编语言写程序,转化为机器语言后给计算机执行。编译器将汇编语言转化为机器语言。1.2 存储单元微机存储器的容量最小单位为 字节 ,一个存储单元可以存放一个Byte.1.3 总线CPU...原创 2019-07-08 19:48:06 · 145 阅读 · 0 评论 -
汇编 (十一) int指令
1.1 int指令由int 指令引发的中断是一种重要的内中断。格式: int n //相当于引发一个n号中断的过程,最终功能和call指令相似,都是调用一段程序。取中断类型码n 标志寄存器入栈,并IF=0,TF=0 //TF=0使得避免中断程序执行过程中引发单步中断 CS,IP寄存器入栈 IP=(n*4) , CS=(n*4 + 2)...原创 2019-07-30 21:40:00 · 665 阅读 · 0 评论 -
汇编 (八) CALL 和 RET 指令
call 和 ret 都是转移指令,都修改IP,或同时修改 CS和IP.1.1 ret 和 retfret 指令用栈中的数据,修改IP的内容,从而实现近转移。CPU在执行ret指令的时候,进行下面2步操作:(IP)=((ss)*16+(sp)) (sp)=(sp)+2相当于进行pop IP.举例:ret指令执行后,(IP)=0; CS:IP指向代码段的第一...原创 2019-07-23 21:04:20 · 1420 阅读 · 0 评论 -
汇编 (十) 内中断
1.1 内中断的产生当CPU内部有下面内容发生的时候,将产生相应的中断信息,8086CPU使用中断类型码的数据来标识中断信息的来源,中断类型码为一个字节型数据,可以表示256种中断信息来源。除法错误,比如div指令产生的除法溢出 //中断类型码为0 单步执行 //中断类...原创 2019-07-30 21:24:30 · 420 阅读 · 0 评论 -
汇编 (九) 标志寄存器
8086CPU的标志寄存器,简称flag寄存器,有16位,按位起作用,每一位都有其含义。结构如图:在8086CPU指令集中,有的指令执行时影响标志寄存器的,比如add,sub,mul,div,inc,or,and 等,它们大都是运输指令(进行逻辑或算术运算);有的指令执行对标志寄存器没有影响,比如mov,push,pop,它们大都是传输指令。1.1 ZF标志...原创 2019-07-28 21:12:19 · 1094 阅读 · 0 评论 -
汇编 (七) 数据处理的两个基本问题
两个基本问题处理的数据在什么地方? 处理的数据有多长?寄存器seg: ax,bx,cx,dx,ah,al,ch,cl,dh,dl,sp,bp,si,di;段寄存器sreg: (segment register) ds,ss,cs,es1.1 bx,si,di,bp在8086CPU中,只有这4个寄存器可以在“[...]”中进行内存单元的寻址。 在“[...]”中,...原创 2019-07-18 20:14:56 · 676 阅读 · 0 评论 -
汇编 (七)转移指令原理
转移指令:可以修改IP 或 同时修改CS和IP的指令。概括讲,就是可以控制CPU执行内存中某处代码的指令。8086CPU转移行为:只修改IP,成为段内转移,比如 jmp ax 根据转移指令对IP的修改范围不同,段内转移分为: 短转移,IP修改范围为-128~127 ...原创 2019-07-21 20:51:23 · 308 阅读 · 0 评论 -
汇编 (六) 包含多个段的程序
程序取得所需空间的方法有两种:在加载程序的时候为程序分配。 程序在执行的时候向系统申请。我们若要一个程序在被加载的时候取得所需的空间,则必须在源程序中做出申明,我们通过在源程序中定义段来进行内存空间的获取。我们若要CPU从何处开始执行程序,只要再源程序中用 “end 标号” 指明,程序框架如下:assume cs:codecode segment 数据...原创 2019-07-15 21:50:28 · 185 阅读 · 0 评论 -
汇编 (三) 寄存器(内存访问)
1.1 内存中字的存储在CPU中,用16位寄存器来存储一个字,高8位存放高字节,低8位存放低字节(小端低低)。一个字需要用两个连续的地址内存单元来存放。在上图中,字型数据4E20H的低位字节存放在0号内存单元中,高位字节存放在1号内存单元中。 将起始地址为N的字单元简称为N地址字单元。 0地址单元中存放的 字节型 数据为20H。 0地址字单元中 存放的 字型 数据为4E20...原创 2019-07-11 20:59:38 · 540 阅读 · 0 评论 -
汇编 (五) [BX] 和 loop 指令
1.1 [bx]和内存单元的描述mov ax , [0] //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。mov ax , [bx] //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。为什么要用这个[bx]的方式?这样可以直接对bx进行偏移 Inc bx 从而操作连续内存空间。1.2 描述性符号()使用描述性符号“()” 来表示一个寄存器或...原创 2019-07-15 20:27:38 · 334 阅读 · 0 评论 -
汇编 (四) 汇编程序
1.1 源程序在汇编程序中,一种是汇编指令,一种是伪指令。汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。伪指令:没有对应的机器指令,最终不被CPU所执行,其由编译器来执行,编译器根据伪指令来进行相关的编译工作。...原创 2019-07-13 21:08:12 · 219 阅读 · 0 评论 -
汇编 (二) 寄存器
在CPU中,寄存器 进行信息的存储,并且寄存器是CPU中程序员可以用指令读写的部件。1.1 通用寄存器在8086CPU中的所有寄存器都是16位的,可以存放2个Byte.AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,成为通用寄存器。以AX为例,AX的低8位(0~7)构成AL寄存器,高8位(8~15)构成AH寄存器,AL和AH都可以独立使用的8位寄存器。...原创 2019-07-09 21:55:38 · 776 阅读 · 0 评论 -
汇编 (十二) 端口
CPU可以直接读写以下3个地方数据:CPU内部的寄存器 内存单元 端口1.1 端口的读写CPU通过端口地址来定位端口,端口的读写指令只有两条:in 和 out //在这两个指令中,只能使用ax和al来存放从端口中读入的数据或要发送到端口中的数据。访问8位端口用al,访问16位端口用ax。对0~255以内的端口进行读写:in al,20h //从20端口读入一...原创 2019-07-31 21:42:21 · 511 阅读 · 0 评论