汇编语言(MASM)
文章平均质量分 76
qdujunjie
这个作者很懒,什么都没留下…
展开
-
汇编语言数组求和代码分析
是这么一段代码,来自于《Intel汇编语言程序设计》 ;----------------------------------------------------------------------------ArraySum PROC;; Calculates the sum of an array of 32-bit integers.; Receives :原创 2009-10-14 08:56:00 · 3168 阅读 · 0 评论 -
汇编语言16位随机整数填充数组代码分析(7)
来自于《Intel汇编语言》(第四版)第八章的一段程序。程序非常简单,以下为代码: .datacount = 100array WORD count DUP(?).codepush OFFSET arraypush COUNTcall ArrayFill ArrayFill PROC push ebp原创 2009-10-21 10:50:00 · 1548 阅读 · 0 评论 -
汇编语言实现递归阶乘算法代码分析(8)
来自于《Intel汇编语言程序设计》(第四版)第八章的代码,但是我总是感觉有错误,红色代码部分从逻辑上看永远不会被执行到,以下为源代码: 【注:因为使用的是32位寄存器,因此可以容纳的最大阶乘是12!(479001600)】 TITLE Calculating a Factorial ( Fact.asm ) INC原创 2009-10-21 10:50:00 · 3089 阅读 · 0 评论 -
汇编语言二分查找排序代码分析(13)
来自于《Intel汇编语言程序设计》(第四版)第九章。 我们知道二分查找排序是每次比较之后都会将查找范围减半的算法,其算法时间复杂度是O(logN),查找40亿的数据时,其时间也不过30秒左右,非常高效,不过其需要的前提是一个已经按升序或降序排序完成的数据集合。 下面看一下原书中用C++实现的适用于有符号整数的二分查找函数: int BinSearch( int value原创 2009-10-21 10:53:00 · 2770 阅读 · 0 评论 -
汇编语言醉汉走路代码分析(15)
来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。 所谓醉汉走路,即在一个XY坐标的二维地图中,模拟一个醉汉走路的轨迹(原书中说的是一个喝醉了酒还未清醒的教授)。此处仍然用到了结构和宏,来看一下原书代码: TITLE Drunkards Walk (Walk.asm) INCLUDE Irvine原创 2009-10-22 08:31:00 · 2200 阅读 · 0 评论 -
汇编语言循环遍历链表代码分析(16)
来自于《Intel汇编语言程序设计》(第四版)第10章-----结构和宏。 首先,链表大家都不陌生,每个节点包含了一个data和一个link,其中Link指向了下一个节点的开始地址。最后一个节点的link保存的是一个空指针(NULL)。 另外本章是关于宏的,宏在汇编中的角色是非常重要的。不过以下的程序只是一个循环遍历链表的程序: TITLE Creating a原创 2009-10-23 11:53:00 · 2352 阅读 · 1 评论 -
汇编语言32位控制台读取用户输入字符程序代码分析(17)
来自于《Intel汇编语言程序设计》(第四版)第11章---------32位windows编程。 所谓控制台,就是我们平常在使用XP系统时,在运行框输入CMD之后出现的那个黑色画面,他看起来与DOS系统很相似,但是两者却完全不同。32位控制台程序运行在保护模式下,而DOS却运行在实模式下。另外两者使用的函数库也完全不同,Win32控制台程序使用的就是windows下的那些A原创 2009-10-23 11:54:00 · 3295 阅读 · 0 评论 -
汇编语言写文件读文件代码分析(18)
内容来自于《Intel汇编语言程序设计》(第四版)第11章--------32位Windows编程。 我们的整个顺序应该是,首先将内容写入文件(如果没有文件,将会创建新文件),然后将内容从文件中读出。 首先来看一下将数据写入文件: TITLE Using WriteFile ( WriteFile.asm ) INCLUDE原创 2009-10-23 11:54:00 · 4167 阅读 · 0 评论 -
汇编语言计时器代码分析(19)
来自于《Intel汇编语言程序设计》(第四版)第11章----------32位windows编程。 程序内容为,每经过100毫秒就在屏幕上显示一个点,当大于5000毫秒时退出。 代码如下: TITLE Calculate Elapsed Time ( TimingLoop.asm ) ; This program uses原创 2009-10-23 11:55:00 · 1798 阅读 · 0 评论 -
汇编语言GetDateTime代码分析(20)
本文代码来自于《Intel汇编语言程序设计》(第四版)第11章---------32位windows编程。 GetDateTime其实是作者Irvine32库文件中的一个函数,它用来返回一个64位的整数,这个数值是自1601年1月1日开始的以100纳秒为单位的计数值。重要的是微软使用这个数值来作为文件的日期和时间。WIN32 SDK文档中给出的获得系统日期和时间的步骤如下: 1.调原创 2009-10-23 11:56:00 · 1255 阅读 · 0 评论 -
汇编语言求字符串长度代码分析(10)
来自于《Intel汇编语言程序设计》(第四版)第八章,该过程返回字符串长度到EAX寄存器中,调用该过程时需要传递字符串的偏移,如: INVOKE Str_length,ADDR myString Str_length过程代码如下: Str_length PROC USES edi, pString : PTR BYTE ; point原创 2009-10-21 10:52:00 · 4449 阅读 · 0 评论 -
汇编语言数组乘法代码分析(9)
来自于《Intel汇编语言程序设计》(第四版)第八章,主要用到以下两条指令: STOSB,STOSW和STOSD指令将AL/AX/EAX的内容存储在EDI指向的内存单元中,同时EDI的值将根据方向标志的值增加或减少。 LODSB,LODSW和LODSD指令从ESI指向的内存位置向AL/AX/EAX中装入一个值,同时ESI的值根据方向标志值增加或减少。 以下为程序源代码,使用原创 2009-10-21 10:51:00 · 1607 阅读 · 0 评论 -
汇编语言表格驱动分支选择代码分析(4)
来自于《Intel汇编语言程序设计》(第四版)第六章。 先引用原书的话来解释一下表格驱动分支选择: 表格驱动分支选择是使用表格查找法来替代多路选择结构的一种方法。为了使用该方法,我们必须创建一个包含查找值和过程偏移的表格,程序使用循环来搜索该表格,当需要大量的比较时,这种方法是工作的最好的。 下面是书中的例子程序,用户从键盘输入一个字符,程序使用一个循环将该字符同表中原创 2009-10-21 10:48:00 · 903 阅读 · 0 评论 -
汇编语言冒泡排序算法代码分析(12)
来自于《Intel汇编语言程序设计》(第四版)第九章。 以下为冒泡排序的原文代码: ;---------------------------------------------------------BubbleSort PROC USES eax ecx esi, pArray:PTR DWORD, ; poi原创 2009-10-21 10:53:00 · 6723 阅读 · 0 评论 -
汇编语言显示系统时间代码分析(14)
代码来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。 如果要显示系统时间,MS-Windows为我们提供了两个函数,用来设置光标位置的控制台函数和现实系统时间的函数。使用这两个函数之前,需要首先定义两个预定义的结构: COORD STRUCT X WORD ? Y WORD ?COORD ENDS原创 2009-10-22 10:48:00 · 2929 阅读 · 0 评论 -
汇编语言数组求和代码分析(1)
是这么一段代码,来自于《Intel汇编语言程序设计》(第四版) ;----------------------------------------------------------------------------ArraySum PROC;; Calculates the sum of an array of 32-bit integers.; Receiv原创 2009-10-21 10:45:00 · 10451 阅读 · 0 评论 -
汇编语言数组中查找正数代码分析(3)
《Intel汇编语言程序设计》(第四版)第六章中的代码,如下: .dataarray SWORD -3 , -6 , -1 , -10 , 10 , 30 , 40 , 4sentinel SWORD 0.code mov esi , OFFSET array mov ecx , LENGTHOF array n原创 2009-10-21 10:47:00 · 1997 阅读 · 0 评论 -
汇编语言AAA指令多字节加法代码分析(5)
来自于《Intel汇编语言程序设计》(第五版)第七章的代码,使用AAA( ASCII adjust after addition )指令来调整ASCII相加之后的结果。源代码如下: TITLE ASCII Addition (ASCII_add.asm) ; Perform ASC原创 2009-10-21 10:49:00 · 5463 阅读 · 0 评论 -
汇编语言值传递和引用传递代码分析(6)
来自于《Intel汇编语言程序设计》(第四版)的第八章。 让我们先来看看值传递,值传递相对简单,看以下代码: .datamyData WORD 1000h ; this never changes.codemain PROC INVOKE Sub1, myData exitmain ENDP原创 2009-10-21 10:49:00 · 966 阅读 · 0 评论 -
汇编语言裁剪字符串代码分析(11)?
来自于《Intel汇编语言程序设计》(第四版)第八章。 裁剪字符串过程从以空字符串结尾的字符串中删除特定字符之后的所有字符。 需要的知识: 1.重复前缀。字符串操作指令本身每次只处理一个内存值。但如果增加一个重复前缀的话,该指令就会使用ECX作为计数器进行重复。几个重复前缀如下: REP 当ECX>0时重复原创 2009-10-21 10:52:00 · 1073 阅读 · 0 评论 -
汇编语言字符串加密代码分析(2)
来自于《Intel汇编语言程序设计》(第四版)第六章。 这个例子利用了XOR(异或)指令的一个特性(即对操作数两次异或之后操作效果抵消),对字符串进行加密。 书中代码: TITLE Encryption Program (Encrypt.asm) INCLUDE Irvine32.incKEY = 239原创 2009-10-21 10:46:00 · 2657 阅读 · 0 评论 -
汇编语言秒表程序代码分析(21)
本文代码来自于《Intel汇编语言程序设计》 (第四版)第11章-----------32位windows编程。 秒表程序使用了一个TimeStart来启动秒表,还有一个TimeStop返回自TimeStart启动以来的毫秒数。 程序本身其实很简单,以下为代码: TITLE Calculate Elapsed Time ; Demonstrate a s原创 2009-10-23 11:57:00 · 2142 阅读 · 0 评论