- 浏览: 110392 次
- 性别:
- 来自: Mars
最新评论
-
a376730551:
红色部分表示 把进位值传递给bh
汇编语言AAA指令多字节加法代码分析(5) -
madbluesky:
死了,只剩下赞扬了...看来不只是中国,全世界都是同一套啊.. ...
麦克杰克逊--------世界上最傻的明星 -
sunloveny:
敬你!
麦克杰克逊--------世界上最傻的明星 -
jiorry:
感动
MJ 一路走好
麦克杰克逊--------世界上最傻的明星 -
javaboy2006:
MJ单纯到不懂得保护自己。永远怀念。
麦克杰克逊--------世界上最傻的明星
文章列表
汇编语言醉汉走路代码分析(15)
- 博客分类:
- 汇编语言
来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。
所谓醉汉走路,即在一个XY坐标的二维地图中,模拟一个醉汉走路的轨迹(原书中说的是一个喝醉了酒还未清醒的教授)。此处仍然用到了结构和宏,来看一下原 ...
- 2009-10-22 10:50
- 浏览 1357
- 评论(0)
代码来自于《Intel汇编语言程序设计》(第四版)第10章----结构和宏。
如果要显示系统时间,MS-Windows为我们提供了两个函数,用来设置光标位置的控制台函数和现实系统时间的函数。使用这两个函数之前,需要首先定义两个预定义的结构:
COORD STRUCT
X WORD ?
Y WORD ?
COORD ENDS
SYSTEMTIME STRUCT
wYear WORD ?
wMonth WORD ?
wDayOfWeek WORD ?
...
- 2009-10-21 15:18
- 浏览 2188
- 评论(0)
来自于《Intel汇编语言程序设计》(第四版)第九章。
我们知道二分查找排序是每次比较之后都会将查找范围减半的算法,其算法时间复杂度是O(logN),查找40亿的数据时,其时间也不过30秒左右,非常高效,不过其需要的 ...
- 2009-10-21 09:52
- 浏览 1922
- 评论(0)
来自于《Intel汇编语言程序设计》(第四版)第九章。
以下为冒泡排序的原文代码:
;---------------------------------------------------------
BubbleSort PROC USES eax ecx esi,
pArray:PTR DWORD, ...
- 2009-10-20 16:52
- 浏览 4218
- 评论(0)
来自于《Intel汇编语言程序设计》(第四版)第八章。
裁剪字符串过程从以空字符串结尾的字符串中删除特定字符之后的所有字符。
需要的知识:
1.
重复前缀。
字符串操作指令本身每次只处理一个内存值。但如果增加一个重复前缀的话,该指令就会使用ECX作为计数器进行重复。
几个重复前缀如下:
REP 当ECX>0时重复
REPZ,REPE 当零标志被设置并且ECX>0时重复
REPNZ,REPNE 当零标志被清除并且ECX>0时重复
2. ...
- 2009-10-20 15:27
- 浏览 1363
- 评论(0)
汇编语言求字符串长度代码分析(10)
- 博客分类:
- 汇编语言
来自于《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 ...
- 2009-10-20 11:05
- 浏览 2228
- 评论(0)
汇编语言数组乘法代码分析(9)
- 博客分类:
- 汇编语言
来自于《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 ...
- 2009-10-20 10:07
- 浏览 1594
- 评论(0)
来自于《Intel汇编语言程序设计》(第四版)第八章的代码,但是我总是感觉有错误,红色代码部分从逻辑上看永远不会被执行到,以下为源代码:
【注:因为使用的是32位寄存器,因此可以容纳的最大阶乘是12!(479001600)】
TITLE Calculating a Factorial ( Fact.asm )
INCLUDE Irvine32.inc
.code
main PROC
push 12 ; calc 12!
call ...
《Intel汇编语言程序设计》第四版勘误
- 博客分类:
- 汇编语言
215页:
mov BYTE PTR [ebp-20],'Y' ; name[0]
数组首地址是EBP-28,那么那么name[0]怎么会是ebp-20呢,是否错误?应为:
mov BYTE PTR [ebp-9],'Y' ; name[0]
- 2009-10-19 16:14
- 浏览 1033
- 评论(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 ...
- 2009-10-19 14:55
- 浏览 1450
- 评论(0)
来自于《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 指 ...
- 2009-10-19 09:40
- 浏览 1225
- 评论(0)
来自于《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 ...
- 2009-10-18 10:44
- 浏览 4413
- 评论(1)
来自于《Intel汇编语言程序设计》(第四版)第六章。
先引用原书的话来解释一下表格驱动分支选择:
表格驱动分支选择是使用表格查找法来替代多路选择结构的一种方法。为了使用该方法,我们必须创建一个包含查找值和过程偏移的表格,程序使用循环来搜索该表格,当需要大量的比较时,这种方法是工作的最好的。
下面是书中的例子程序,用户从键盘输入一个字符,程序使用一个循环将该字符同表中的每个子项比较,如果一个匹配项被发现,那么紧跟其后存储的过程地址将被调用。每个过程使用EDX来装入不同字符串的偏移,然后在循环中显示该字符串。
看概念总是感觉比较复杂,其实非常简单,看一下 ...
- 2009-10-16 14:48
- 浏览 1492
- 评论(0)
汇编语言数组中查找正数代码分析(3)
- 博客分类:
- 汇编语言
《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:
...
- 2009-10-15 16:54
- 浏览 1350
- 评论(0)
<FROM http://congfeng02.iteye.com/blog/435176>
1、人不犯我,我不犯人;人若犯我,礼让三分;人再犯我,我还一针;人还犯我,斩草除根。
2、我允许你走进我的世界,但不许你在我的世界里走来走去。
3、明骚易躲,暗贱难防 ...
- 2009-10-15 11:13
- 浏览 727
- 评论(0)