随笔分类 -  汇编

摘要:一些约定主引导扇区代码(0面0道1扇区)加载至0x07c00处用户程序头部代码需包含以下信息:程序总长度、程序入口、重定位表等信息用户程序当虚拟机启动时,在屏幕上显示以下两句话: This is user program,it just to display basic information.Th... 阅读全文
posted @ 2014-06-01 17:20 huntstack 阅读(711) 评论(0) 推荐(0)
摘要:使用寄存器TC2.0编译器,编译连接如下代码用Debug加载,-u命令查看汇编代码,发现根本找不到main函数所在代码段,故用print语句将main函数所在代码段的偏移地址输出方便查找。可以看到,在程序开头多出两行代码push bp;mov bp,sp这是因为汇编程序将main函数作为子程序处理,... 阅读全文
posted @ 2014-03-11 22:22 huntstack 阅读(281) 评论(0) 推荐(0)
摘要:字符的处理键盘输入的字符一般由int9中断例程从60h端口中读取,并存放在键盘缓冲区中,由int16h例程从键盘缓冲区中读取相应字符,CPU对键盘输入a、shift_a的处理过程如下1.一开始没有键盘输入,键盘缓冲区为空。2.按下A键,引发int9例程从60h端口读取A键的通码,然后检测0040:1... 阅读全文
posted @ 2014-03-04 21:57 huntstack 阅读(613) 评论(0) 推荐(0)
摘要:不加冒号的数据标号直接定址表顾名思义就是可以通过给定的数据直接找到所需的地址,主要通过数据标号来实现。到现在为止我们学习的数据标号的写法都是形如a: db 1,2,3其实还有一种写法是这样a db 1,2,3看上去只是少了个冒号,但是表示的含义可是大不相同。第一种写法a表示内存单元的地址,而第二种写... 阅读全文
posted @ 2014-03-02 22:02 huntstack 阅读(325) 评论(0) 推荐(0)
摘要:概念外中断,顾名思义是用来处理外部设备输入的中断程序,主要分为两种:可屏蔽中断:根据标志寄存器IF位的值来判断是否响应,若IF=1,则CPU再执行完当前指令后响应中断;若IF=0则不响应不可屏蔽中断:CPU必须响应的外部中断,中断码固定为2键盘输入的处理过程1.键盘输入:按下一个键产生一个通码,松开... 阅读全文
posted @ 2014-01-28 16:03 huntstack 阅读(230) 评论(0) 推荐(0)
摘要:格式int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码。也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们自己定义了除法溢出的例程么,我们在这里直接调用看看 1 assume cs:codesg 2 3 c... 阅读全文
posted @ 2014-01-27 16:08 huntstack 阅读(467) 评论(0) 推荐(0)
摘要:序中断,可以理解为"从中间断开",再加上主语就是"从程序流中断开",即CPU不再接着预先定义的代码向下执行,转而去处理中断的信息,有内中断和外中断之分。内中断内中断是由计算机内部产生的中断信息,8086CPU有以下4种内中断信息:除法错误,中断码0单步执行,中断码1into指令,中断码4int指令,... 阅读全文
posted @ 2014-01-22 20:39 huntstack 阅读(532) 评论(0) 推荐(0)
摘要:序汇编语言中并没有高级语言的if、for语句,通过前面的学习,我们知道在汇编语言中通过loop来实现循环,通过call和ret来实现类似函数的功能。其实,不论是语法还是实现方式都不重要,重要的是要理解这种设计的思想以及为什么要设计这种指令。举个简单的例子,loop根据(CX)来控制循环次数,从语法上... 阅读全文
posted @ 2014-01-18 17:12 huntstack 阅读(406) 评论(0) 推荐(0)
摘要:说的多不如做的多,子程序的功能十分重要,这篇笔记用来记录书上练习题的代码,加强对子程序的应用。在屏幕上指定位置显示字符串在转移指令那一章有个联系是要求在屏幕中间显示不同颜色的字体,当时我写的代码是这样 1 assume cs:codesg,ds:data 2 3 data segment 4 db... 阅读全文
posted @ 2014-01-09 22:43 huntstack 阅读(321) 评论(0) 推荐(0)
摘要:ret和retfCPU执行ret指令时进行以下两步操作:(IP)=((ss)*16+(sp)) (sp)=(sp)+2这相当于pop IPCPU执行retf指令时进行以下四步操作:(IP)=((ss)*16+(sp)) (sp)=(sp)+2 (cs)=((ss)*16+(sp)) (sp)... 阅读全文
posted @ 2014-01-07 20:53 huntstack 阅读(533) 评论(0) 推荐(0)
摘要:这一章主要介绍了转移指令jmp的实现原理,个人感觉还是比较重要的一章,这一章就详细摘录书上的例题及练习,已达到巩固的效果。offsetoffset是由编译器执行的指令并没有对应的机器码。语法:offset 标号功能:获取标号的偏移地址书上的例子 1 ;offset 2 3 assume cs:co... 阅读全文
posted @ 2013-12-26 22:51 huntstack 阅读(422) 评论(0) 推荐(0)
摘要:《汇编语言》的1-8章已经学习完毕,这篇笔记是对前面所学的总结,想到哪些知识点就写下来(以下内容都是以8086CPU为基础)。汇编程序汇编语言是直接对硬件编程的语言,由机器语言发展而来,采用自然语言的形式书写指令并通过编译器编译为机器语言后由计算机执行。汇编程序主要由两部分组成:指令和数据。指令汇编... 阅读全文
posted @ 2013-12-21 15:56 huntstack 阅读(429) 评论(0) 推荐(0)
摘要:前言本文是《汇编语言》的学习笔记,对应书中第七章内容,灵活的寻址方式。这一章节主要通过例题的形式介绍汇编中访问内存的多种方式,新介绍了and和or命令,si,di寄存器。andand命令是逻辑与命令,按二进制位进行与运算。与运算就是q与q的合取式记为p^q,p和q只要有一个为假,p^q就为假,当且仅... 阅读全文
posted @ 2013-12-17 22:31 huntstack 阅读(672) 评论(0) 推荐(0)
摘要:本文是《汇编语言》一书的学习笔记,对应书中的4-6章。汇编程序的执行要想将源代码变为可执行的程序需经过编译、连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作。将MASM和Debug安装在E:\Software\assembly目录下并新建code文件夹,创建汇编源程序1.asm,使... 阅读全文
posted @ 2013-12-15 18:36 huntstack 阅读(257) 评论(0) 推荐(0)
摘要:本篇文章是汇编语言(王爽)一书的学习笔记,对应书中的第二、三章,寄存器。CPU主要是由运算器、寄存器和控制器组成,这一篇笔记主要是寄存器相关知识的学习总结,考虑到通用性,用8086CPU来学习。本次笔记共涉及8086CPU中的7个寄存器(总数14个),分别是AX,BX,CS,IP,DS,SS,SP。... 阅读全文
posted @ 2013-12-06 21:01 huntstack 阅读(506) 评论(0) 推荐(1)
摘要:本篇文章是汇编语言(王爽)一书的学习笔记,对应书中的第一章,基础知识。简介汇编语言,就是直接对硬件进行操作的语言,由机器语言发展而来。早期的程序员都是通过0和1组成的代码来控制计算机的行为,这种方式书写和维护成本巨大,一个hello world都是由几十行0和1组成,错把一个0写成1非常难遇排查,因... 阅读全文
posted @ 2013-11-30 22:22 huntstack 阅读(176) 评论(0) 推荐(0)