中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » 网络日志(Blog) » 【Redtek】 个人网志(学习笔记)
« [1] [2] [3] [4] [5] [6] [7] [8] [9] »
作者:
标题: 【Redtek】 个人网志(学习笔记) 上一主题 | 下一主题
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
来自 甘肃.临泽
状态 离线
『第 8 楼』:  

呵呵~sina 上的图片挺好的

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
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] [8] [9] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: