汇编语言
文章平均质量分 89
boat_7
世人皆被命运安排,而我安排命运
展开
-
使用BIOS进行键盘输入
使用BIOS进行键盘输入int 9中断例程对键盘输入的处理使用int 16h中断例程读取键盘缓冲区大多数有用的程序都需要处理用户的输入,键盘输入是最基本的输入,程序和数据需要长期存储,BIOS为这种外设的I/O提供了最基本的中断例程int 9中断例程对键盘输入的处理键盘输入将引发9号中断,BIOS提供了int 9中断例程,CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中下面,我们通过下面几原创 2021-07-28 20:48:56 · 766 阅读 · 0 评论 -
直接定址表
直接定址表描述单元长度的标号在其他段中使用数据标号直接定址表描述单元长度的标号之前,我们一直在代码段中使用标号来标记指令,数据,段的起始地址,比如:assume cs:codecode segment a:db 1,2,3,4,5,6,7,8 b:dw 0start: mov si,offset a mov bx,offset b程序中,code,a,b,start都是标号,这些标号仅仅表示了内存单元的地址但是,我们还可以使用一种标号,这种标号不但表示内存单元的地址,还表示了内存原创 2021-07-27 20:55:37 · 209 阅读 · 0 评论 -
汇编外中断
外中断接口芯片和端口外中断信息PC机键盘的处理过程CPU在计算机系统中,除了能够执行指令,进行运算之外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出要及时处理外设的输入,显然需要解决两个问题:外设的输入随时可能发生,CPU如何得知?CPU从何处得到外设的输入?接口芯片和端口PC系统的接口卡和主板上,装有各种接口芯片,这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中,CPU向外设的输出也不是直原创 2021-07-26 23:45:16 · 110 阅读 · 0 评论 -
汇编 端口
端口端口的读写各种存储器都和CPU的地址线,数据线,控制线相连,CPU在操控它们的时候,把它们都当作内存来对待,把它们总地看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器我们称其为内存地址空间在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3中芯片:各种接口卡(比如,网卡,显卡)上的接口芯片,它们控制接口卡进行工作主板上的接口芯片,CPU通过它们对部分外设进行访问其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理在这些芯片中,都有一组可以由CPU读写的寄存器,原创 2021-07-25 20:39:55 · 294 阅读 · 0 评论 -
汇编内中断
内中断内中断的产生中断处理程序中断向量表中断过程任意一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理,这个特殊的信息,我们可以称为:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息中断信息可以来自CPU的内部和外部,我们主要讨论来自于CPU内部的中断信息内中断的产生当CPU的内部有什么事情发生的时候,将产生需要马上处理的中断信息呢?对转载 2021-07-24 21:33:58 · 133 阅读 · 0 评论 -
标志寄存器的典型指令
标志寄存器的典型指令adc指令sbb指令cmp指令检测比较结果的条件转移指令DF标志和串传送指令pushf和popf标志寄存器在Debug中的表示adc指令adc是带进位加法指令,它利用了CF位上记录的进位值指令格式:adc 操作对象 1,操作对象 2功能:操作对象1=操作对象1+操作对象2+CF比如指令 adc,ax,bx 实现的功能是:(ax)=(ax)+(bx)+CFCPU为什么要提供这样的一条指令?如果CF的值是被sub指令设置的,那么它的含义就是借位值如果是被add指令设置的原创 2021-07-23 20:38:44 · 508 阅读 · 1 评论 -
标志寄存器
标志寄存器ZF标志PF标志SF标志CF标志OF标志CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3种作用,用来存储相关指令的某些执行结果用来为CPU执行相关指令提供行为依据用来控制CPU的相关工作方式这种特殊的寄存器在8086CPU中,被称为标准寄存器,8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字标志寄存器(flag)和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,转载 2021-07-22 21:03:02 · 4405 阅读 · 0 评论 -
CALL和RET指令
CALL和RET指令ret和retfcall指令依据位移进行转移的call指令转移的目的地址在指令中的call指令转移地址在寄存器中的call指令转移地址在内存中的call指令call和ret配合使用模块化程序设计call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP,它们经常被同时用于实现子程序的设计ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移如果我们用汇编语法来解释ret和retf指令,则:原创 2021-07-19 20:08:25 · 1813 阅读 · 0 评论 -
转移指令的原理
转移指令的原理操作符offsetjmp指令依据位移进行转移的jmp指令转移的目的地址在指令中的jmp指令转移地址在寄存器中的jmp指令转移地址在内存中的jmp指令jcxz指令loop指令根据位移进行转移的意义编译器对转移位移超界的检测可以修改IP,或同时修改CS和IP的指令称为转移指令。8086CPU的转移行为有以下几类。只修改IP时,称为段内转移,比如:jmp ax同时修改CS和IP时,称为段间转移,比如:jmp 1000:0由于转移指令对IP的修改范围不同,段内转移分为:短转移和近转移转载 2021-07-18 18:33:55 · 137 阅读 · 0 评论 -
寻址方式的综合应用
寻址方式的综合应用机器指令处理的数据在什么地方汇编语言中数据位置的表述寻址方式指令要处理的数据有多长我们知道,计算机是进行数据处理,运算的机器,就有两个基本的问题就包含其中:处理的数据在什么地方要处理的数据有多长这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机就无法工作。机器指令处理的数据在什么地方绝大多数机器指令都是进行数据处理的指令,处理大致分为3类,读取,写入,运算,在机器指令这一层来讲,并关系数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的位置,指令在执行前,原创 2021-07-17 20:02:27 · 393 阅读 · 2 评论 -
更灵活的定位内存地址的方法
更灵活的定位内存地址的方法and和or指令大小写转换的问题[bx+idata]用[bx+idata]的方式进行数组的处理SI和DI不同的寻址方式的灵活应用and和or指令and指令:and指令:逻辑与指令,按位进行与运算mov al,01100011Band al, 00111011B执行后:al=00100011B通过该指令可将操作对象的相应位设为0,其余位不变。例如:将al的第6位设为0的指令是:and al,10111111Bor指令:mov al,01100011Bor原创 2021-07-16 21:29:55 · 125 阅读 · 1 评论 -
包含多个段的程序
包含多个段的程序在代码段中使用数据在代码段中使用栈将数据,代码,栈放入不同的段在操作系统中,合法的通过操作系统取得的空间都是安全的,因为操作系统不会让一个程序所用的空间和其他程序以及系统自己的空间相冲突,在操作系统允许的情况下,程序可以取得任意容量的空间。程序取得所需的空间的方法有两种:在加载程序的时候对程序分配程序在执行的过程中向系统申请我们若要一个程序在被加载的时候取得所需的空间,则必须要在源程序中做出说明,我们通过在源代码中定义段来进行内存空间的获取。在代码段中使用数据具体做法,如下原创 2021-07-15 21:08:23 · 121 阅读 · 1 评论 -
[bx]和loop指令
[bx]和loop指令[bx]Loop指我们的令Debug和汇编编译器masm对指令的不同处理loop和[bx]的联合应用[bx][bx]是什么?和[0]有些类似,[0]表示内存单元,它的偏移地址是0,比如:mov ax,[0]将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在ds中。要完整地描述一个内存单元,需要两种信息:内存单元的地址内存单元的长度(类型)[bx]同样也表示一个内存单元,它的偏移地址在bx中,比如:mov ax,原创 2021-07-14 15:47:42 · 346 阅读 · 0 评论 -
编写汇编程序流程
第一个汇编程序一个源程序从写出到执行的过程源程序中的"程序"标号编辑源程序编译连接1.exe的执行谁将可执行文件中的程序装载进入内存并使它运行总结程序执行过程的跟踪一个源程序从写出到执行的过程第一步:编写汇编源程序使用文本编译器(如 Edit,记事本等),用汇编语言编写汇编源程序第二步:对源文件进行编译连接使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件,再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件可执行文件包含两部分内容程序(从源程序中的汇编指令翻原创 2021-07-13 23:09:00 · 9866 阅读 · 2 评论 -
CPU提供的栈机制
CPU提供的栈机制栈顶超界问题现今的CPU中都有栈的设计,8086CPU也不例外,8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈),比如,push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax,8086CPU的r入栈和出栈操作都是以字为单位进行的。我们可以将10000H—10000FH这段内存当作栈来使用注意,字型数据用两个单元存放,高地址单元存放高8位,低地址单元存放低8位,看到所描述的push和pop指令,是否有一些疑惑,总结下来,原创 2021-07-12 16:34:36 · 903 阅读 · 0 评论 -
修改CS,IP的指令
修改CS,IP的指令段寄存器CS和IP修改CS,IP的指令段寄存器8086CPU在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址,段地址在8086CPU的段寄存器中存放,8086CPU有4个段寄存器:CS,DS,SS,ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。CS和IPCS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地方,CS为代码段寄存器,IP为指令指针寄存器,在8086PC机中,任意时刻,设CS中的内原创 2021-07-11 21:40:26 · 1764 阅读 · 4 评论 -
段地址x16+偏移地址=物理地址的本质含义
CPU对存储器的读写存储器被划分为多个存储单元,存储单元从零开始顺序编号,这些编号可以看作存储单元在存储器中的地址,就像一条街,每个房子都有门牌编号。CPU要从内存中读取数据,首先要指定存储单元的地址,。也就是说它要先确定它要读取哪一个存储单元的数据。另外,在一台微机中,不只有存储器这一种器件。CPU在读写数据时还要指明。它要对哪一个器件进行操作,进行哪种操作,是从中读取数据,还是向里面写入数据可见,CPU要想进行数据的读写,必须和外部器件进行下面3类信息的交互。存储单元的地址(地址信息)原创 2021-07-11 11:53:19 · 3060 阅读 · 3 评论