`
qdujunjie
  • 浏览: 110392 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论
文章列表
来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。 所谓醉汉走路,即在一个XY坐标的二维地图中,模拟一个醉汉走路的轨迹(原书中说的是一个喝醉了酒还未清醒的教授)。此处仍然用到了结构和宏,来看一下原 ...
  代码来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。   如果要显示系统时间,MS-Windows为我们提供了两个函数,用来设置光标位置的控制台函数和现实系统时间的函数。使用这两个函数之前,需要首先定义两个预定义的结构:     COORD STRUCT            X WORD ?            Y WORD ? COORD ENDS   SYSTEMTIME STRUCT        wYear WORD ?        wMonth WORD ?        wDayOfWeek WORD ?        ...
  来自于《Intel汇编语言程序设计》(第四版)第九章。   我们知道二分查找排序是每次比较之后都会将查找范围减半的算法,其算法时间复杂度是O(logN),查找40亿的数据时,其时间也不过30秒左右,非常高效,不过其需要的 ...
    来自于《Intel汇编语言程序设计》(第四版)第九章。     以下为冒泡排序的原文代码:     ;--------------------------------------------------------- BubbleSort PROC USES eax ecx esi,         pArray:PTR DWORD,                   ...
      来自于《Intel汇编语言程序设计》(第四版)第八章。     裁剪字符串过程从以空字符串结尾的字符串中删除特定字符之后的所有字符。   需要的知识:   1. 重复前缀。 字符串操作指令本身每次只处理一个内存值。但如果增加一个重复前缀的话,该指令就会使用ECX作为计数器进行重复。 几个重复前缀如下:   REP                      当ECX>0时重复 REPZ,REPE           当零标志被设置并且ECX>0时重复 REPNZ,REPNE       当零标志被清除并且ECX>0时重复   2. ...
    来自于《Intel汇编语言程序设计》(第四版)第八章,该过程返回字符串长度到EAX寄存器中,调用该过程时需要传递字符串的偏移,如:   INVOKE Str_length,ADDR myString   Str_length过程代码如下:   Str_length PROC USES edi,        pString : PTR BYTE             ; pointer to string        mov edi,pString        mov eax,0                          ; character cou ...
  来自于《Intel汇编语言程序设计》(第四版)第八章,主要用到以下两条指令:   STOSB,STOSW和STOSD指令将AL/AX/EAX的内容存储在EDI指向的内存单元中,同时EDI的值将根据方向标志的值增加或减少。   LODSB,LODSW和LODSD指令从ESI指向的内存位置向AL/AX/EAX中装入一个值,同时ESI的值根据方向标志值增加或减少。   以下为程序源代码,使用了LODSD和STOSD:   TITLE Multiply an Array        (Mult.asm)   ; This program multiplies each ele ...
    来自于《Intel汇编语言程序设计》(第四版)第八章的代码,但是我总是感觉有错误,红色代码部分从逻辑上看永远不会被执行到,以下为源代码:     【注:因为使用的是32位寄存器,因此可以容纳的最大阶乘是12!(479001600)】     TITLE Calculating a Factorial                        ( Fact.asm )   INCLUDE Irvine32.inc .code main PROC         push 12                   ; calc 12!         call ...
    215页:   mov BYTE PTR [ebp-20],'Y'       ; name[0]   数组首地址是EBP-28,那么那么name[0]怎么会是ebp-20呢,是否错误?应为:   mov BYTE PTR [ebp-9],'Y'       ; name[0]
    来自于《Intel汇编语言》(第四版)第八章的一段程序。程序非常简单,以下为代码:     .data count = 100 array WORD count DUP(?) .code push OFFSET array push COUNT call ArrayFill     ArrayFill PROC              push ebp              mov ebp,esp              pushad              mov esi,[ebp+12]             ; offset of a ...
    来自于《Intel汇编语言程序设计》(第四版)的第八章。   让我们先来看看值传递,值传递相对简单,看以下代码:     .data myData WORD 1000h            ; this never changes .code main PROC          INVOKE Sub1, myData          exit main ENDP   Sub1 PROC someData:WORD          mov someData,0          ret Sub1 ENDP     程序使用 INVOKE 指 ...
  来自于《Intel汇编语言程序设计》(第五版)第七章的代码,使用AAA( ASCII adjust after addition )指令来调整ASCII相加之后的结果。源代码如下:   TITLE ASCII Addition                                                    (ASCII_add.asm)   ; Perform ASCII arithmetic on strings having ; an implied fixed decimal point   INCLUDE Irvine32.inc   DEC ...
  来自于《Intel汇编语言程序设计》(第四版)第六章。     先引用原书的话来解释一下表格驱动分支选择:   表格驱动分支选择是使用表格查找法来替代多路选择结构的一种方法。为了使用该方法,我们必须创建一个包含查找值和过程偏移的表格,程序使用循环来搜索该表格,当需要大量的比较时,这种方法是工作的最好的。   下面是书中的例子程序,用户从键盘输入一个字符,程序使用一个循环将该字符同表中的每个子项比较,如果一个匹配项被发现,那么紧跟其后存储的过程地址将被调用。每个过程使用EDX来装入不同字符串的偏移,然后在循环中显示该字符串。   看概念总是感觉比较复杂,其实非常简单,看一下 ...
  《Intel汇编语言程序设计》(第四版)第六章中的代码,如下:   .data array SWORD -3 , -6 , -1 ,  -10 , 10 , 30 , 40 , 4 sentinel SWORD 0 .code          mov esi , OFFSET array          mov ecx , LENGTHOF array          next:       ...
  <FROM http://congfeng02.iteye.com/blog/435176>   1、人不犯我,我不犯人;人若犯我,礼让三分;人再犯我,我还一针;人还犯我,斩草除根。 2、我允许你走进我的世界,但不许你在我的世界里走来走去。 3、明骚易躲,暗贱难防 ...
Global site tag (gtag.js) - Google Analytics