|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『楼 主』:
【Redtek】 个人网志(学习笔记)
学习笔记目录:
==============================================
【80x86 汇编语言学习笔记】 …………………………………………… # 2
编译的例子 …………………………… # 3
可见寄存器组 ………………………… # 4
立即寻址方式 ………………………… # 7
寄存器寻址方式 ……………………… # 12
二进制和IP地址的关系 …………… # 18
位和地址线究其穷破 ………………… # 19
寻址方式与指令系统 ………………… # 20
代码练习 - ☺ ………………………… # 21
- 256个ASCII码 ………… # 22
汇编IDE工具 ……………………… # 32
汇编代码与Debug代码对比 ………… # 33
可执行文件带入参数分析 …………… # 38
汇编单行多种颜色写屏 ……………… # 45
调汇编代码与中文环境 ……………… # 46
汇编代码学习总结 …………………… # 47
汇编语言基础知识测试 ……………… # 48
寄存器汇编指令练习 ………………… # 49
程序段中指令执行练习 ……………… # 50
物理地址运算 ………………………… # 51
寄存器与内存访问 …………………… # 52
段和偏移量的变换 …………………… # 53
栈 ……………………………………… # 54
第一个可执行程序 …………………… # 56
汇编指令描述方式 …………………… # 57
循环指令与编译器 …………………… # 60
汇编指令区别 ………………………… # 63
安全内存空间 ………………………… # 64
段前缀的使用 ………………………… # 65
Debug小技巧 ………………………… # 66
代码复制自身 ………………………… # 67
多个段的程序 ………………………… # 68
………………………… # 72
编写调试跟踪多段程序 ……………… # 73
灵活定位内存地址 …………………… # 74
数据处理 ……………………………… # 75
转移指令与子程序 …………………… # 76
……………………………… # 77
解决除法溢出问题 …………………… # 78
子程序与数值显示 …………………… # 81
结构化数据访问 ……………………… # 84
标置寄存器 …………………………… # 88
任意大数字加减 ……………………… # 89
比较指令 ……………………………… # 90
计算器使用小窍门 …………………… # 91
内部中断 ……………………………… # 92
int指令 …………………………… # 93
对int、iret和栈的深入理解 ……… # 94
BIOS和DOS所提供的中断例程 ……… # 95
端口 …………………………………… # 99
逻辑位移指令 ………………………… # 102
外中断与键盘 ………………………… # 105
直接定址表 …………………………… # 106
bios键盘输入与磁盘读写 ……… # 107
exe文件结构 ……………………… # 108
磁盘操作 ……………………………… # 111
管道操作 ……………………………… # 112
字符串操作 …………………………… # 113
文件操作 ……………………………… # 117
【MS-DOS操作系统学习笔记】 …………………………………………… # 第8页
引导扇区 ……………………………… # 115
【Windows32位汇编语言学习笔记】 …………………………………… # 第8页
前缀详细解释 ………………………… # 114
建立编程环境 ………………………… # 118
【80x86 汇编语言学习笔记】 —— 一句话学习总结
) 找一本认为最难的书学习,更是为了总结最适合自己的学习方法。
只有读那些看上去 “最难的” 书,才最能挖掘更适合自己的有效学习规律与方法。
) 读看一本很难读的书,才最容易看到自己思想上与能力上的弱点。
) 学与悟的重点放在书上所讲的原理,就等于拥有了创造一万种方法的灵感与能力。
) 无论是解读汇编语言还是解读任何一本书,其实都是在悟读着自己。
) 某个阶段,读到认为掌握了很多,那就是并没有学透多少;读到好象什么都不会了,那是已经读透了部分,要再继续。
) 读适合启发自己思维方式的书,读这样的书才能加倍成长。
) 基础知识就是巨厦的地基,它的深浅有一半注定了最终的计算机水平,它的另一半是对数学的理解。
) 跟着书读是白读。先拉后跟的读是真读。用自己的思考方式一边超前预想一边读,会把见解与书的思想碰撞,这才是读。
) 学习某种编程语言的过程,如果发现只有死记硬背才能继续学下去,那么这个时候就意味着基础没有掌握好,应去补基础。
) 把需要死记硬背才能向下学习的过程,分解成不需要记忆照样可以学下去的过程,那就是掌握它的原理深度来降低记忆强度。
) 读看上去最难的书,总结出适合自己的 “记忆遗忘曲线” 来达到容识更多的知识。
) 世界上少有最难的事。最难读透的书是自己,最难驾御的人是自己,最难逾越的障碍还是自己。
个人网志:
==============================================
【Redtek 学习网志】 http://www.cn-dos.net/forum/viewthread.php?tid=25504
【Redtek 普通网志】 http://blog.sina.com.cn/m/redtek
[ Last edited by redtek on 2007-1-29 at 01:46 PM ]
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 00:48 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
2 楼』:
【80x86汇编语言学习笔记】
) 初学汇编,遇破书一本《Intel 80X86/Pentium 汇编语言程序设计(第二版) 》30两银子 - ISBN 7-81045-770-5 。
奉如无尚珍宝,然作者 “瞎编” ,无奈之下只得瞎学:)
) 初学汇编,今日开始。拿起书狂翻,希望遇到一个 “Hello World!” ,一个没有:)
) 按书顺序,但凡初学者希望遇到一个先能编译,哪怕看一眼运行一下的极短的例子,哪怕在观感上可以“明白”一下,结果没有。
前96页均为基础知识与寄存器、指令讲解。
特点:如果你看完多数指令和前100页的知识,也不会编译更不会编。因为书是按照编书次序来编,不是按照帮助你学习的次序来写的。
代码全是片断,如果没有老师带,完全一个人自学,则那些片断你根本不会编译,就是编译,书上的例子编译器与通不过(现在看来)。
也就是说,如果前96页能全看完,那只不过是超旨记忆,你根本没有机会上机试验,那些全是理论。且和Debug中命令方式不同。
) 总结: 注定了看这本书不人性化作者编的这本书,要走极多的弯路。
) 谁说过:“每年要看一本最难的书……”,于是
俺坚决:今年看一本最难的书 —— 汇编语言! 明年 ——— 易经,学着画一堆小横线~:)
◇ 2006-12-09 12:49:57.17
为这本书平反:初学汇编,当学习了一些汇编基础知识以后,再看这本书就可以看懂了。
所以,这本书现在看来不是不好,而是适合有汇编基础的人学习或是学校有这门课程并做参数。
这本书内容较全面,当看完了300多页的汇编基础知识后,发现这本书现在适合读了:(
◇ 22:36 2007-1-17
[ Last edited by redtek on 2007-1-17 at 10:37 PM ]
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 01:48 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
3 楼』:
【80x86汇编语言学习笔记】
P12页: 用 IBM PC 汇编语言实现 123+456
书上举例
CODE SEGMENT
ORG 100H
ASSUME CS:CODE,DS:CODE
MAIN PROC NEAR
MOV AX,A
ADD AX,B
MOV SUM,AX
RET
A DW 123
B DW 456
SUM DW ?
MAIN ENDP
CODE ENDS
END MAIN ) 尽管不懂,没关系先输出试试:)
) 怎么编译呀?要是按书上顺序看,早TMD放弃了!
翻开书第 P98页《汇编语言上机过程》,照上面例子编译。
用什么编译?用 MASM5.0编译,编译器在哪儿?在网上找吧……温无边际的找……
运气好的话一会儿就找到了,运行不好的话编译器有 16位纯DOS上用的,用Win32的,一遍遍试吧,这本书上没有相关内容:)
我就属于那种运气不好的人,嘿嘿……反复换了4、5个编译不同版本的编译器,自学的步步都是错误:)
自学也难在这里,深深体会到~:)
没关系~:)
现在可以编译了~:P
Invalid keyboard code specified
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Source filename [.ASM]: myasm
Object filename [myasm.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
50980 + 450380 Bytes symbol space free
0 Warning Errors
0 Severe Errors 上面编译完全正确~:)
会看到第一行有一句提示:“Invalid keyboard code specified” ,起初不懂:)
后来反复发现只要切换至代码页437(美国),只要不是936(中国)就可以了,
因为这个编译器是纯DOS上使用的,而我现在 WINDOWS CMD SHELL中编译的。
后来查询Windows自带的CHM帮助,发现如果希望兼容一些平时不能运行的DOS程序,则一个 Forcedos 命令可以支持~:)
如:
[cocd]
C:\Masm50>forcedos /?
FORCEDOS [/D directory] filename [parameters]
/D directory Specifies the current directory for
the specified program to use.
filename Specifies the program to start.
parameters Specifies parameters to pass to the program.
[/code]
这样,它就不会再提示那行信息了~:)
编译完成:)
Directory of C:\Masm50
2006-12-09 13:39 392 myasm.asm
2006-12-09 14:13 100 MYASM.OBJ 生成 .Obj 文件了,还要再链接成 EXE 文件:)
C:\Masm50>link /?
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
LINK : fatal error L1002: ? : unrecognized option name
C:\Masm50>link myasm.obj
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Run File [MYASM.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment 链接完成了,Link的使用也在书上P99页~:)
2006-12-09 13:39 392 myasm.asm
2006-12-09 14:18 785 MYASM.EXE
2006-12-09 14:13 100 MYASM.OBJ 这个 myasm.exe 文件生成了~:D
C:\Masm50>forcedos /d %cd% myasm.exe 要这样用Windows兼容的方式运行它,否则系统就提示关于崩溃的内容……
但是,运行完以后屏幕并没有显示任何字符:(
书上的P12页(这可是入门开始啊),上面说了:
程序的运行结果是:
12F8:010F 43 02
嘿嘿……不能失望,这是在调试状态下你能看到的运行结果,哈哈……
这不是单独运行你所能看到的,这书的作者就是这样的龌龊(这词终于用上了~:K)
但是,如果你要深究其内容与结果怎么办?
那就要用Debug了,Debug在这本书上有一个命令帮助索引(和Debug自带的?帮助一样)。
也就是说,初学汇编的人看这个例子除了一饱眼福之外就是头晕了~:)
我会认为这作者的水平很高,够机器!
◇ 2006-12-09 14:26:38.21
写这样的汇编代码,用记事本或Edit写吗?
有一个叫做《轻松汇编》的编辑工具,语法加亮,自动对齐语句,自动错误检查,自动编译……
使用它来写代码可以少走一些弯路~:)
而且,即然是汇编语言,所以吸烟的时候也应该用火柴点烟才有味道~:D
◇ 2006-12-09 14:54:22.88
[ Last edited by redtek on 2006-12-9 at 05:59 PM ]
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 03:24 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
4 楼』:
【80x86汇编语言学习笔记】
附件
1: pic_7.jpg (2006-12-10 04:08, 29.3 K, 下载附件所需积分 1 点
,下载次数: 4)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 04:08 |
|
|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
5 楼』:
偶来捧场^_^
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-12-10 05:57 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
6 楼』:
多谢ccwan鼓励~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 07:00 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
7 楼』:
【80x86汇编语言学习笔记】
(书) P23页 与数据有关的寻址方式:
立即寻址方式
MOV AL,6 ; 结果 (AL)=6, 6是立即数
MOV AX,1234H ; 结果(AL)=1234H ) 书上关于立即寻址的方式只有上面这两句指令,不编译一个小代码根本不能直观的理解那些寄存器……
如果死记硬背,这需要一直抽象的背到第79页才能知道EXE文件的例子。
且书上没有完整可供编译的代码例子试验,也就是说很有可能当你看完100页的编程的教程,一个程序还未真正编过,这不是在学习。
如果按照这书的顺序,这简直是在要求你类似于学批处理,从低级看到高级例子,但从来不编写一句代码,想必这种学习是浪费生命。
所以,只能将上面代码尽可能转成Debug调试器里能“看”到的效果,虽然编不出来,但至少能理解。
下面是使用 Debug 调试器测试书上(上面)两句代码的过程,彩色数字是观察到的寄存器直观的变化。
Quote: | -R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13BF ES=13BF SS=13BF CS=13BF IP=0100 NV UP EI PL NZ NA PO NC
13BF:0100 0000 ADD [BX+SI],AL DS:0000=CD
-A
13BF:0100 MOV AL,6
13BF:0102 MOV AX,1234
13BF:0105
-T=100
AX=0006 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13BF ES=13BF SS=13BF CS=13BF IP=0102 NV UP EI PL NZ NA PO NC
13BF:0102 B83412 MOV AX,1234
-T
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13BF ES=13BF SS=13BF CS=13BF IP=0105 NV UP EI PL NZ NA PO NC
13BF:0105 0000 ADD [BX+SI],AL DS:0000=CD |
|
Debug在这种破不得已的状态下真是太有用了~:)
[ Last edited by redtek on 2006-12-9 at 08:27 PM ]
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 07:50 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
|
2006-12-10 07:51 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
9 楼』:
平时喜欢摄影,没事儿就乱拍~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 07:54 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
10 楼』:
哈哈,偶也来捧场啦~
想不到 Redtek 兄这么快就开网志了~SINA上面还有几个批处理的实例供偶学习学习的~~
感觉这汇编挺难的,没信心了…… o_O
|
|
2006-12-10 08:36 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
11 楼』:
哈哈……
Sina的网志写了有一段时间了,多半都是摄影内容~:)
俺觉得这里放代码学习内容为主的网志最合适不过:D
汇编太难学(感觉按书上次序学简直需要极高的耐心),而且全是抽象的一两行的汇编片断(这片断很多都不能在Debug里直接编)。
编译器要求的代码表示和Debug里的直译表示不一样,书上又只讲理论,不讲都是干什么用的,更抽象了……
不过,难就难吧,哈哈……
一天啃一两句,早晚能啃下来~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 08:46 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
12 楼』:
【80x86汇编语言学习笔记】
寄存器寻址方式
(书) P24页
MOV BX,AX ; 执行结果(BX)=(AX) 访问普通变量时,默认是DS段寄存器,但也可以显式的指定为ES、SS、CS、GS、FS。
可以使用段超越前缀显式地指定段寄存器。
debug学习过程:
Quote: | -A
13BF:0100 MOV AX,5678
13BF:0103 MOV BX,AX
13BF:0105
-T=100
AX=5678 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13BF ES=13BF SS=13BF CS=13BF IP=0103 NV UP EI PL NZ NA PO NC
13BF:0103 89C3 MOV BX,AX
-T
AX=5678 BX=5678 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13BF ES=13BF SS=13BF CS=13BF IP=0105 NV UP EI PL NZ NA PO NC |
|
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 09:46 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
13 楼』:
Redtek兄真是性情中人, 网志搞得有声有吗. 呵呵~ 那个烤黄粉虫的好, 有营养...
自学的苦与乐只有自己才能品尝到. 加油~~~!
|
业精于勤而荒于嬉,形成于思而毁于随。 |
|
2006-12-10 11:14 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
14 楼』:
多谢pengfei兄鼓励~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-12-10 12:10 |
|
|
electronixtar
铂金会员
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
15 楼』:
看到牛XXXXX的汇编了,不懂。顶一个
|
C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-12-11 01:56 |
|
|