随笔分类 - ASM
汇编语言学习记录
摘要:16.0 概述 本章讨论如何有效合理地组织数据,以及相关的编程技术. 16.1 描述了单元长度的标号 标号后面不加":",便是同时描述内存地址和单元长度的标号. 使用这种标号可以使我们以简洁的形式访问内存中的数据,我们称其为>>>>数据标号<<<<,以区别于原来的>>>>地址标号<<<<. 16.2 在其他段中使用数据标号 >>>>在后面有":"的地址标号,只能在代码段中使用.<<<< 注意,如果想在代码段中使用
阅读全文
摘要:15.0 概述 CPU除了要能执行指令,进行运算,还需要能对外部设备进行控制,接受它们的输入,向它们输出. 要及时处理外设的输入,需要解决两个问题:(1) 外设的输入随时可能发生,CPU如何得知? (2) CPU从何处得到外设的输入? 下面将以键盘为例,讨论这两个问题. 15.1 接口芯片和端口 CPU通过端口和外部设备进行联系.(与编程人员通过改写寄存器控制CPU的道理一样) 15.2 外中断信息 CPU得知有外设输入需要处理的途径. 外中断分为两类: 1.可屏蔽中断 可屏蔽中断是CPU可以不响应的外部中断,要看标志寄存器IF位的设置.如果IF=0,则不响应,如果IF=1,则响应. 8086
阅读全文
摘要:14.0 概述 PC机系统中,和CPU通过总线相连的芯片除了各种存储器外,还有以下3种芯片: (1) 各种接口卡(如网卡,显卡)上的的接口芯片,它们控制接口卡进行工作 (2) 主板上的接口芯片,CPU通过他们对部分外设进行访问 (3) 其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理 在这些芯片中,都有CPU可以读写的寄存器,虽然它们位于不同的芯片中,但有以下的共同点 (1) 与CPU的总线相连,当然这是通过他们所在的芯片进行的 (2) CPU对它们的读写是通过控制线向它们所在的芯片发出端口读写命令 从CPU的角度,将这些寄存器当作端口,每个端口在内存地址空间中有一个地址. CPU可
阅读全文
摘要:13.1 int指令 指令格式: int n 指令功能: n 是中断类型码,该指令用于引发中断过程.执行过程如下, (1) 取得中断类型码 n (2) 标志寄存器入栈,IF=0,TF=0 (3) CS,IP入栈 (4) (IP)=(n*4),(CS)=(n*4+2) 注:一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用. 13.2 编写供应用程序调用的中断例程 注:中断例程,要添加iret做返回.即 pop IP pop CS popf 注2:中断例程中用到寄存器要注意保存和恢复 13.3 对int,iret和栈的深入理解 问题:用7ch中断例程完成loo..
阅读全文
摘要:12.0 概述 任何一个通用的CPU,都具备处理中断信息的能力.中断的意思是指:CPU不再接着(刚执行完的指令)向下执行,而是转去处理"中断"这个特殊信息. 中断信息可以来自CPU的内部和外部,本章主要讨论内中断. 12.1 内中断的产生 对于8086CPU,当CPU内部有下面情况发生的时候,将产生相应的中断信息: (1) 除法错误,比如执行div指令产生的除法溢出 (2) 单步执行 (3) 执行into指令 (4) 执行int指令 8086CPU使用>>中断类型码<<来标识这四种不同的中断信息来源(简称中断源),中断类型码有一个字节(可表示256种
阅读全文
摘要:11.0 概述 CPU内部寄存器中,有一种特殊的寄存器(对不同的处理机,个数和结构可能不同),具有以下三种作用 (1) 用来存储相关指令的某些执行结果 (2) 用来为CPU执行相关指令提供行为依据 (3) 用来控制CPU的相关工作方式 这种特殊的寄存器在8086CPU中被称为标志寄存器.标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW).以下标志寄存器简称flag. flag寄存器与其他寄存器不同,是按位起作用的,每一位都有专门的含义,记录特定的信息. 15 14 13 12 11 OF 10 DF 09 IF 08 TF 07 SF 06 ZF 05 04 AF 03 02 P
阅读全文
摘要:10.0 概述 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被用来共同实现子程序的设计。 10.1 ret和retf ret指令用栈中的数据,修改IP的内容,即相当于 pop IP retf指令用栈中的数据,修改CS和IP的内容,即相当于 pop IP pop CS 10.2 call指令 CPU执行call指令时,进行两步操作 1) 将当前的IP或CS和IP压入栈中 2) 转移 call指令不能实现短转移,除此之外,call指令实现转移的方式与jmp指令的原理相同。 10.3 依据位移进行转移的call指令 call 标号 ;(将当前IP压栈,转到标号处开
阅读全文
摘要:9.0 概述 可以修改IP,或同时修改CS:IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。 8086CPU的转移行为有以下几类: <> 只修改IP时,称为段内转移指令。如 jmp ax <> 同时修改CS和IP时,称为段间转移指令。如 jmp 1000:0 由于转移指令对IP的修改范围不同,段内转移又分为短转移和近转移: <> 短转移的IP修改范围为-128~127 <> 近转移的IP修改范围为-32768~32767 8086CPU的转移指令分为以下几类: <> 无条件转移指令,如 jmp。
阅读全文
摘要:8.0 概述 数据处理的两个基本问题: (1) 处理的数据在什么地方? (2) 要处理的数据有多长? 为了描述上的简洁,后面使用reg表示一个寄存器,sreg表示一个段寄存器。 reg的集合包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di sreg的集合包括:ds,ss,cs,es 8.1 bx,bp,si,di (1) 8086CPU中,只有这四个寄存器可以用在“[...]”中来进行内存单元的寻址 (2) 这四个寄存器在“[...]”中只能单独出现,或以下面四种组合出现:bx+si,bx+di,bp+si,bp+di (3) 只要在“[..
阅读全文
摘要:7.1 and 和 or 指令 (1) and 指令:逻辑与指令,按位进行与运算。 示例: mov al,01100011B and al,00111011B 执行结果:(al)=00100011B (2) or 指令:逻辑或指令,按位进行或运算。 示例: mov al,01100011B or al,00111011B 执行结果:(al)=01111011B 7.2 关于ASCII码 简单的说,所谓编码方案,就是一套规则,它约定了在计算机中,用什么样的信息来表示现实对象。ASCII就是一种编码方案。 7.3 以字符形式给出的数据 我们可以在汇编程序中,用'......'的形式
阅读全文
摘要:6.0 概述 前面的程序中,只有一个代码段,如果程序需要其他空间来存放数据,使用哪里呢? 第5章讲过,0:200~0:2ff是相对安全的内存空间,但大小只有256个字节,如果我们需要的空间超过256个字节,就需要向系统申请。 程序取得所需要的空间的方法有两种,一是在加载时分配,二是执行过程中向系统申请,本课程不讨论第二种方法。 我们若要在一个程序被加载时取得所需空间,必须要在源程序中作出说明,我们通过在源程序中定义段来进行内存空间的获取。 6.1 在代码段中使用数据示例程序:assume cs:codecode segment dw 0123h,0456h,0789h,0abch,0defh,
阅读全文
摘要:5.0 概述 1.[BX]和内存单元的描述 要完整地描述一个内存单元,需要有两种信息:1)内存单元的地址;2)内存单元的长度(类型)。 用[0]表示一个内存单元时,0表示偏移地址,段地址默认在DS中,单元的长度(类型)可以由具体指令中的其他操作对象(如寄存器)指出。 [bx]同样表示一个内存单元,它的偏移地址在bx中。 2.loop 循环指令。 3.自定义的描述性符号“()” 为了描述的简洁,用“()”来表示一个寄存器或内存单元中的内容。 4.约定符号idata表示常量 5.1 [BX] mov ax,[bx] 功能:bx中存放的数据做为一个偏移地址EA,段地址SA默认在ds中。将SA:EA处
阅读全文
摘要:4.1 一个源程序从写出到执行的过程 编写汇编源程序(源代码文件) -> 对源程序进行编译链接(可执行文件,包括程序与描述信息) -> 执行程序(机器码与数据载入内存并初始化,指示CPU执行) 4.2 源程序 源程序包含以下几个部分: 1.伪指令 没有对应的机器指令,最终由编译器执行 (1) XXX segment ... XXX ends segment 和 ends 是成对使用的伪指令,功能是定义一个段。 >>>>一个有意义的汇编程序至少要有一个段,这个段用来存放代码<<<< (2) end end 是一个汇编程序的结束标记,注意
阅读全文
摘要:3.1 内存中字的存储 CPU中,用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节。 由于内存单元是字节单元,则一个字要用两个地址连续的内存单元来存放。低位字节存放在低地址单元中,高位字节存放在高地址单元中。3.2 DS和[Address] [address] 即 DS:address 注:8086CPU不支持将数据直接送入段寄存器的操作。 3.3 字的传送 8086CPU是16位结构,可以一次传送一个字。 3.4 mov,add,sub指令 mov指令的几种形式 mov reg,idata mov reg,reg mov reg,[address] mov [address
阅读全文
摘要:CPU的构造:运算器,寄存器,控制器,总线程序员通过改变各种寄存器中的内容来实现对CPU的控制。8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW2.1 通用寄存器 AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,称为通用寄存器。 8086的所有寄存器都是16位的,为了保证兼容,使原来基于上代8位CPU编写的程序稍加修改就可以在8086上运行,8086CPU的4个通用寄存器都可以分为两个独立使用的8位寄存器。2.2 字在寄存器中的储存2.3 几条汇编指令 注:汇编命令操作的对象位数须一致2.4 物理地址 所有的内存单元
阅读全文
摘要:1.1 机器语言1.2 汇编语言的产生 程序员 -> 汇编指令 -> 编译器 -> 机器码 -> 计算机1.3 汇编语言的组成 (1) 汇编指令:机器码的助记符,有对应的机器码 ****注 (2) 伪指令:没有对应的机器码,由编译器执行,计算机并不执行 (3) 其他符号:如+,-,*,/等,由编译器识别,没有对应的机器码1.4 存储器 离开了内存,性能再好的CPU也无法工作.就像离开了记忆,再聪明的大脑也无法进行思考1.5 指令和数据 指令和数据只是应用上的概念,在内存或磁盘上没有任何的区别,都是二进制信息1.6 存储单元1.7 CPU对存储器的读写 (1) CPU想要
阅读全文
浙公网安备 33010602011771号