汇编语言
汇编语言学习笔记
Evil Fatman
这个作者很懒,什么都没留下…
展开
-
汇编语言读书笔记(12.内中断)
汇编语言(第三版,王爽)读书笔记 内中断 cpu都具备一种能力,检测到从cpu外部发送过来的或内部产生的一种特殊信息,并可以立即对所接受的信息进行处理。称其为中断信息,中断的意思就是,cpu不在接着向下执行,而是转去处理这个特殊信息。 内中断的产生 cpu内部有下面的情况发生的时候,将产生相应的中断信息: (1)除法错误,执行div指令产生的除法溢出 (2)单步执行 (3)执行int指令 (4)执行into指令 中断处理程序 cpu收到中断信息后,应该转去执行该中断信息的处理程序。就要将cs:ip指向它的入原创 2020-08-11 14:58:28 · 270 阅读 · 1 评论 -
汇编语言读书笔记(11.标志寄存器)
汇编语言(第三版,王爽)读书笔记 标志寄存器 cpu内部寄存器中,有一种特殊的寄存器具有以下作用: 用来储存相关指令的某些执行结果 用来为cpu执行相关指令提供行为依据 用来控制cpu的相关工作方式 这些寄存器在8086cpu中被称为标志寄存器(flag)。标志寄存器有16位,其中储存的信息通常被称为程序状态字(PSW) 标志寄存器按位起作用,每一位都有专门的含义 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF A原创 2020-07-31 19:40:20 · 274 阅读 · 0 评论 -
汇编语言读书笔记(10.CALL和RET指令)
汇编语言(第三版,王爽)读书笔记 CALL和RET指令 ret和retf ret指令用栈中的数据,修改ip的内容,从而实现近转移 cpu执行ret时: (1)(ip)=((ss)* 16+(sp)) (2)(sp)=(sp)+2 retf指令用栈中的数据,修改cs和ip的内容,从而实现远转移 cpu执行retf时: (1)(ip)=((ss))* 16+(sp)) (2)(sp)=(sp)+2 (3)(cs)=((ss)* 16+(sp)) (4)(sp)=(sp)+2 call指令 cpu执行call原创 2020-07-31 13:38:26 · 229 阅读 · 1 评论 -
汇编语言读书笔记(9.转移指令的原理)
汇编语言(第三版,王爽)读书笔记 转移指令的原理 可以修改ip或cs和ip的指令统称为转移指令。 操作符offset 操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。 例如mov ax,offset start就是将start的偏移地址赋给ax jmp指令 jmp为无条件转移指令,可以修改cs和ip或ip。 jmp指令给出两种信息: 转移的目的地址 转移的距离(段间转移、段内短转移、段内近转移) 依据位移进行转移的jmp指令 jmp short 标号(转到标号处执行指令原创 2020-07-28 23:32:58 · 165 阅读 · 0 评论 -
汇编语言读书笔记(8.数据处理的两个基本问题)
汇编语言(第三版,王爽)读书笔记 数据处理的两个基本问题 reg表示一个寄存器,sreg表示一个段寄存器 reg包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di sreg包括:ds,ss,cs,es bx、si、di、和bp 在8086cpu中,只有着4个寄存器可以用在[…]中来进行内存单元寻址 正确: mov ax,[bx+si] 错误:mov ax,[cx] 在[…]中,这4个寄存器可以单个出现,或只能以4中组合出现:bx和s原创 2020-07-26 19:57:44 · 160 阅读 · 0 评论 -
汇编语言读书笔记(7.更灵活的定位内存地址的方法)
汇编语言(第三版,王爽)读书笔记 更灵活的定位内存地址的方法 and和or指令 and指令:逻辑与,按位进行与运算 and al,00111011B or指令:逻辑或,按位进行或运算 or al, 00100000B 以字符形式给出的数据 用'......'的方式指明数据是以字符的形式给出的,编译器将他们转化位ASCII码 例如db 'unIX’相当于db 75h,6eh,49h,58h 大小写转化问题 小写字母的ASCII码减去20h就可以得到大写字母 大写字母的ASCII码加上20h就可以得到小原创 2020-07-24 00:10:27 · 145 阅读 · 0 评论 -
汇编语言读书笔记(6.包含多个段的程序)
汇编语言(第三版,王爽)读书笔记 包含多个段的程序 在代码段中使用数据 dw:即“define word”定义字型数据,存放在代码段中(CS) 示例程序 assume cs: code code segment dw 0123h, 0456h, 0789h, 0abch, 0defh, Ofedh, 0cbah,0987h start : mov bx, 0 mov ax, 0 mov cx,8 s: add ax,cs:[bx] add bx, 2 loo原创 2020-07-23 17:21:46 · 88 阅读 · 0 评论 -
汇编语言读书笔记(5.[BX]和loop指令)
[BX]和loop指令 汇编语言中,以字母开头的数据前面要加0 [BX] [bx]表示内存单元,地址为ds:bx Loop指令 cup执行loop指令时 ①cx=cx-1 ②判断cx中的值,不为0则跳转到标号处执行程序,为0则向下执行 计算2^12 mov ax,2 mov cx,11 s: add ax,ax loop s 使用debug时,若要将循环一次性执行完,可以使用p命令,自动重复执行循环,也可使用g命令(g xxxx)直接执行到CS:xxxx处,而不是一次次使用t命令原创 2020-07-23 00:53:20 · 134 阅读 · 0 评论 -
汇编语言读书笔记(4.第一个程序)
汇编语言(第三版,王爽)读书笔记 一个源程序从写出到执行的过程 使用文本编辑器编写汇编源程序 对源程序进行编译产生目标文件,再用连接程序对目标文件进行连接,生成可执行文件 操作系统依据可执行文件中的描述信息,将机器码和数据载入内存,并进行初始化设置(如CS:IP的设置) 可执行文件包括两部分: 程序(翻译的机器码)和数据(源程序中定义的数据) 相关的描述信息(程序占用内存空间等等) 源程序 一段简单的汇编语言源程序: assume cs: codesg codesg segment mov ax,原创 2020-07-22 18:25:08 · 131 阅读 · 0 评论 -
汇编语言读书笔记(3.寄存器内存访问)
汇编语言(第三版,王爽)读书笔记 寄存器(内存访问) 内存中字的存储 cup中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节 内存单元是字节单元(一个单元存放一个字节) 字单元:存放一个字型数据(16位)的内存单元 起始地址为N的字单元简称N地址字单元 DS和[address] 1.DS寄存器通常用来存放要访问数据的段地址 2.mov指令从一个内存单元送到一个寄存器中:mov 寄存器,内存单元地址偏移地址(8086cpu自动取ds中的数据为内存单元的段地址 字的传送 8086cpu原创 2020-07-21 22:52:38 · 145 阅读 · 0 评论 -
汇编语言读书笔记(2.寄存器)
汇编语言(第三版,王爽)读书笔记 8086cpu的寄存器都是16位,向下兼容8位 AX、BX、CX、DX寄存器可以分为AH和AL,BH和BL······ 8086cpu有20位地址总线,但只能处理16位的数据,因此采用2个16位地址合成一个20位的物理地址 物理地址=段地址*16(段地址左移4位)+偏移地址 物理地址=基础地址+偏移地址 CS和IP CS为代码段寄存器,IP为指令指针寄存器 (1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器 (2)IP=IP+所读取指令的长度,从而原创 2020-07-21 00:36:19 · 111 阅读 · 0 评论