第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用Intel或AMD的32位/64位处理器运行本所有例子.     汇编语言是有所程序设计语言中最古老的语言,它与计算机的机器语言最为接近,通过汇编语言可以直接访问计算机的硬件,所以要求读者深入了解计算机体系结构和操作系统的大量细节. 1.1.1  一些精彩的提问 (没用的地方我都直接简化或者删除了啊!…
2.2  IA-32处理器体系结构 如前所述,IA-32是指始于Intel386直到当前最新的奔腾4的系列的处理器(额...这本书是什么时候写的啊,表示现在应该是I7啊),在IA-32的发展过程中,Intel处理器的内部体系结构已经做出了无数的改进,如流水线.超标量.分支预测以及超线程等.不过就编程而言.可见的变化只有用于多媒体处理以及用于图形计算的指令集扩展. 2.2.1  操作模式 IA-32处理器有三种基本的操作模式:保护模式.实地址模式和系统管理模式.另外一种模式称为虚拟8086模式,是…
第一章 汇编器链接器:汇编器将汇编语言翻译成机器语言,链接器将单个文件合并为可执行文件 intel 80X86系列处理器的汇编语言与VAX或者motorala 68x00等系统的汇编是否相同?不相同,汇编语言和CPU指令集是密切关联的,每种CPU体系对应不同的汇编. 什么是设备驱动程序:将操作系统的通用命令转化为对硬件具体细节实现的程序 常规机器语言指的是第二层 一条机器语言会被翻译成几条微指令,微指令是商业机密 高级语言会被解释成汇编语言,汇编语言被解释成机器语言(第二层),由操作系统(第三层…
4.3  和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操作符返回一个变量相对于其所在段开始的偏移. PTR 操作符允许重载变量的默认尺寸. TYPE操作符返回数组中每个元素的大小(以字节计算). LENGTHOF操作符返回数组内元素的数目. SIZEOF操作符返回数组初始化时占用的字节数. 除此之外,LABEL伪指令还提供了对同一变量重新定义不同尺寸属性…
5.3.3  库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复显示该整数: TITLE Library Test #1: Integer I/O (TestLib1.asm) ;Test the Clrscr,Crlf,DumpMem,ReadInt, ;SetTextColor,WaiMsg,WriteBin,WriteHex, ;and WriteStri…
3.4  定义数据 3.4.1  内部数据类型 MASM定义了多种内部数据类型,每种数据类型都描述了该模型的变量和表达式的取值集合.数据类型的基本特征是以数据位的数目量的大小:8,16,32,,48,64,80位.其他特征(如有符号.指针.浮点等)主要是为了方便程序员记忆变量中存储的数据的类型.例如,声明为DOWRD变量逻辑上存储的是一个32位整数.一个32位的浮点数或一个32位的指针.MASM汇编器默认情况下是大小写不敏感的,因此伪指令如DWORD可写成dword,Dword.dWord等大小…
6.6  应用:有限状态机 这个东西说了半天,感觉就是把逻辑弄得跟有向图一样,没看出来什么高端的东西,下面就整理下书上说的概念: 有限状态机(FSM,Finite-State Machine)是依据输入改变状态机器或程序.使用图来表示一个有限状态机是非常简单的,图种方块(或原)称为节点,节点之间带箭头的线称为边(edge)或弧(arc). 6.6.1  输入字符串的验证 读取输入流程的程序通常必须执行一定的错误检查步骤以验证输入.比如我们定义如下几条规则: 1.字符串必须以字母x开始,以字母z结…
条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1  简介 本章,读者将看到高级条件分支如何翻译成底层的实现代码. 处理硬件设备的程序必须能够操控数字中的单个数据位,应该能够测试清楚和设置数据位.数据加密和压缩也依赖于位操作. 本章试图解答如下基本问题: 1.如何使用1章中介绍的布尔运算符(AND,OR和NOT)? 2.在汇编语言中如何写一条IF语句? 3.编译器是如何将嵌套的IF语句翻译成机器语言的? 4…
3.2  例子:整数相加减 现在来看一个进行整数加减操作的汇编语言小程序.寄存器用于存放中间数据,我们调用一个库函数在屏幕上显示寄存器的内容.下面是程序的源码: TITLE Add and Subtract (AddSub.asm) ;This program adds and subtracts 32-bit integers. INCLUDE Irvine32.inc .code main PROC mov eax,10000h ;EAX = 10000h add eax,40000h ;E…
汇编语言基础 3.1  汇编语言的基本元素 有人说汇编难,有人说汇编简单,我个人不做评价,下面是一个简单的实例(部分代码): main PROC mov  eax,5  ;5送EAX寄存器 add  eax,6   ;EAX寄存器加6 call  WriteInt ;显示EAX中的值 exit main ENDP 这里通过调用 writeInt 库例程使情况稍微简化了一些,WriteInt本身也包含了相当数量的代码.通常来说,如果你乐于编程写实际上并不做什么的的小程序的话,汇编语言并不难学(额.…