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…
6.3  条件跳转 6.3.1  条件结构 在IA-32指令集中没有高级的逻辑结构,但无论多么复杂的结构,都可以使用比较和跳转指令组合来实现.执行条件语句包括两个步骤:首先,使用CMP,AND,SUB之类的指令修改CPU标志六七次,使用条件跳转指令测试并导致向新地址的分支转移. 例子1:使用CMP指令比较AL和0,如果CPU指令设置了零标志,那么JZ(为0则跳转)指令就跳转到标号L1处: cmp al ,0 jz L1 . . L1: 6.3.2  条件跳转(Jcond)指令 条件跳转指令在标志…
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…
4.3  和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操作符返回一个变量相对于其所在段开始的偏移. PTR 操作符允许重载变量的默认尺寸. TYPE操作符返回数组中每个元素的大小(以字节计算). LENGTHOF操作符返回数组内元素的数目. SIZEOF操作符返回数组初始化时占用的字节数. 除此之外,LABEL伪指令还提供了对同一变量重新定义不同尺寸属性…
过程 5.1  简介 需要阅读本章的理由可能很多: 1.读者可能想要学习如何在汇编语言中进行输入输出. 2.应该了解运行时栈(runtime stack),运行时栈是子过程(函数)调用以及从子过程返回的基本机制. 3.通过本章,将学到如何把大程序划分为模块化的子过程. 4.本章讲述流程图,流程图是描述程序逻辑的图形工具. 5.2  外部库链接 链接库Irvine32.lib用于32位保护模式下编写的程序,其中进行输入输出的过程调用了MS-Windows API.库Irvine16.lib用于16…
3.4  定义数据 3.4.1  内部数据类型 MASM定义了多种内部数据类型,每种数据类型都描述了该模型的变量和表达式的取值集合.数据类型的基本特征是以数据位的数目量的大小:8,16,32,,48,64,80位.其他特征(如有符号.指针.浮点等)主要是为了方便程序员记忆变量中存储的数据的类型.例如,声明为DOWRD变量逻辑上存储的是一个32位整数.一个32位的浮点数或一个32位的指针.MASM汇编器默认情况下是大小写不敏感的,因此伪指令如DWORD可写成dword,Dword.dWord等大小…
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本身也包含了相当数量的代码.通常来说,如果你乐于编程写实际上并不做什么的的小程序的话,汇编语言并不难学(额.…
第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用Intel或AMD的32位/64位处理器运行本所有例子.     汇编语言是有所程序设计语言中最古老的语言,它与计算机的机器语言最为接近,通过汇编语言可以直接访问计算机的硬件,所以要求读者深入了解计算机体系结构和操作系统的大量细节. 1.1.1  一些精彩的提问 (没用的地方我都直接简化或者删除了啊!…