| 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『楼 主』:
 【Redtek】 个人网志(学习笔记)
 
使用 LLM 解释/回答一下
  
 
 
 
 
 
 
 
学习笔记目录: 
============================================== 
 
 
 
【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汇编语言学习笔记】
 
使用 LLM 解释/回答一下
  
) 初学汇编,遇破书一本《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汇编语言学习笔记】
 
使用 LLM 解释/回答一下
  
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 : myasm 
Object filename : 
Source listing  : 
Cross-reference : 
 
  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 命令可以支持~:)
 
如:
 
C:\Masm50>forcedos /?
 
FORCEDOS  filename  
/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.
 
这样,它就不会再提示那行信息了~:)
 编译完成:)
 
 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 : 
List File : 
Libraries : 
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汇编语言学习笔记】
 
使用 LLM 解释/回答一下
  
 
 
    
 
  
附件
1:   pic_7.jpg (2006-12-10 04:08, 29.3 KiB, 下载附件所需积分 1 点
,下载次数: 4)
  
 
 
 
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-12-10 04:08 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
 | 
  2006-12-10 05:57 | 
  
 | 
 | 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
多谢ccwan鼓励~:) 
 
    
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-12-10 07:00 | 
  
 | 
 | 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 7 楼』:
 【80x86汇编语言学习笔记】
 
使用 LLM 解释/回答一下
  
(书) P23页 与数据有关的寻址方式: 
立即寻址方式
 
MOV  AL,6                          ; 结果 (AL)=6, 6是立即数 
MOV  AX,1234H                  ;  结果(AL)=1234H 
 
) 书上关于立即寻址的方式只有上面这两句指令,不编译一个小代码根本不能直观的理解那些寄存器……
 
  如果死记硬背,这需要一直抽象的背到第79页才能知道EXE文件的例子。 
  且书上没有完整可供编译的代码例子试验,也就是说很有可能当你看完100页的编程的教程,一个程序还未真正编过,这不是在学习。
   
  如果按照这书的顺序,这简直是在要求你类似于学批处理,从低级看到高级例子,但从来不编写一句代码,想必这种学习是浪费生命。
 
  所以,只能将上面代码尽可能转成Debug调试器里能“看”到的效果,虽然编不出来,但至少能理解。
 
  下面是使用 Debug 调试器测试书上(上面)两句代码的过程,彩色数字是观察到的寄存器直观的变化。
  
-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     ,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     ,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 楼』:
 
 
使用 LLM 解释/回答一下
  
平时喜欢摄影,没事儿就乱拍~:) 
 
    
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-12-10 07:54 | 
  
 | 
 | 
 
lxmxn 
版主
 
        
 
  
 
积分 11386 
发帖 4938 
注册 2006-7-23 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
 
  哈哈,偶也来捧场啦~ 
 
  想不到 Redtek 兄这么快就开网志了~SINA上面还有几个批处理的实例供偶学习学习的~~ 
 
  感觉这汇编挺难的,没信心了…… o_O 
 
    
 
  
 |   
 | 
  2006-12-10 08:36 | 
  
 | 
 | 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
哈哈…… 
Sina的网志写了有一段时间了,多半都是摄影内容~:) 
俺觉得这里放代码学习内容为主的网志最合适不过:D 
 
汇编太难学(感觉按书上次序学简直需要极高的耐心),而且全是抽象的一两行的汇编片断(这片断很多都不能在Debug里直接编)。 
编译器要求的代码表示和Debug里的直译表示不一样,书上又只讲理论,不讲都是干什么用的,更抽象了…… 
 
不过,难就难吧,哈哈…… 
一天啃一两句,早晚能啃下来~:) 
 
    
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-12-10 08:46 | 
  
 | 
 | 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 12 楼』:
 【80x86汇编语言学习笔记】
 
使用 LLM 解释/回答一下
  
寄存器寻址方式
(书) P24页
  
MOV   BX,AX                ; 执行结果(BX)=(AX) 
 
访问普通变量时,默认是DS段寄存器,但也可以显式的指定为ES、SS、CS、GS、FS。 
可以使用段超越前缀显式地指定段寄存器。
 
debug学习过程:
  
-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 楼』:
 
 
使用 LLM 解释/回答一下
  
Redtek兄真是性情中人, 网志搞得有声有吗.  呵呵~ 那个烤黄粉虫的好, 有营养... 
 
自学的苦与乐只有自己才能品尝到. 加油~~~! 
 
    
 
  
  |  
                  
  
                    业精于勤而荒于嬉,形成于思而毁于随。 |   
 | 
  2006-12-10 11:14 | 
  
 | 
 | 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
多谢pengfei兄鼓励~:) 
 
    
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-12-10 12:10 | 
  
 | 
 | 
 
electronixtar 
铂金会员
 
       
 
  
  
积分 7493 
发帖 2672 
注册 2005-9-2 
状态 离线
 | 
『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
看到牛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 | 
  
 |