汇编
文章平均质量分 63
yeyeyeping
这个作者很懒,什么都没留下…
展开
-
汇编语言11之中断和int指令以及端口
中断第处理外部突发事件的一个重要技术硬件中断外部中断 一般是外设发出的中断内部中断 硬件出错或运算出错引起的中断,不可被屏蔽软件中断中断处理程序CPU必须建立中断信息和中断处理程序之间的联系中断信息中包含(1byte)中断类型码,CPU根据此来定位中断处理程序中断向量表:存放中断类型码和中断处理程序的对应关系的表,存放中断处理程序的入口地址8086的中断向量表是放在内存起始位置总共256个中断类型,占用1024个字节中断过程:取得中断类型码N标志位寄存器入栈,pus原创 2021-08-17 17:53:11 · 1021 阅读 · 0 评论 -
汇编语言10之标志寄存器以及一些movadcsbb指令
ret和retfret指令实现近转移,会利用栈中的数据,修改ip的值ret n指令相当于:pop ipadd sp,n也就是下面的过程: (ip)=((ss)*16+(sp)) (sp)=(sp)+2retf指令实现远转移 (ip)=((ss)*16+(sp)) (sp)=(sp)+2 (cs)=((ss)*16+(sp)) (sp)=(sp)+2callcall指令执行的过程: 将当前ip或者cs和ip压入栈中 转移(jmp near或者call farpt原创 2021-08-13 14:30:56 · 381 阅读 · 0 评论 -
汇编语言9之callret指令以及mul乘法指令
ret和retfret指令实现近转移,会利用栈中的数据,修改ip的值ret n指令相当于:pop ipadd sp,n也就是下面的过程: (ip)=((ss)*16+(sp)) (sp)=(sp)+2retf指令实现远转移 (ip)=((ss)*16+(sp)) (sp)=(sp)+2 (cs)=((ss)*16+(sp)) (sp)=(sp)+2callcall指令执行的过程: 将当前ip或者cs和ip压入栈中 转移(jmp near或者call farpt原创 2021-08-13 14:27:59 · 457 阅读 · 0 评论 -
汇编语言8之转移指令的原理
转移行为类型:无条件转换指令(如:jmp)条件转移指令循环指令(如:loop)过程中断操作符offset标号有段地址和偏移地址seg去段地址,offset去偏移地址如果直接在寄存器中使用标号,获得的是ds和offset组合得到的数据值功能:获取标号的偏移地址将s处的内容复制到s0处]根据位移进行转移的jmp指令短转移:jmp short 标号(转移到标号处执行指令)这种格式的jmp指令实现的是段内短转移,对ip修改范围为-128-127在一般的汇编指令中。汇编的idata(原创 2021-08-13 14:27:13 · 449 阅读 · 0 评论 -
汇编语言7之数据访问的基本问题以及div指令
bx,di,si,bpbx:常见的通用寄存器,默认基于数据段偏移,[bx]将会在ds段地址上偏移后然后寻址di和si:SI(source index)和DI(destination index)是8086CPU中和bx功能相近的寄存器,但是SI和DI不能分成两个低位的寄存器,在处理内存中的数据的过程中,只能一次将两个字节放入寄存器中bp:(base pointer)功能和bx一致,但是[bp]默认是基于ss上的偏移后寻址,和sp一样在[…]中,只能是这四个寄存器或者这四个寄存器的特定组合,这些组合只原创 2021-08-13 14:25:35 · 590 阅读 · 0 评论 -
汇编语言6之内存地址定位
and指令被允许的组合:AND reg, regAND reg, memAND reg, immAND mem, regAND mem, imm逻辑运算中的按位与运算还可以实现将寄存器中的某个位设置为0and al,111111110b将al寄存器的中的第0位设置为0or指令逻辑或指令还可以用于将某一位设置为1[bx+idata]]]]汇编实现到大写,到小写assume cs:codesg,ds:datasgdatasg segment db 'Unix' d原创 2021-08-13 14:24:52 · 487 阅读 · 0 评论 -
汇编语言5之包含多个段的程序
在代码段中使用数据在代码段定义一段数据:dw 0124h,0456h,0789hdw(define word)是用于定义字形数据的指令,放在代码段的最前面时,编译器会将代码段前相应的几个字节用于存放定义的数据。注意:一旦在代码段定义了数据,就需要相应的指定汇编指令部分的入口。也就是在真实指令部分的最前方给出标号,常用的是start,然后在程序末尾对应上end start,来用标识指令的结束。编译器识别入口其实就是先找到end,在通过end后面的标号名字向前查找入口代码段中使用栈:使用栈必须先原创 2021-08-13 14:23:28 · 166 阅读 · 0 评论 -
汇编语言4之loop指令和bx寄存器
[bx]在使用masm编译汇编源程序的时候,不能使用类似:mov ax,[0]作为相对寻址的方式。替代的方法就是现将偏移地址存到bx中,然后利用mov ax,[bx]的方式来代替.或者以ds:[偏移地址]的方式来寻址,在8086CPUT中,进行寄存器间接寻址的时候,[…]中的内容只可以是变址(index,指SI, DI)寄存器或基址(base,指BX, BP)寄存器。mov ax,2000hmov ds,axmov bx,1000hmov ax,[bx]bx寄存器常常用于存放偏移地址loop原创 2021-08-13 14:22:37 · 670 阅读 · 0 评论 -
汇编语言3之汇编程序
过程:编写源代码编译链接源代码生成可执行文件,可执行文件包含两部分内容程序和数据、相关描述信息源程序汇编指令伪指令:指令没有对应的机器码,由编译器识别和执行定义一个段一个汇编程序有多个段组成,这些段用来存放代码,数据或当做栈空间来使用。一个有意义的汇编程序至少用一个代码段]segment和ends:segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪令。segment和ends的功能是定义一个段,segment表示一个段的原创 2021-08-13 14:21:23 · 882 阅读 · 0 评论 -
汇编语言2之寄存器的访问
在计算机系统中,通常是以字节为单位,每一个地址单元对应着一个字节,寄存器的位数超过一个字节的时候,就会出现字节安排的问题也就是说,当读取的内容超过一个字节的时候,每一个字节在读取的时候的位置如何放置,如果高地址放在高位就叫做大端格式,高地址放在低位就叫做小端格式。DS和[adress]CPU要你 从内存读取数据的时候,首先需要给出这个内存单元的地址.在8086也就是x86架构中,内存地址由段地址和偏移地址所组成,8086CPU的DS寄存器就是数据段寄存器,用来存放数据段地址,[adress]原创 2021-08-13 14:20:18 · 159 阅读 · 0 评论 -
汇编语言1之CPU工作原理
CPU工作原理: 对于8086 CPU,地址总线有20个,在存储器中寻址的时候一次可以传送20位地址信息,寻址能力为1 M。但是内部数据总线以及寄存器都是16位的,因此寻址的过程中需要进行转换。如何进行的转换呢?8086 CPU 采用一种在内部用两个16位地址(称为段地址和偏移地址)合成的方法来形成一个20位的物理地址。地址加法器合成物理地址的方法: 物理地址=段地址*16+偏移地址 在16进制下也就是,段地址左移一位+偏移地址但是实际上,存并没有分段,仍然是线性的,只是人类方便理解,原创 2021-08-13 14:19:17 · 110 阅读 · 0 评论 -
arm汇编----入门概要
2中工作状态 7种工作模式 37个寄存器(1) 2种状态:ARM状态:执行32位ARM指令集Thumb状态: 执行16位Thumb指令集(2) 7种工作模式:用户模式(usr):ARM正常执行程序快速中断模式(fiq):用于高速数据传输或者通道处理外部中断模式(irq):用于通用的中断处理管理模式(svc):操作系统使用的保护模式(拥有额外的特权)中止模式(abt):当数据或指令预取中止时进入该模式,用于虚拟储存交换及储存保护未定义模式(und):当未定义的指令执行进入该模式,用于支.原创 2021-03-08 09:37:20 · 329 阅读 · 0 评论